[multicore] 다중 CPU, 다중 코어 및 하이퍼 스레드

누구나 멀티 CPU, 멀티 코어 및 하이퍼 스레드의 차이점을 설명하기 위해 몇 가지 문서를 추천 해 줄 수 있습니까? 나는 항상 이러한 차이점과 다른 시나리오에서 각 아키텍처의 장단점에 대해 혼란스러워합니다.

편집 : 온라인으로 학습하고 다른 사람들의 의견에서 배운 후의 현재 이해입니다. 누구든지 의견을 검토해 주시겠습니까?

  1. 하이퍼 스레드는 그 중에서도 가장 열등한 기술이라고 생각하지만 저렴합니다. 주요 아이디어는 컨텍스트 전환 시간을 절약하기위한 중복 레지스터입니다.
  2. 멀티 프로세서는 하이퍼 스레드보다 낫지 만 다른 CPU가 다른 칩에 있기 때문에 다른 CPU 간의 통신은 멀티 코어보다 지연 시간이 길고 여러 칩을 사용하므로 멀티 코어보다 비용과 전력 소비가 더 많습니다. ;
  3. 멀티 코어는 모든 CPU를 단일 칩에 통합하므로 멀티 프로세서에 비해 서로 다른 CPU 간의 통신 대기 시간이 크게 줄어 듭니다. 하나의 단일 칩을 사용하여 모든 CPU를 포함하기 때문에 전력 소비량이 적고 멀티 프로세서 시스템보다 저렴합니다.

미리 감사드립니다, 조지



답변

멀티 CPU가 첫 번째 버전이었습니다. 하나 이상의 CPU 칩이있는 메인 보드가 하나 이상있을 것입니다. 여기서 가장 큰 문제는 CPU가 내부 데이터의 일부를 다른 CPU에 노출하여 방해가되지 않도록해야한다는 것입니다.

다음 단계는 하이퍼 스레딩이었습니다. 메인 보드에 하나의 칩이 있지만 내부적으로 일부 부품이 두 번 들어있어 동시에 두 개의 명령을 실행할 수 있습니다.

현재 개발은 멀티 코어입니다. 기본적으로 원래 아이디어 (여러 개의 완전한 CPU)이지만 단일 칩에 있습니다. 장점 : 칩 설계자는 동기화 신호를위한 추가 와이어를 칩에 쉽게 넣을 수 있습니다 (핀으로 라우팅 한 다음 혼잡 한 메인 보드를 거쳐 두 번째 칩으로 연결하는 대신).

오늘날 슈퍼 컴퓨터는 다중 CPU, 다중 코어입니다. 일반적으로 2-4 개의 CPU가있는 메인 보드가 많이 있고 각 CPU는 다중 코어이며 각각 자체 RAM이 있습니다.

