Windows 프로세서 친 화성이 하이퍼 스레딩 된 CPU와 어떻게 작동합니까?


25

Windows 프로세서 친 화성이 하이퍼 스레딩 된 CPU와 어떻게 작동합니까? 하이퍼 스레드 가상 코어가있는 4 개의 코어가있는 시스템을 예로 들어 봅시다 (그림 참조).

  1. 아래의 각 "CPU"에 해당하는 코어는 무엇입니까?
  2. 아래 (말하기) CPU 6과 CPU 7은 하나의 코어를 나타냅니다. HT와 진짜 코어?
  3. 예를 들어, CPU 6이 실제 코어를 나타내고 CPU 7이 HT 코어 인 경우, 단지 CPU 7에 할당 된 스레드가 실제 코어의 리소스를 남겨 둡니까? (코어가 다른 작업을 실행 중이라고 가정)
  4. 스레드가 내부적으로 저글링되도록 하이퍼 스레딩이 프로세서 내에서 완전히 관리됩니까? 그렇다면 CPU 범위 또는 핵심 범위에서입니까? 예 : CPU 6과 7이 하나의 코어를 나타내는 경우, CPU가 실행중인 스레드에 적절한 자원을 할당하기 때문에 어떤 프로세스가 할당되었는지는 중요하지 않습니까?
  5. 적어도 작업 관리자에 따르면 오래 동안 실행되는 단일 스레드 프로세스가 코어 주위에서 꽤 많이 튀어 나오는 것을 보았습니다. 즉, 단일 코어에 프로세스를 할당하면 컨텍스트 스위치 및 캐시 무효화 등을 피하면서 성능이 약간 향상됩니다. 그렇다면 "가상 코어"에 할당하지 않는다는 것을 알고 있습니까?

이것은 매우 모호하고 혼란 스럽습니다. HT는 훌륭하지만 확실히 자원 배분의 투명성을 떨어 뜨리는 것처럼 보입니다.

Processor affinity menu


알다시피, 모든 CPU 코어는 "가상 코어"입니다. 각각은 CPU에 물리적으로 연결되어 있으며 "가상"이라는 용어는 하드웨어 하이퍼 스레딩 구현으로 인해 Windows가 이러한 CPU에서 프로세스를 예약하는 방법에서 비롯됩니다. 자세한 내용은 내 대답을 참조하십시오.
Breakthrough

또한, 당신을위한 마지막 코멘트. "HT는 훌륭하지만 자원 배분의 투명성을 떨어 뜨리는 것 같다"고 말했다. 이것은 100 % 사실이지만, 그것에 대해 할 수있는 것은 거의 없으며 많은 이유가 있습니다. ...에 대한 너는 그것에 대해 아무 것도 할 수 없다. 모든 최신 운영 체제는 하이퍼 스레딩 (hyperthreading)이 무엇인지 알고 있으며, 대부분의 프로세서 스케줄러는이를 보완하기 위해 노력하고 있습니다. 몇 가지 특별한 경우를 제외하고는 (거의 의미가 없습니다.) 거의 항상 성능 이점이 있습니다.
Breakthrough

답변:


17

아래의 각 "CPU"에 해당하는 코어는 무엇입니까?

코어 1, 2, 3 및 4가 있다고 가정하면 CPU4와 CPU5는 코어 3을 나타냅니다.

아래 (말하기) CPU 6과 CPU 7은 하나의 코어를 나타냅니다. HT와 진짜 코어?

둘 사이에는 구별이 없습니다. 둘 다 CPU에 대한 물리적 하드웨어 인터페이스를 가지고 있으며 논리적 인터페이스는 하드웨어로 구현됩니다 ( 인텔 코어 프로세서 데이터 시트 1 권 자세한 사항은). 기본적으로 각 코어에는 두 개의 별도 실행 단위가 있지만 두 코어간에 공통된 리소스가 있습니다. 따라서 하이퍼 스레딩이 실제로 성능을 저하시킬 수있는 경우가 있습니다.

