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


80

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

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

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

미리 감사드립니다, 조지


하이퍼 스레딩은 열등하지 않습니다. 특히 서버에 매우 유용합니다. ILP에서 감소하는 수익이 있습니다 (순차적 명령을 재 배열하여 프로세서를 계속 바쁘게 유지). 하이퍼 스레딩은 병렬 처리를 향상시키는 대안입니다. 여러 하드웨어 스레드가 많은 오버 헤드없이 실행됩니다.
amit

멀티 코어 및 멀티 프로세서에 대한 다른 포인트는 어떻습니까? 내 포인트가 맞다고 생각하십니까? 뭐가 잘못 됐나요?
George2

1
@ George2-귀하의 편집은 매우 사실입니다. 그게 전체 아이디어입니다. :) 서버에서 얻을 수있는 가장 좋은 것은 아마도 멀티 코어 멀티 CPU 일 것입니다. 그러나 일반적인 사용에서는 멀티 코어가 최선의 선택입니다!
Bogdan Constantinescu

감사합니다 Bogdan, 귀하의 확인으로 더 확신합니다! :-)
George2

하이퍼 스레딩에 대한 끔찍한 설명입니다. 요점은 비 순차 코어의 프런트 엔드에 약간의 추가 하드웨어 만 사용하여 더 높은 총 처리량을 얻기 위해 스레드 당 성능을 포기하는 것입니다. 수락 된 답변에서 비슷한 단락에 대해 묻는 이 Q & A를 참조하십시오 (수정하기 전에).
Peter Cordes

답변:


86

멀티 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 이상입니다.

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


3
하이퍼 스레딩은 여러 스레드의 병렬 실행을 "그냥"시뮬레이션하지만 주로 기본 제공 CPU 논리를 통해 멀티 스레드 성능을 향상 시키려고하기 때문에 하이퍼 스레딩에 대한 개념은 약간 오해의 소지가 있습니다.
JC Inacio

@jcinacio, 하이퍼 스레딩이 다중 프로세스 성능을 개선합니까? 왜?
George2

@Aaron, 1. 나는 당신에게서 배운 후 나의 원래 게시물에서 나의 현재 포인트를 편집했습니다. 검토하고 의견을 보내 주시기 바랍니다. 2. "내부 데이터의 일부를 다른 CPU에 노출시켜 방해받지 않도록한다"는 의미입니다. 귀하의 게시물에?
George2

@Aaron, 귀하의 답변이 너무 훌륭합니다. 마지막 질문입니다. 멀티 코어 CPU가 CPU 상태 동기화 / RAM 문제 대기 문제를 해결하는 이유는 무엇입니까? 코드 논리가 동일하면 동기화 및 RAM 대기 문제가 여전히 존재한다고 생각합니다. 다른하실 말씀 있나요?
George2

1
@AmitP는 너무 광범위한 질문은 투표가 취소 되고 프로그래머에게 마감되는 경향이 있습니다 . Programmers.SE는 어떻게 되나요? Stack Overflow 가이드
gnat

4

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

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


Bogdan, 원래 게시물에서 현재 포인트를 편집했습니다. 검토하고 의견을 보내 주시기 바랍니다. 추천 링크를 읽고 배웠습니다.
George2

@ George2-귀하의 편집은 매우 사실입니다. 이것이 전체 아이디어입니다. :) 서버에서 얻을 수있는 가장 좋은 것은 아마도 멀티 코어 멀티 CPU 일 것입니다
Bogdan Constantinescu

2
두 링크가 모두 끊어졌습니다. (
rkachach

2

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

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

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


Amit, 1. 나는 당신에게서 배운 후 나의 원래 게시물에서 나의 현재 포인트를 편집했습니다. 검토하고 의견을 보내 주시기 바랍니다. 2. 게시물에서 죽고 찢어지는 것은 무엇을 의미합니까?
George2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.