[편집] 당신은 거의 맞았습니다. 몇 가지 사소한 사항 :

  • 하이퍼 스레딩은 단일 코어에서 한 번에 두 개의 컨텍스트를 추적하여 비 순차적 CPU 코어에 더 많은 병렬성을 노출합니다. 이렇게하면 한 스레드가 캐시 미스, 분기 오 예측 또는 대기 시간이 긴 명령의 결과를 기다리는 경우에도 실행 단위에 작업이 계속 제공됩니다. 많은 하드웨어를 복제하지 않고도 더 많은 총 처리량을 얻을 수있는 방법이지만, 어떤 경우에는 각 스레드를 개별적으로 느리게합니다. 자세한 내용과이 단락의 이전 문구에서 무엇이 잘못되었는지에 대한 설명은 이 Q & A를 참조하십시오 .

  • 다중 CPU의 주요 문제는 실행중인 코드가 결국 RAM에 액세스한다는 것입니다. N 개의 CPU가 있지만 RAM에 액세스하는 버스는 하나뿐입니다. 따라서 a) 각 CPU에 상당한 양의 RAM 액세스 권한이 있는지, b) RAM의 동일한 부분에 대한 액세스가 문제를 일으키지 않는지, c) 가장 중요한 것은 CPU 2에 알림이 전송되도록하는 하드웨어가 있어야합니다. CPU 1이 CPU 2가 내부 캐시에있는 일부 메모리 주소에 쓸 때. 그렇지 않은 경우 CPU 2는 캐시 된 값을 기꺼이 사용하고 오래된 값이라는 사실을 알지 못합니다.

    목록에 작업이 있고이를 사용 가능한 모든 CPU에 분산시키고 싶다고 상상해보십시오. 따라서 CPU 1은 목록에서 첫 번째 요소를 가져와 포인터를 업데이트합니다. CPU 2도 마찬가지입니다. 효율성을 위해 두 CPU는 몇 바이트를 캐시에 복사 할뿐만 아니라 전체 “캐시 라인”(어쨌든)을 복사합니다. X 바이트를 읽을 때 곧 X + 1도 읽을 수 있다는 가정이 있습니다.

    이제 두 CPU 모두 캐시에 메모리 사본이 있습니다. 그러면 CPU 1은 목록에서 다음 항목을 가져옵니다. 캐시 동기화가 없으면 CPU 2가 목록을 변경했음을 알 수 없으며 CPU 2와 동일한 항목에서 작동하기 시작합니다.

    이것이 멀티 CPU를 효과적으로 복잡하게 만드는 이유입니다. 이것의 부작용은 전체 코드가 단일 CPU에서만 실행될 경우 얻을 수있는 것보다 더 나쁜 성능으로 이어질 수 있습니다. 솔루션은 멀티 코어였습니다. 캐시를 동기화하는 데 필요한만큼 와이어를 쉽게 추가 할 수 있습니다. 한 캐시에서 다른 캐시로 데이터를 복사 할 수도 있습니다 ( 캐시 라인의 일부 를 플러시하고 다시로드 할 필요없이 업데이트 ). 또는 캐시 로직은 모든 ​​CPU가 동일한 캐시 라인에 액세스 할 때 동일한 캐시 라인을 얻도록 할 수 있습니다. 실제 RAM, CPU 1이 변경 될 때까지 몇 나노초 동안 CPU 2를 차단합니다.

멀티 코어가 멀티 CPU보다 간단한 주된 이유는 메인 보드에서 동기화를 효과적으로 만드는 데 필요한 두 칩 사이의 모든 와이어를 실행할 수 없기 때문입니다. 또한 신호는 30cm / ns 상단까지만 이동합니다 (광속, 와이어에서는 일반적으로 훨씬 적음). 다층 메인 보드에서 신호가 서로 영향을 미치기 시작한다는 사실을 잊지 마십시오 (누화). 0은 0V이고 1은 5V라고 생각하지만 실제로는 “0”은 -0.5V (1-> 0에서 라인을 떨어 뜨릴 때 오버 드라이브)와 .5V 및 “1”은 0.8V 이상입니다.

단일 칩 안에 모든 것이 있으면 신호가 훨씬 빠르게 실행되고 원하는만큼 많이 가질 수 있습니다 (거의 :). 또한 신호 누화를 훨씬 쉽게 제어 할 수 있습니다.


답변

Intel 웹 사이트 또는 Yale University 의 짧은 기사에서 듀얼 CPU, 멀티 코어 및 하이퍼 스레딩에 대한 흥미로운 기사를 찾을 수 있습니다. .

여기에서 필요한 모든 정보를 찾을 수 있기를 바랍니다.


답변

요약하자면 다중 CPU 또는 다중 프로세서 시스템에는 여러 프로세서가 있습니다. 멀티 코어 시스템은 동일한 다이에 여러 프로세서가있는 멀티 프로세서 시스템입니다. 하이퍼 스레딩에서는 여러 스레드가 동일한 프로세서에서 실행될 수 있습니다 (즉, 이러한 여러 스레드 간의 컨텍스트 전환 시간이 매우 짧음).

멀티 프로세서는 30 년 동안 존재했지만 대부분은 실험실에 있습니다. 멀티 코어는 널리 사용되는 새로운 멀티 프로세서입니다. 오늘날 서버 프로세서는 다중 프로세서와 함께 하이퍼 스레딩을 구현합니다.

이 주제에 대한 위키피디아 기사는 매우 예시 적입니다.


답변