예를 들어, CPU 6이 실제 코어를 나타내고 CPU 7이 HT 코어 인 경우, 단지 CPU 7에 할당 된 스레드가 실제 코어의 리소스를 남겨 둡니까? (코어가 다른 작업을 실행 중이라고 가정)

위 참조. 유일한 CPU6 또는 유일한 CPU7에 할당 된 스레드는 동일한 속도로 실행됩니다 (스레드가 동일한 작업을 수행하고 프로세서의 다른 코어가 유휴 상태에 있다고 가정). Windows는 HT 지원 프로세서에 대해 알고 있으며 프로세스 스케줄러는 이러한 사항을 고려합니다.

하이퍼 스레딩이 프로세서 내에서 완전히 관리되어 스레드가 내부적으로 저글링됩니까? 그렇다면 CPU 범위 또는 핵심 범위에서입니까? 예 : CPU 6과 7이 하나의 코어를 나타내는 경우, CPU가 실행중인 스레드에 적절한 자원을 할당하기 때문에 어떤 프로세스가 할당되었는지는 중요하지 않습니까?

양자 모두. 실제 하드웨어 자체는 아니 프로그램을 실행할 코어를 계획하십시오. 이것이 운영 체제의 작업입니다. 그러나 CPU 자체는 실제 실행 단위간에 리소스를 공유 할 책임이 있으며 인텔은 가능한 한 효율적으로 코드를 작성하는 방법을 결정합니다.

적어도 작업 관리자에 따르면 오래 동안 실행되는 단일 스레드 프로세스가 코어 주위에서 꽤 많이 튀어 나오는 것을 보았습니다. 즉, 단일 코어에 프로세스를 할당하면 컨텍스트 스위치 및 캐시 무효화 등을 피하면서 성능이 약간 향상됩니다. 그렇다면 "가상 코어"에 할당하지 않는다는 것을 알고 있습니까?

이는 정상적인 동작이며, 아니요, 단일 코어에 할당하면됩니다. 아니 성능을 향상시킵니다. 즉, 어떤 이유로 단일 프로세스가 단일 물리적 코어에서만 실행되도록하려면 단일 논리 프로세서에 할당하십시오.

프로세스가 "반송되는"이유는 프로세스 스케줄러 때문입니다. 이는 정상적인 동작이며 프로세스 스케줄러가 모든 작업을 제한 사항에 적용하기 위해 더 많은 노력을 기울여야하기 때문에 프로세스가 실행할 수있는 코어 (스레드의 수에 관계없이)를 제한하여 성능이 저하 될 가능성이 높습니다. 예, 대부분의 경우이 벌금은 무시할 만하지만 최종선은 이럴 이유가 없다면 !


5

CPU 레이아웃은 모든 CPU를 인식 할 수없는 운영 체제가 최대한의 성능을 발휘할 수 있도록 구성되어야합니다. 즉, 물리적 코어의 두 번째 가상 코어가 나열되기 전에 각 물리적 코어의 가상 코어 하나가 나열됩니다.

예를 들어, A, B, C 및 D라고하는 네 개의 하이퍼 스레드 코어가 있다고 가정하십시오. A와 B가 L2 캐시를 공유하고 C와 D가 L2 캐시를 공유한다고 가정하면 순서는 다음과 같아야합니다.
0 = A1 1 = C1 2 = B1 3 = D1 4 = A2 5 = C2 6 = B2 7 = D2

그런 식으로, 2 개의 CPU 만 잡을 수있는 운영 체제는 모든 L2 캐시를 사용하게됩니다. 또한 4 개의 CPU 만 잡을 수있는 운영 체제는 모든 실행 단위를 사용합니다.

다시 말하지만, 이것이 원래의 모습입니다.

물론 CPU 토폴로지를 이해하는 운영 체제를 사용하는 경우 문제가되지 않습니다. BIOS는 어떤 코어가 실행 단위를 공유하는지, 캐시를 공유하는지 등을 설명하는 표를 채 웁니다. CPU를 완벽하게 지원하는 모든 최신 운영 체제가 전체 CPU 토폴로지를 이해합니다.


