단일 스레드 프로그램으로 여러 코어를 사용할 수 있습니까?


12

제목은 모든 것을 말합니다 : 단일 CPU 코어를 사용하여 여러 CPU 코어를 사용하도록 설계된 구형 프로그램을 얻는 방법이 있습니까?


13
아니요, 불가능합니다.
Moab

5
그렇게 쉬운 일이라면 ..
Brendan Long

1
프로세서 (예 : vm)를 '에뮬레이트'했지만 멀티 코어 CPU를 가져와 스레드 당 훨씬 많은 처리 성능으로 단일 코어 CPU를 에뮬레이트 한 프로그램이 있다면 어떨까요? 가능합니까?
schizoid04

순서가 중요하기 때문에 누가 여러 스레드 간의 동기화를 관리합니까?
user36582

답변:


16

불행하게도, 단일 CPU 용으로 작성된 레거시 프로그램은 여러 CPU 코어를 사용하도록 강요 할 수 없습니다. 다중 CPU 코어를 사용하려면 다중 스레드가 필요합니다. 스레드는 경쟁 조건 및 기타 문제가 발생하지 않도록 서로 통신해야합니다. 이전 응용 프로그램은 다시 작성하지 않고 응용 프로그램의 특성상 병렬 처리가 가능한 경우에만 CPU 코어 이상을 사용하도록 만들 수 없습니다.


19
또한 여러 응용 프로그램을 여러 코어를 고려하여 재 작성할 수 없다는 점도 주목할 가치가 있습니다. 프로세스의 병렬화 정도에 달려 있습니다. 병행 할 수없는 과정의 간단한 예는 인간 생식입니다. 한 여자는 9 개월 안에 한 아이를 만들 수 있습니다. 9 명의 여성은 9 개월 동안 9 명의 자녀를 만들 수 있지만 한 달에 9 명의 여성을 사용하여 한 명의 자녀를 만들 수는 없습니다.
AndrejaKo

1
원칙적으로 다른 프로그램을 분석하고 병렬화를 시도하는 프로그램을 작성할 수 있습니다. 즉,이 문제의 매우 제한된 "쉬운"버전조차도 박사 학위를 생성하고 있습니다. 지난 몇 세대 동안의 논문과 진행 과정은 느리다. 전체 문제는 AI가 완전히 완료된 것일 수 있습니다.
dmckee --- 전 운영자 고양이

모두 감사합니다. 특히 제조에 대해 이야기 할 때 특히 여성과 출생 사례에 대해 불만을 나타 냈습니다. D
Chris

프로그램이 나중에 서로를 위해 사용되는 많은 독립적 인 수학 연산을 가지고 있다면 어떨까요? 어쩌면 두 번째 스레드가 프로그램을 구문 분석 할 수 있습니다. 흠, 내가 무슨 말을하는지 모르겠습니다. 스레드가 어셈블리를 구문 분석 할 수있는 경우 "여기서 비싼 작업을 수행 한 다음 첫 번째 비싼 작업이 닿지 않는 두 번째 비싼 작업을 수행하십시오"알겠습니다. 메인 스레드에 다시. 독립적 인 고가의 작업을 식별하기 위해 전체 프로그램을 미리 분석해야한다고 생각합니다.
흐름

13

그것으로 당신의 목표는 무엇입니까? 성능 향상? 안타깝게도 1 코어 만 사용하도록 설계된 응용 프로그램은 더 이상 사용하지 않습니다. 이것이 바로 "멀티 스레드"응용 프로그램에 대한 이야기입니다.


2

단일 코어를 사용하도록 설계된 프로그램에서 여러 프로세서를 활용하는 데는 적어도 세 가지 기술이 있습니다. 이러한 기술 중 가장 간단한 방법은 여러 코어를 사용하거나 응용 프로그램 코드와 적어도 부분적으로 병렬로 실행할 수있는 라이브러리 및 시스템 코드를 사용하는 것입니다. 가비지 콜렉션은 병렬화 될 수 있고 애플리케이션 실행과 병렬로 수행 될 수있는 기능의 예입니다. 자동 메모리 관리가 없어도 메모리 할당 기능에서 병렬 처리의 가능성이 있습니다. 메모리 할당자는 단순히 메모리 섹션을 사용 가능한 것으로 표시하는 것 이상의 작업을 수행 할 수 있기 때문입니다.

두 번째 기술은 이진 변환입니다. "응용 프로그램 다시 작성"으로 간주 될 수 있지만 소프트웨어에 의해 수행되고 소스 코드에 액세스 할 수 없습니다. 스레드 수준 병렬 처리를 생성하는 것은 바이너리 변환 (종종 다른 ISA에서 레거시 코드 실행, ISA 확장 활용 또는 특정 마이크로 아키텍처 최적화 및 동적 정보를 사용하여 더 높은 수준의 정보 제공)을 사용하는 대부분의 연구 개발의 주요 목표가 아닌 것으로 보입니다. 품질 프로파일 가이드 최적화), 그러나 잠재력은 분명합니다.

세 번째 기술은 추론 적 멀티 스레딩입니다. 현재 내가 아는 프로세서는 하드웨어 관리 형 추론 멀티 스레딩을 지원하지 않습니다. 그러나 하드웨어 트랜잭션 메모리가 도입되면서 HTM을 사용하여 메모리 사용 충돌을 감지 할 수 있기 때문에 런타임 시스템 구현을 구현하는 것이 다소 실용적입니다. 소프트웨어 관리 형 추론 멀티 스레딩에는 일반적으로 일부 이진 변환이 포함되지만 그 추론 적 특성으로 인해 별도의 기술을 고려할 수 있습니다.

이러한 기술의 실용성은 기존 시스템과 관련된 비용 (스레드와 스레딩 스레드 간의 통신 비용 포함), 악용 할 수있는 제한된 병렬 처리 및 제한된 투자 수익 (이윤을 얻을 수있는 중요한 응용 프로그램)에 의해 제한됩니다. 병렬화가 다시 작성 될 가능성이 높으며, 이러한 응용 프로그램 (특히 단일 코어를 여러 코어보다 높은 주파수에서 실행할 수있는 전력 / 열 제한)로 인해 많은 응용 프로그램이 상대적으로 혜택이 적으며 개발 비용이 상당합니다. 그러나 이러한 기술 존재하며 이론적으로 단일 코어를 사용하도록 설계된 응용 프로그램으로 여러 코어를 사용할 수 있습니다.


0

아뇨. 여러 코어를 사용하도록 프로그램이 명시 적으로 작성되었습니다. 여러 코어에서 작업을 수행하는 것은 쉽지 않습니다. 모든 스레드의 동기화가 필요합니다. 하나는 공을 던지고 다른 하나는 공을 연마하고, 하나는 공을 연마하고, 하나는 청소하고, 하나는 공에 충분한 양의 공기가 있는지 확인합니다. 이제 각 문자가 서로 독립적으로 스레드에서 실행되는 것으로 상상하십시오. 던지지 않을 때 누군가 공을 잡으려고합니다. 또는 누군가 공을 재생할 때 공을 닦으려고합니다. 또는 두 명의 캐릭터가 동시에 공을 잡으려고합니다. 충돌하는 방법은 너무 많습니다. 따라서 프로그래머는 여러 코어를 활용할 수 있도록 단일 코어 응용 프로그램을 신중하게 재 설계해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.