2013-09-29 2 views
2

오늘 내 머리를 통과 한 것. 예를 들어 팀 4 코어를 4 코어의 4 배로 단일 코어 CPU를 에뮬레이트 할 수 있습니까?멀티 코어에서 싱글 코어 에뮬레이션 (코어 팀 구성)으로?

내 말은, 3Ghz 쿼드 코어 CPU가 있다고 가정 해 봅시다. 이 에뮬레이션에서 에뮬레이트 된 CPU는 단일 코어 CPU이지만 12Ghz의 견고한 성능을 제공합니다.

나는 이것이 가능하지 않다고 확신하지만, 궁금한 점은 무엇인가를 방해하는 장애물은 무엇일까요?

감사합니다.

+5

이렇게하면 가능하면 모든 사람들이 그렇게 할 것입니다. –

답변

0

주요 장애물은 자동 병렬 컴파일 컴파일러와 동일합니다. 직렬 실행을 위해 작성된 프로그램을 동일한 작업을 수행하는 병렬 프로그램으로 변환하기가 어렵습니다. 인간은 그렇게하기 위해 많은 시간을 보내고 기계는 많은 도움을주지 못합니다.

직렬 프로그램으로 기계 명령어의 흐름을 고려하십시오. 각 명령어는 리소스 (레지스터, 메모리)에 액세스하고 때때로이를 변경합니다. 향후 지침에서는 이전의 지침에서 공유 데이터 변경을 완료했다고 가정합니다. 명령은 모든 입력을 사용할 수있을 때까지 실행할 수 없습니다. 그러나 향후 명령이 현재 처리중인 데이터에 의존하지 않으면 이전에 시작될 수 있습니다.

현대의 비 순차적 CPU는 데이터 독립적 인 명령어를 찾는 직렬 명령어 흐름을 스캔하고 프로세서 내부의 여러 실행 리소스에 스케줄링합니다. a) 추출 가능한 병렬 처리가 있고 b) 모든 것이 프로세서 내부에서 단단히 수행되고 의사 결정이 신속하게 이루어질 수 있기 때문에 가능합니다.

먼저, 이러한 종류의 병렬 처리는 본질적으로 제한됩니다. 모든 후속 명령어가 앞의 명령어 (예 : 소위 "포인터 추적 시퀀스")에 의존하는 합성 프로그램을 작성하면 CPU 내에서 몇 개의 병렬 실행 유닛을 사용할 수 있는지 상관없이 추출 할 병렬 처리가 없습니다 . CPU를 더 추가하면 분명히 도움이되지 않습니다.

둘째, 게스트 코드가 이미 실행중인 동안 실행 대상을 병렬로 결정해야합니다. 독자적으로 달리는 것이 안전하다고 블록을 너무 오래 생각하면 낭비되는 사고가 실제로 작동하는 물건의 시간 절약을 능가 할 것입니다. 단일 CPU 내부에는 모든 것이 서로 가깝기 때문에 기회가 있습니다. 다중 CPU 또는 심지어 CPU 코어는 서로 멀리 떨어져 있으며 느린 메모리를 통해 통신하므로 현재 작업을 병렬 처리하는 방법에 대한 런타임 프로그래밍 방식 결정을 내리는 것은 너무 느립니다.

소프트웨어 컴파일러에서 직렬 프로그램을 가져 와서 병렬 코드를 생성하도록 지시 한 경우 설명 된 "런타임"상황과 "오프라인"상황을 비교하십시오. 그것은 상대적으로 말하면, 세상에서 항상 그렇게 할 것입니다. 그리고 30 년 이상 연구 한 후에는 이 여전히 인 것을 빨아들입니다.

관련 문제