1
  1. 어떻게 대응되는지는 CPU & amp; 마더 보드는 코어를 열거하고 식별합니다. 일어날 일은 물리적 소켓이 먼저 열거되고 그 다음에 논리적 코어가 생기고 가상 코어가 지속되는 것입니다. 당신의 경우 코어 0-3은 물리적 코어이어야하고 가상 HT 코어는 4-7이어야합니다. 이것의 주된 이유는 사용 가능한 모든 실행 단위를 처리 할 수없는 OS를 실행하는 경우 공유 된 단위보다 먼저 가장 독립적 인 단위를 먼저 얻는 것입니다. 가상의 2-CPU 전용 OS가 2 개의 서로 다른 코어 대신 시스템에서 HT 쌍을 발견하면 좋지 않을 것입니다. (이것은 커널 스케줄러가 새 CPU에 대해 업데이트 될 수 있기 전에 일부 초기 HT 시스템에서 실제 문제였습니다.)
  2. 아니, 1 참조.
  3. HT는 그보다 더 복잡합니다. 2 개의 가상 코어는 다른 비트가 분리되어 있지만 일부 리소스는 공유하지만 한 번에 하나만 실행될 수 있다는 점을 기억하십시오.
  4. 일종의. 귀하의 예 (가정을 가정)는 일반적으로 정확합니다. 그러나 응용 프로그램이 실행중인 작업 부하의 종류를 알 수 있으면 OS가 스레드를 적절하게 스케줄하는 데 도움이 될 수 있습니다.
  5. 코어 호핑에 대한 좋은 이유가 있습니다. 열 작업 부하를 분산시키는 것입니다. 어쨌든 더 높은 수준의 캐시 (L2, L3)가 모든 코어에서 공유되므로 코어 홉핑은 성능에 큰 영향을주지는 않지만 열 충격은 중요합니다. 왜냐하면 "핫 스폿"이 없기 때문입니다 끊임없이 움직이고있는 다른 코어는 유휴 상태입니다. 이제 멀티 소켓 시스템 (특히 NUMA 시스템)의 교차 소켓은 성능에 큰 영향을 줄 수 있습니다. 대부분의 스케줄러는이를 알고 있으며이를 고려합니다.

궁극적으로 이것은 최종 사용자가 스레드 선호도로 할 수있는 일이 거의 없기 때문에 성능에 큰 영향을 미칠 수있는 경우가 거의 없기 때문에 다양한 비트에 대해 알고있는 최신 OS를 실행하고 있는지 확인해야합니다. 귀하의 시스템.

선호도를 수동으로 지정하는 작업 부하가 큰 영향을받는 워크로드를 발견하면 프로그램 개발자가 버그로보고하여 프로그램을 수정할 수 있습니다.


4
"코어 0-3은 물리적 코어이어야하고 4-7은 가상 HT 코어입니다."실제로 코어 0과 코어 1은 동일한 (단일) 물리적 코어에 해당합니다. 각 "하이퍼 스레딩 코어"는 CPU와 물리적으로 2 개의 연결을하므로 Windows는 문자 그대로 8 개의 물리적 코어를 인식합니다. CPU에 하이퍼 스레딩이 있음을 알 수 있습니다. 관심이 있으시면 Intel Core Datasheet를 참조하십시오.
Breakthrough

@Breakthrough 이는 4 개의 코어만을 지원하는 순진한 OS가 물리적 코어의 절반만을 사용한다는 것을 의미하기 때문에 좋은 토폴로지가 아닙니다. 물리적 코어의 두 번째 가상 코어가 나열되기 전에 각 실제 코어의 가상 코어 하나가 가상 코어 목록에 나타나야합니다.
David Schwartz

@DavidSchwartz 토폴로지가 좋은지 아닌지, 논리 프로세서가 열거되는 방식입니다. 따라서 LPs와 코어를 물리적 CPU 패키지와 비교하여 열거하지 않는 초기 OS (예 : Windows 2000 및 이전 버전)에서 하이퍼 스레딩을 비활성화하는 것이 좋습니다.
Jamie Hanrahan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.