저는 2011년 초반 쿼드 코어 i7 Mac을 가지고 있습니다. 하이퍼스레딩으로 인해 많은 프로그램이 8개의 "코어"를 보고합니다. 병렬로 실행되는 프로그램을 작성한다면 이 프로그램의 인스턴스를 8개만 시작할 수 있습니까, 아니면 4개만 시작할 수 있습니까?
원하는 만큼 많은 스레드를 시작할 수 있지만 프로그램의 인스턴스가 4개 또는 8개가 병렬로 실행되는 것을 볼 수 있습니까?
답변1
Intel Core i7 프로세서에는 4개의 물리적 코어가 있지만 각 코어는 한 번에 최대 2개의 스레드를 입력할 수 있어 "사용 가능한 논리 CPU"의 형태로 운영 체제에 총 8개의 스레드를 표시합니다.
실제로 단일 코어는 한 번에 하나의 스레드만 처리할 수 있지만 2개의 스레드가 동시에 "파이프라인"의 서로 다른 단계에 있을 수 있도록 하는 특별한 대기열/타이밍/스케줄링 메커니즘을 갖추고 있습니다. 이를 통해 CPU는 한 번에 하나의 스레드만 처리하는 경우보다 더 빨리 2개의 스레드를 완료할 수 있습니다. 두 스레드가 모두 동일한 파이프라인을 공유하기 때문에 성능 이점은 당연히 2배가 되지 않습니다. 대부분의 테스트에서는 실행되는 명령 유형에 따라 10%에서 50% 사이의 이점을 추정합니다.
귀하의 질문에 대한 답변으로, 프로그램의 인스턴스 4개, 8개 또는 16개를 시작하면 모두 "실행"되지만 각 명령에 대한 지침은 사용 가능한 스레드 수에 따라 대기열에 추가됩니다. 사용 가능한 물리적 코어 수(예: 5개 이상)를 초과하면 기본 4개를 초과하는 모든 스레드가 물리적 CPU 코어를 공유하므로 성능이 저하됩니다.
마지막으로, 사용 가능한 CPU 스레딩 기능의 한계(8개 스레드 초과)에 도달하면 OS는 파이프라인의 작업이 완료될 때까지 기다리기 위해 예약/대기 명령을 시작합니다. 이상적으로는 성능에 부정적인 영향을 미치고 시스템에 병목 현상을 일으킬 수 있으므로 사용 가능한 스레드를 초과하지 않는 것이 좋습니다.