하나의 큰 CPU 코어를 만드십시오. [닫은]


25

CPU 제조업체가 멀티 코어 칩을 만드는 이유를 이해하지 못합니다. 여러 코어의 확장은 끔찍하며 응용 프로그램마다 매우 다르며 많은 코어에서 잘 실행되는 특정 프로그램이나 코드를 지적 할 수 있지만 대부분의 확장은 가비지입니다. 실리콘 다이 공간과 에너지 낭비입니다.

예를 들어 게임은 거의 4 개 이상의 코어를 사용하지 않습니다. Ansys 또는 Fluent와 같은 과학 및 엔지니어링 시뮬레이션은 PC에서 실행되는 코어 수에 따라 가격이 책정되므로 코어가 많을수록 더 많은 비용을 지불하지만 16 개 코어보다 더 많은 코어의 이점은 실제로 열악하지만 64 코어가 있습니다 워크 스테이션 ... 돈과 에너지 낭비입니다. 겨울에는 1500W 히터를 구입하는 것이 훨씬 저렴합니다.

왜 하나의 큰 코어로 CPU를 만들지 않습니까?

만약 그들이 8 코어 CPU와 동등한 1 코어를 만들었다면, 하나의 코어는 IPC가 800 % 증가 할 것이기 때문에 여러 코어에 최적화 된 것만이 아니라 모든 프로그램에서 완전한 성능을 얻을 수있을 것입니다. 더 많은 IPC가 어느 곳에서나 성능을 향상 시키며, 성능을 향상시키는 안정적이고 간단한 방법입니다. 여러 코어는 제한된 수의 프로그램에서만 성능을 향상 시키며 스케일링은 끔찍하고 신뢰할 수 없습니다.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 . 도달 한 모든 결론은 질문 및 / 또는 답변으로 다시 편집해야합니다.
Dave Tweed

이 기사에 관심이있을 수 있습니다 : gotw.ca/publications/concurrency-ddj.htm
lvella

"그러나 더 많은 코어의 이점은 16 개의 코어를 지나면 실제로 열악 해집니다"당신은 분명히 당신이 무엇을 말하는지 모릅니다. 나를 믿어, 나는 수만 개의 CPU에서 실행되는 프로세스에서 일했다. "심지어 병렬화 가능"이라는 문제의 전체 클래스가 있는데, 문제에 더 많은 코어를 던지는 것이 매우 효과적입니다.
Aron

답변:


93

문제는 CPU 제조업체가 더 많은 트랜지스터를 추가하여 단일 CPU 코어를 더 강력하게 만들 수 있다는 가정하에 있습니다.

CPU가 더 많은 일을하도록하려면 더 많은 일을 계획해야합니다. 실제로 세 가지 옵션이 있습니다.

  1. 더 높은 클럭 주파수에서 코어를 실행하십시오 . 문제는 이미 우리가 할 수있는 일의 한계에 부딪 히고 있다는 것입니다.

    전력 사용량과 열 손실은 주파수에 따라 증가합니다. 주파수를 두 배로 늘리면 공칭 전력 소비가 두 배가됩니다. 전압을 높이면 전력 소비가 제곱 전압으로 올라갑니다.

    인터커넥트와 트랜지스터는 또한 세계의 비 이상적인 특성으로 인해 전파 지연 이 있습니다. 트랜지스터 수를 늘릴 수는 없으며 동일한 클록 주파수에서 작동 할 수있을 것으로 기대합니다.

    또한 외부 하드웨어 (주로 RAM)에 의해 제한됩니다. CPU 속도를 높이려면 메모리 속도를 높이거나 데이터 버스 너비를 늘려 메모리 대역폭을 늘려야합니다.


  1. 더 복잡한 명령어 추가 -더 빠르게 실행하는 대신보다 풍부한 명령어 세트를 추가 할 수 있습니다. 암호화와 같은 일반적인 작업을 실리콘으로 강화할 수 있습니다. 소프트웨어에서 계산하는 데 많은 클럭 사이클을 사용하는 대신 하드웨어 가속을 사용합니다.

    이것은 이미 CISC (복합 명령 세트) 프로세서에서 수행되고 있습니다. SSE2, SSE3과 같은 것을 참조하십시오. 오늘날 단일 CPU 코어는 동일한 클록 주파수에서 실행 되더라도 10 년 전의 CPU 코어보다 훨씬 강력합니다.

    문제는 더 복잡한 명령어를 추가할수록 더 많은 복잡성을 추가하고 칩을 더 크게 만드는 것입니다. 직접적인 결과 로 CPU가 느려집니다 . 전파 지연이 증가함에 따라 허용 가능한 클럭 주파수가 떨어집니다.

    이 복잡한 지침은 간단한 작업에도 도움이되지 않습니다. 가능한 모든 사용 사례를 강화할 수는 없으므로 실행중인 소프트웨어의 많은 부분이 새로운 명령의 이점을 얻지 못하므로 실제로 클럭 속도 감소로 인해 피해를 입을 수 있습니다.

    또한 한 번에 더 많은 데이터를 처리하기 위해 데이터 버스 너비를 더 크게 만들 수 있지만, 이로 인해 CPU가 더 커지고 더 큰 데이터 버스를 통해 얻은 처리량과 클럭 속도 저하 간의 균형을 맞출 수 있습니다. 작은 데이터 (예 : 32 비트 정수) 만있는 경우 256 비트 CPU를 사용하면 실제로 도움이되지 않습니다.


  1. CPU 병렬화 -한 가지 작업을 더 빨리 수행하는 대신 여러 작업을 동시에 수행하십시오. 수행하는 작업이 한 번에 여러 가지 작업을 수행하는 경우 명령 당 여러 계산을 수행 할 수있는 단일 CPU (SIMD (Single Instruction Multiple Data)) 또는 각각 하나를 수행 할 수있는 여러 개의 CPU가 필요합니다 계산.

    이것은 멀티 코어 CPU의 주요 드라이버 중 하나입니다. 여러 프로그램이 실행 중이거나 단일 프로그램을 여러 작업으로 분할 할 수있는 경우 여러 CPU 코어를 사용하면 한 번에 더 많은 작업을 수행 할 수 있습니다.

    개별 CPU 코어는 효과적으로 별도의 블록 (캐시 및 메모리 인터페이스 차단)이기 때문에 각 개별 코어는 동등한 단일 모 놀리 식 코어보다 습니다. 코어가 더 작기 때문에 전파 지연이 줄어들고 각 코어를 더 빠르게 실행할 수 있습니다.

    단일 프로그램이 여러 코어를 보유함으로써 이점을 얻을 수 있는지 여부는 전적으로 해당 프로그램이 수행하는 작업 및 작성 방법에 달려 있습니다.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 . 도달 한 모든 결론은 질문 및 / 또는 답변으로 다시 편집해야합니다.
Dave Tweed

여전히 언급되지 않은 의견에서 제기 된 요점 중 하나는 클럭 당 여러 명령 (Superscalar)을 실행하여 CPU를 병렬 처리 할 수 ​​있다는 것입니다. 그것은 SIMD와 주파수에 직교합니다. IPC (명령 당 명령)는 시간당 실제 처리량의 세 번째 요소입니다. 대화식으로 사용되는 워크로드를위한 모든 최신 CPU는 최소 2 너비입니다.
피터 코데


37

다른 답변 외에도 칩 수율 이라는 또 다른 요소 있습니다. 최신 프로세서에는 수십억 개의 트랜지스터가 있으며 전체 칩이 제대로 작동하려면 트랜지스터 각각이 완벽하게 작동해야합니다.

멀티 코어 프로세서를 만들어 트랜지스터 그룹을 깔끔하게 분할 할 수 있습니다. 코어 중 하나에 결함이있는 경우 해당 코어를 비활성화하고 작동하는 코어 수 에 따라 저렴한 가격으로 칩을 판매 할 수 있습니다 . 마찬가지로 SMP 시스템에서와 같이 검증 된 구성 요소로 시스템을 조립할 수도 있습니다.

실제로 구매하는 모든 CPU에 대해 해당 프로세서 라인의 최고급 프리미엄 모델이되기 시작했습니다. 결국 칩의 어떤 부분이 잘못 작동하고 비활성화되는지에 따라 다릅니다. 인텔은 i3 프로세서를 만들지 않습니다. 결함이있는 i7이며 테스트에 실패하여 제품 라인을 구분하는 모든 기능이 비활성화되어 있습니다. 그러나 여전히 작동하는 부분은 여전히 ​​유용하며 훨씬 저렴하게 판매 할 수 있습니다. 더 나쁜 것은 키 체인 악세사리가됩니다.

그리고 결함은 드문 일이 아닙니다. 수십억 개의 트랜지스터를 완벽하게 만드는 것은 쉬운 일이 아닙니다. 주어진 칩의 일부를 선택적으로 사용할 기회가 없다면 결과 가격은 실제로 빠르게 상승 할 것입니다.

단일 프로세서 만 있으면 제조가 전부 또는 전혀 이루어지지 않으므로 훨씬 더 낭비적인 프로세스가 발생합니다. 과학 또는 군사 목적의 이미지 센서와 같이 거대한 센서가 필요하고 모든 센서가 작동해야하는 일부 장치의 경우 이러한 장치의 비용은 주정부 예산만으로도 충분할 수 있습니다.


4
시장 수요보다 생산량이 향상되고 더 완벽하게 작동하는 칩을 생산하는 경우 공급 업체는 일반적으로 가격 구조를 조정하여 가격 구조를 조정하는 대신 일부 코어 / 캐시를 융합하거나 낮은 주파수 SKU에서 비닝하기 시작합니다. 칩이 상대적으로 저렴합니다. GPU / 그래픽 카드를 사용하면 펌웨어 해킹이있는 일부 카드에서 비활성화 된 셰이더 장치의 잠금을 해제하여 운이 좋았는지 확인하고 실제 결함이 아닌 시장 세분화 만 비활성화 된 카드를 얻었습니다.
Peter Cordes

4
인텔은 일부 칩에 대해 듀얼 코어 다이를 제조했습니다. 모든 ULV (초 저전압) 모바일 SKU가 듀얼 코어이므로 결함이있는 쿼드 코어가 충분하지 않았으며 다이 면적이 작을수록 (특히 컷 다운 iGPU가있는 경우) 웨이퍼 당 더 많은 듀얼 코어 칩이 작동합니다. 쿼드 코어 다이를 융합하는 것보다 en.wikichip.org/wiki/intel/microarchitectures/… Sandybridge 131 mm² 다이 크기 듀얼 코어 + GT1 그래픽, 149 mm² 듀얼 코어 + GT2 그래픽 + 216 mm² 쿼드 + GT2의 다이 샷이 있습니다. 캐시 등의 결함에 대한 여지가 여전히 남아 있습니다.
Peter Cordes

또한 FMA 장치의 일부 (결함) 결함은 퓨즈를 풀고 셀러론 또는 펜티엄 칩 (AVX 없음, 128 비트 벡터 만)으로 판매하여 처리 할 수 ​​있습니다. . SIMD FMA 장치는 코어의 괜찮은 부분을 구성하고 정수 mul 및 정수 이동을 포함하여 FP 수학 이외의 많은 SIMD op를 실행하므로 2x 256 비트 FMA 장치를 다음과 같이 매핑 할 수 있다면 놀라지 않을 것입니다. 2 개의 청크를 사용하는 2x 128 비트는 여전히 작동합니다. Skylake Xeon에는 AVX512 FMA 처리량이 감소 된 SKU도 있습니다 (1 작동 512 비트 FMA 만)
Peter Cordes

@PeterCordes 수율이 좋으면 공급 업체는 결함 비율이 코어를 비활성화하거나 칩을 언더 클럭킹 할 수있는 위치로 되돌아 갈 때까지 더 높은 밀도 및 / 또는 더 빠른 클럭 속도 (따라서 더 높은 결함 속도) 설계를 제공합니다. 할인 ..
Monty Harder

@MontyHarder : 그것은 사실이지만, 검증에는 비용과 시간이 들며, 기존 생산 라인은 한동안 기존 디자인을 계속 유지할 것입니다. 그러나 그렇습니다. 여러분이 말하는 인텔의 예는 Haswell Refresh 와 기본적으로 14nm 공정에 대한 약간의 아키텍처 변경없이 약간의 Skylake의 개선 사항입니다. (때로는 새로운 iGPU 사용). 예를 들어 Kaby Lake , Coffee Lake 등은 인텔의 일반적인 틱톡 케이던스에서 "최적화"단계입니다.
Peter Cordes

26

데이터 의존성

칩을 "더 넓게"만들어서 클럭 당 더 많은 명령을 추가하는 것은 상당히 쉽습니다. 이는 "SIMD"방식이었습니다. 문제는 이것이 대부분의 사용 사례에 도움이되지 않는다는 것입니다.

독립 및 종속 워크로드에는 대략 두 가지 유형이 있습니다. 독립 워크로드의 예로는 "A1, A2, A3 ... 및 B1, B2 등의 두 시퀀스가 ​​주어지고 (A1 + B1) 및 (A2 + B2) 등을 계산할 수 있습니다." 이러한 종류의 작업은 컴퓨터 그래픽, 오디오 처리, 기계 학습 등에서 볼 수 있습니다. 이를 처리하기 위해 특별히 설계된 GPU에 많은 부분이 주어졌습니다.

종속 워크로드는 "A를 부여하고 5를 추가하고 테이블에서 찾아보십시오. 결과를 가져와 16을 추가하십시오. 다른 테이블에서 찾아보십시오."

독립적 인 워크로드의 장점은 여러 다른 부분으로 나눌 수 있으므로 더 많은 트랜지스터가이를 지원한다는 것입니다. 의존적 인 워크로드의 경우, 이것은 전혀 도움이되지 않습니다. 더 많은 트랜지스터는 속도를 늦출 뿐입니다 . 메모리에서 가치를 얻어야한다면 이는 속도의 재앙입니다. 신호는 마더 보드를 통해 전송되어 서브 광속으로 이동해야하며, DRAM은 행을 충전하고 결과를 기다렸다가 다시 보내야합니다. 이것은 수십 나노초가 걸립니다. 그런 다음 간단한 계산을 수행 한 후 다음 계산을 보내야합니다.

전원 관리

예비 코어는 대부분 꺼져 있습니다. 실제로, 많은 프로세서에서 불을 끄는 일없이 항상 모든 코어를 실행할 수는 없으므로 시스템이 해당 코어를 끄거나 다운 클럭합니다.

소프트웨어를 다시 작성하는 것이 유일한 방법입니다

하드웨어는 종속 워크로드를 독립 워크로드로 자동 변환 할 수 없습니다. 소프트웨어도 마찬가지입니다. 그러나 많은 코어를 활용하기 위해 시스템을 재 설계 할 준비가 된 프로그래머는 그럴 수도 있습니다.


2
모든 코어를 동시에 실행할 수는 없습니다. 단일 코어 최대 터보 클럭 속도를 CPU의 "실제"클럭 속도로 간주하지 않는 한. 고전적인 의미에서 (전력 벽에 도달하기 전에 클럭 속도가 임계 경로 전파 지연에 의해 제한됨) 그렇습니다. 그러나 현대에서는 모든 것이 유지 될 수있는 것으로 기준 클럭 속도를 보는 것이 더 합리적입니다. 활발한 워크로드를 실행하는 코어. 그보다 더 높은 것은 전력 / 열 제한이 허용하는대로 기회 적으로 사용할 수 있습니다. (예 : 인텔 터보).
Peter Cordes

1
그러나 전력 측면에서 단일 코어의 최대 클럭 조차 전파 지연보다 열에 의해 제한됩니다 (파이프 라인 단계 경계가 선택되어 대상 최대 터보에서 한계에 근접하더라도). 또한 전압도 변합니다. 전력은 좋지만 게이트 지연은 짧습니다. 어쨌든, 단일 코어 최대 터보를 모든 코어를 실행할 수 있어야하는 것으로 생각하는 것은 이치에 맞지 않습니다. 그 한계는 이미 전력에서 나왔기 때문입니다.
Peter Cordes

원래 질문의 맥락은 단일 코어 최대 속도에 대해 분명히 묻고 있었고 많은 실제적인 목적을 위해 (및 캐시 누락) 사용자에게 인식되는 속도의 실제 제한 요소입니다.
pjc50

가능하다면 8 코어 CPU 대신 8 배의 단일 스레드 성능을 사용합니다. (컨텍스트 스위치 오버 헤드없이 자연스럽게 분리 된 워크로드를 실행할 수 있도록 SMT를 사용하면 내 대답을 참조하십시오.) 가상의 초광각 코어는 워크로드가 모두 중단되는 대신 많은 중단을 일으켰을 때 더 빠르게 클럭킹 할 수 있습니다. SIMD FMA 장치의 트랜지스터는 전원을 켜고 매 클럭마다 스위칭합니다. ( 단일 코어 내에서 의 파워 게이팅 은 높은 시계에서 녹지 않도록하는 핵심 요소입니다 ( en.wikipedia.org/wiki/Dark_silicon )). 따라서 하나의 넓은 코어를 갖는 것이 이것을 다르지 않을 것입니다.
Peter Cordes

현재 CPU에서 볼 수있는 단일 스레드 성능이 최악의 경우에도 모든 코어에서 동시에 유지할 수있는 클럭 속도로 제한되는 것보다 낫다는 점이 있습니다. 즉, 터보는 특히 랩톱 칩과 같은 TDP가 낮은 부품 (핵심 CPU가 HPC에서 최대 성능을 유지할 수없는 이유 )에 중요합니다. 일반적으로 고전력이지만 코어 수가 적은 데스크탑 칩과 달리 기준선과 최대 터보 사이의 큰 비율 예를 들어 i7-6700k Skylake는 4GHz 기본, 4.2GHz 단일 코어 터보입니다 (오버 클로킹 없음; 95W TDP에서는 더 높음).
Peter Cordes

20

시간이 지남에 따라 프로세서는 그렇게 빨리 실행할 수 없었습니다. 결과적으로 더 많은 처리를 원하면 더 많은 프로세서가 필요합니다. 이것은 수학 보조 프로세서를 사용하거나 동일한 프로세서를 더 사용했을 수 있습니다. 가장 좋은 예는 80 년대의 Inmos Transputer입니다.이 프로세서는 여러 프로세서가 함께 연결된 대규모 병렬 처리를 위해 특별히 설계되었습니다. 전체 개념은 프로세서를 추가하는 것보다 처리 능력을 향상시키는 더 좋은 방법이 없다는 가정에 달려있었습니다.

문제는 그 가정이 (일시적으로) 틀렸다는 것입니다. 한 프로세서에서 더 많은 계산을 수행하여 더 많은 처리 능력을 얻을 수도 있습니다. 인텔과 AMD는 클럭 속도를 더욱 높이는 방법을 찾았으며, 말 그대로 모든 것을 하나의 프로세서에 보관하는 것이 더 쉽습니다. 그 결과 2000 년대 중반까지 빠른 단일 코어 프로세서가 시장을 소유하게되었습니다. Inmos는 90 년대 초에 사망했으며 모든 경험은 그들과 함께 죽었습니다.

좋은 시간은 끝났다. 클럭 속도가 GHz까지 올라간 후에는 더 이상 진행할 여지가 없었습니다. 그리고 다시 여러 코어로갔습니다. 진정으로 더 빨리 얻을 수 없다면 더 많은 코어가 답입니다. 당신이 말했듯이, 이러한 코어를 효과적으로 사용하는 것이 항상 쉬운 것은 아닙니다. 요즘 우리는 훨씬 나아졌지 만 Transputer처럼 쉽게 할 수있는 방법이 있습니다.

물론 개선을위한 다른 옵션도 있습니다. 대신 더 효율적일 수 있습니다. SIMD 및 유사한 명령어 세트는 동일한 수의 클럭 틱에 대해 더 많은 처리를 수행합니다. DDR은 프로세서 내부 및 외부로 데이터를 빠르게 가져옵니다. 모두 도움이됩니다. 그러나 처리와 관련하여 우리는 다시 80 년대와 여러 코어로 돌아 왔습니다.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 . 도달 한 모든 결론은 질문 및 / 또는 답변으로 다시 편집해야합니다.
Dave Tweed

20

좋은 질문이거나 흥미로운 답변이있는 질문 중 하나입니다. 이 답변의 일부는 여러 개의 개별 코어 대신 CPU 효율적으로 너비를 조정할 있는 세계를 이미지화합니다 . 라이센싱 / 가격 모델은 다를 수 있습니다!

나머지는 왜 그들이 할 수 없는지 설명합니다. 개요:

  • 여러 코어의 비용은 선형에 가깝게 확장
  • 1 코어의 슈퍼 스칼라 파이프 라인을 확장하는 비용은 점진적으로 확장됩니다. 이것은 어쨌든 한 지점까지 충분한 무차별 대입으로 가능합니다. 단일 스레드 성능은 대화식 사용 (처리량뿐만 아니라 엔드 투 엔드 대기 시간 문제 )에 매우 중요하므로 현재의 빅 코어 고급 CPU는 그 가격을 지불합니다. 예 : Skylake (4 와이드), Ryzen (5와 6 와이드) 및 Apple A12 (큰 코어의 경우 7 와이드, 작은 에너지 효율적인 코어의 경우 3 와이드)
  • ILP 를 찾기 위해 비 순차적 실행으로도 3 배 또는 4 배 이상의 파이프 라인확대함으로써 IPC 수익이 심각하게 감소 합니다 . 브랜치 미스 및 캐시 미스는 어렵지만 여전히 전체 파이프 라인을 정지시킵니다.
  • 주파수는 언급하지 않고 IPC 만 언급했지만 스케일링 빈도도 어렵습니다. 그래서 더 높은 주파수는 더 높은 전압을 필요로 주파수와 전력 규모는 삼승 : ^1직접 주파수에서, 그리고 ^2전압에서. 커패시터는 V ^ 2로 에너지 스케일을 저장하며, 누설 전류를 넘어서는 대부분의 동적 전력은 펌핑 전하에서 FET 게이트 + 와이어의 용량 성 부하로 공급됩니다.

    성능 = 주파수 배 IPC. (같은 아키텍처 내에서) SIMD가 넓을수록 적은 수의 명령으로 동일한 작업을 수행 할 수 있으며 일부 ISA는 다른 것보다 밀도가 높습니다. 예를 들어 MIPS는 종종 x86 또는 AArch64보다 동일한 작업을 수행하는 데 더 많은 명령을 사용합니다.

비용은 다이 영역 (제조 비용) 및 / 또는 전력 (냉각이 어렵 기 때문에 주파수를 간접적으로 제한 함)에 있습니다. 또한 특히 모바일 (배터리) 및 서버 (전력 밀도 / 냉각 비용 / 전기 비용)의 경우 와트 당 더 낮은 전력 및 성능이 목표입니다.

소켓 당 멀티 코어가 문제가되기 전에, 제조 할 수있는 단일 CPU로 달성 할 수있는 것보다 더 많은 처리량을 원하는 고급 사용 사례를위한 멀티 소켓 시스템이 있었기 때문에 유일한 SMP 시스템이었습니다. (서버, 고급 워크 스테이션).

단일 코어를 원하는만큼 효율적으로 확장 할 수 있다면 소켓 당 물리적 ​​코어가 1 개이고 SMT (예 : 하이퍼 스레딩)가 있는 시스템이 여러 개의 논리 코어로 작동하게됩니다. 일반적인 데스크탑 / 노트북에는 물리적 코어가 1 개 밖에 없으며, 더 많은 코어와 선형으로 확장되지 않는 것을 병렬화하는 데 어려움을 겪지 않습니다. 예 make -j4를 들어 멀티 소켓 서버를 활용하거나 데스크탑에서 I / O 대기 시간을 숨길 수 있습니다. (또는 파이프 라인 너비를 쉽게 확장 할 수 있지만 IPC가 그렇지 않은 경우 여전히 많은 병렬화를 시도 할 수 있으므로 더 많은 SMT 스레드를 사용해야했습니다.) CPU가 작동하지 않는 한 OS 커널은 여전히 ​​모든 논리 코어에서 실행되어야합니다. OS에 대한 SMT가 매우 다르다는 것을 보여 주므로 병렬 스케줄링 알고리즘과 잠금이 여전히 필요합니다.


도널드 크 누스는 2008 년 인터뷰에서

나는 멀티 코어 아키텍처에 대한 현재의 추세로 인해 개인적 불행에 대해 약간 불길 수도 있습니다. 나에게, 그것은 더 많거나 적은처럼 보이는 하드웨어 디자이너가 아이디어가 부족했다, 그들은 소프트웨어 작가에 대한 무어의 법칙의 미래의 죽음에 대한 책임을 전달하는 데 노력하고 있다는 것을 몇 가지에 대한 작업 빠른 단지 우리에게 기계를 제공함으로써 주요 벤치 마크!

그렇습니다 . 실제 프로그램 에서 처리량이 8 배인 기적의 단일 코어 CPU를 보유 할 수 있다면 여전히 사용하고있을 것입니다. 더 많은 처리량 (단일 스레드 성능이 아님)에 더 많은 비용을 지불 할 가치가있는 경우에만 이중 소켓 시스템을 사용합니다.

다중 CPU는 다중 프로그램이 실행 중일 때 컨텍스트 전환 비용을 줄입니다 (프로그램간에 빠르게 전환하는 대신 실제로 병렬로 실행). 선점 형 멀티 태스킹은 이러한 CPU가 필요로하는 대량의 비 순차적 기계를 중단 시키면 아마도 지금보다 더 많은 상처를 입을 것입니다.

물리적으로는 단일 코어 (코어간에 상호 연결이없는 간단한 캐시 계층 구조의 경우)이지만 SMT (예 : 인텔의 하이퍼 스레딩)를 지원하므로 소프트웨어는 처리량 리소스를 위해 동적으로 경쟁하는 8 개의 논리 코어로 사용할 수 있습니다. 또는 하나의 스레드 만 실행 중이거나 중단되지 않은 경우 전체 이점을 얻을 수 있습니다.

따라서 실제로 더 쉽고 자연 스러울 때 (예 : 개별 프로세스가 한 번에 실행) 여러 개의 스레드를 사용하거나이 짐승의 IPC를 최대화하지 못하게하는 종속성 체인과 쉽게 병렬화 된 문제를 사용합니다.

그러나 불행히도 멀티 코어 CPU가이 시점에서 더 이상 멈추지 않을 것이라는 Knuth의 생각은 희망적입니다.


단일 스레드 성능 확장

만약 그들이 1 코어를 8 코어 CPU와 동등하게 만들었다면, 하나의 코어는 IPC가 800 % 증가 할 것이므로 여러 코어에 최적화 된 것만이 아니라 모든 프로그램에서 완전한 성능을 얻을 수있을 것입니다.

그렇습니다. 그러한 CPU 를 전혀 만들 수 없다면 매우 놀랍습니다. 그러나 동일한 반도체 제조 공정 (즉, 트랜지스터의 동일한 품질 / 효율)에서는 문자 그대로 불가능하다고 생각합니다 . 코어를 서로 붙이기 위해 로직을 절약하고 코어 당 개인 캐시를위한 공간이 많이 필요하지 않더라도 8 코어 CPU와 동일한 전력 예산 및 다이 영역에서는 확실히 불가능합니다.

실제 기준이 초당 작업이 아니라 클럭 당 작동하지 않기 때문에 주파수 증가를 허용하더라도 2 배 더 빠른 CPU를 만드는 것은 큰 도전이 될 수 있습니다.

그것이 어디에서 할 수 있다면 근처 같은 CPU를 구축하기 위해 동일한 전력과 다이 지역 예산 (따라서 제조 비용), 예 CPU 업체들은 이미 그런 식으로 구축 될 것이다.

보기 현대 마이크로 프로세서 90 분 가이드!

특히 더 많은 코어 또는 넓은 코어? 이 답변을 이해하는 데 필요한 배경에 대한 섹션; 순서대로 파이프 라인 된 CPU가 작동하는 방식부터 간단하게 시작한 다음 슈퍼 스칼라 (클럭 당 여러 명령)로 시작합니다. 그런 다음 P4 시대에 전력 벽에 도달하는 방법을 설명하여 쉬운 주파수 스케일링을 끝내고 IPC를 거의 남기지 않고 더 작은 트랜지스터를 사용하더라도 명령 당 경로 (예 : SIMD) 당 더 많은 작업을 수행합니다.

파이프 라인을 더 넓게 만들면 (클럭 당 최대 명령 수) 일반적으로 비용이 width-squared로 조정됩니다 . 이 비용은 다이 영역 및 / 또는 전력에서 측정되며, 더 넓은 병렬 종속성 검사 (위험 감지)와 더 넓은 순서의 스케줄러가 실행 준비 지침을 찾습니다. 그리고 다른 명령어를 실행하려면 레지스터 파일 및 캐시에 더 많은 읽기 / 쓰기 포트가 있어야합니다 nop. 특히 FMA 또는 add-with-carry (2 개의 레지스터 + 플래그)와 같은 3 개의 입력 명령어가있는 경우.

CPU를 더 넓게 만들기위한 IPC 수익도 감소하고 있습니다 . 대부분의 워크로드는 CPU가 악용 할 수 있도록 소규모 / 단거리 ILP (Instruction-Level Parallelism) 가 제한되어 있으므로 IPC가 이미 너비보다 작게 제한되어 있으면 코어를 더 넓게 만들면 IPC (클럭 당 명령)가 증가 하지 않습니다 . 종속성 체인, 분기 누락, 캐시 누락 또는 기타 중단으로 코어. 물론 독립적 인 반복을 가진 일부 언롤 루프에서 속도가 향상되지만 대부분의 코드가 대부분의 시간을 소비하는 것은 아닙니다. 비교 / 분기 명령어는 "일반적인"코드 IIRC에서 명령어 믹스의 20 %를 구성합니다. (다양한 데이터 세트에 대해 15-25 %의 숫자를 읽은 것 같습니다.)

또한 모든 종속 명령을 지연시키는 캐시 미스 (및 ROB 용량에 도달 한 모든 것)는 더 넓은 CPU에 더 많은 비용이 듭니다. (더 많은 실행 장치를 유휴 상태로 두는 기회 비용; 더 많은 잠재적 인 작업이 완료되지 않습니다.) 또는 분기 누락으로 인해 거품이 발생합니다.

IPC를 8 배로 늘리려면 분기 예측 정확도와 캐시 적중률이 8 배 이상 향상되어야합니다 . 그러나 캐시 적중률은 대부분의 워크로드에서 특정 시점을 지나면 캐시 용량에 따라 확장 성이 떨어집니다. 그리고 HW 프리 페치는 똑똑하지만 그렇게 똑똑 할 수는 없습니다 . 그리고 IPC의 8 배에서 분기 예측 변수는주기 당 8 배 많은 예측을 생성 할뿐만 아니라보다 정확한 예측을 수행해야합니다.


비 순차적 실행 CPU를 구축하는 현재 기술은 단거리에서만 ILP를 찾을 수 있습니다 . 예를 들어 Skylake의 ROB 크기는 224 개의 융합 도메인 uops이고, 실행되지 않은 uops의 스케줄러는 97 개의 융합되지 않은 도메인입니다. 참조 길이를 증가시키기 위해, 두 개의 긴 의존성 체인 루프에 lfence의 영향을 이해 그들이 얻을 경우 스케줄러 크기, 지침의 2 개 긴 사슬에서 ILP를 추출의 제한 요인 인 경우에 너무 오래. 더 일반적이고 입문적인 답변을 참조하십시오 .

따라서 두 개의 긴 루프 사이에서 ILP를 찾는 것은 하드웨어로 할 수있는 일이 아닙니다. 루프 퓨전을위한 동적 바이너리 재 컴파일은 경우에 따라 가능할 수 있지만 Transmeta Crusoe 경로를 거치지 않으면 CPU가 실제로 할 수있는 것은 아니며 어렵습니다. (다른 내부 ISA 위에 x86 에뮬레이션 계층,이 경우 VLIW). 그러나 uop 캐시 강력한 디코더를 갖춘 표준 최신 x86 디자인 은 대부분의 코드에서 이길 수 없습니다.

x86 외부에서도 여전히 사용중인 모든 ISA는 비교적 쉽게 해독 할 수 있으므로 장거리 최적화 외에 동적 재 컴파일에 대한 동기가 없습니다. TL : DR : 하드웨어에 더 많은 ILP를 노출시킬 수있는 매직 컴파일러가 Itanium IA-64 에서는 효과가 없었으며, 일련의 실행 모델을 사용하는 기존 ISA의 슈퍼 와이드 CPU에서는 작동하지 않을 것으로 기대합니다.


슈퍼 와이드 CPU를 보유한 경우 SMT를 지원하기를 원하므로 여러 개의 저 ILP 스레드를 실행하여 수행해야 할 작업을 계속 유지할 수 있습니다.

Skylake의 너비는 현재 4 uops이므로 (클럭 당 2-3 uops의 실제 IPC를 달성하거나, 처리량이 많은 코드에서는 4에 더 가깝습니다) 가상 8 배 더 넓은 CPU의 너비는 32입니다!

8 또는 16 개의 논리적 CPU에 그 뒤로 개척 할 수 있다는 동적으로 환상적 일 것입니다 그 실행 리소스를 공유 : 비 중단 된 스레드는 모든 프런트 엔드 대역폭과 백엔드 처리량을 얻을.

그러나 8 개의 분리 된 코어로 스레드가 멈 추면 실행 장치를 계속 공급할 수있는 것은 없습니다. 다른 스레드는 도움이되지 않습니다.

실행은 종종 파열됩니다. 캐시 미스로드를 기다리는 동안 정지 한 다음 많은 명령이 병렬로 도착하면 해당 결과를 사용할 수 있습니다. 슈퍼 와이드 CPU를 사용하면 버스트 속도가 빨라지고 실제로 SMT에 도움이 될 수 있습니다.


그러나 우리는 마법의 슈퍼 와이드 CPU를 가질 수 없습니다

따라서 처리량을 얻으려면 대신 스레드 수준 병렬 처리 형식으로 하드웨어에 병렬 처리를 노출해야합니다 . 일반적으로 컴파일러는 매우 큰 루프와 같은 간단한 경우를 제외하고 스레드를 언제 / 어떻게 사용해야하는지 잘 모릅니다. (OpenMP 또는 gcc 's -ftree-parallelize-loops). 스레드 간 통신이 비싸고 스레드 시작과 마찬가지로 유용한 병렬 작업을 효율적으로 수행하려면 코드를 재 작업하는 데 여전히 인간의 영리함이 필요합니다.

TLP는 HW가 이용할 수있는 단일 실행 스레드 내에서 세분화 된 ILP와 달리 대략적인 병렬 처리입니다.


대화 형 워크로드 (Intel / AMD x86 및 Apple / ARM AArch64 하이 엔드 코어와 같은)를 대상으로하는 CPU 처리량뿐만 아니라 대기 시간 이 중요한 경우 에도 단일 스레드 성능이 여전히 중요하기 때문에 IPC 스케일링의 수익 감소로 확실히 밀려 납니다. 대규모 병렬 문제.

각각 15fps로 8 개의 게임 사본을 병렬로 실행할 수 있다는 것은 45fps에서 1 개의 사본을 실행할 수있는 것보다 훨씬 가치가 없습니다. CPU 공급 업체는이를 알고 있으므로 최신 CPU는 상당한 전력과 다이 영역 비용이 들더라도 비 순차적 실행을 사용합니다. (하지만 GPU는 작업량이 이미 병렬이기 때문에 아닙니다.)

Intel의 많은 코어 Xeon Phi 하드웨어 (Knight 's Landing / Knight 's Mill)는 흥미로운 중간 단계입니다. 2X 코어에 AVX512 SIMD 명령이 제공되어 2 배의 코어에 숫자를 제공합니다. 코어는 인텔의 저전력 Silvermont 아키텍처를 기반으로합니다. (비순 서적이지만 큰 재주문 창이 있으며 빅 코어 Sandybridge보다 훨씬 작으며 파이프 라인이 더 좁습니다.)


BTW,이 모든 것이 SIMD와 직교합니다. 문제가있을 수있는 경우 명령 당 더 많은 작업을 수행 하면 항상 도움이됩니다.


가격 모델

소프트웨어 가격 모델은 현재 하드웨어 환경에 따라 결정됩니다.

멀티 코어 CPU의 출현으로 코어 당 라이센싱 모델이 더욱 널리 보급되었습니다 (단일 소켓 데스크톱에도 적용됨). 그 전에는 서버 및 대형 워크 스테이션에만 관련이있었습니다.

소프트웨어가 최고 속도로 실행하기 위해 여러 개의 코어가 필요하지 않은 경우, 약한 CPU에서 소프트웨어를 실행하기 때문에 많은 이점을 얻지 못하는 사람들에게 더 저렴하게 판매 할 수있는 방법이 없을 것입니다. 소프트웨어 / 하드웨어 에코 시스템이 "SMT 채널"에 대한 제어를 발전시키지 않으면 해당 논리 코어에서 실행되는 코드의 최대 실행 폭을 구성 할 수 있습니다. (여러 개의 개별 코어 대신 CPU가 파이프 라인 너비로 확장되는 세계를 상상해보십시오.)


2
"스레드 스타트 ​​업은 비싸다"-사실은 아니다. 그것은 현대의 일반적인 운영 체제의 인공물입니다.
MSalters

1
@MSalters 그리고 실제로, 일부 연구 프로젝트는이 접근 방식을 포기하는 것이 얼마나 멋진지를 연구했습니다. "코드를 재 작업하는 인간의 영리함"과 동일합니다. 자연스럽게 병렬화하기 쉬운 코드를 작성하는 방법이 있지만, 지난 수십 년 동안 그다지 인기가 없었습니다. 그것들 사용되는 곳에서는 일반적으로 매우 저렴한 비용으로 대규모 수평 스케일링을 볼 수 있습니다. 실제로 많은 응용 분야에서 수평 스케일링이 수직보다 훨씬 저렴 해지기 시작했습니다. 단지 개발자에게 선택권을주지 말아야한다는 것을 의미합니다. 상황에 따라 강제로 작동하면 제대로 작동합니다. :
Luaan

11

비유를 그려 보겠습니다.

원숭이가 타자기로 타이핑을하고 더 많은 타이핑을 원한다면, 원숭이 커피, 타이핑 수업을 제공하고 더 빨리 작동하도록 위협 할 수는 있지만 원숭이가 최대 용량으로 입력하십시오.

따라서 더 많은 타이핑을 원하면 더 많은 원숭이가 있어야합니다.


유추를 더 확장하려면 각 원숭이마다 별도의 타자기가 필요합니다 (각 코어가 필요로하는 데이터 버스를 나타냄). 각 원숭이에게 바나나를 가져 오는 방법과 배설물을 집어 올리는 방법이 필요합니다 (배전 및 열과 유사 함) (소산)) 그리고 원숭이가 모두 열두 번째 밤에 동일한 구절을 입력하지 않도록 할 수있는 방법이 필요합니다 (프로세서간에 작업량을 올바르게 나누는 것과 유사 함). 그러나이 모든 것은 한 원숭이에게서 더 많은 타이핑을 시도하는 것보다 더 많은 이득을 얻는 데 덜 효과적입니다.


7

많은 소프트웨어는 (x) 개 이상의 코어를 사용하지 않습니다. 그러나 이것은 전적으로 해당 소프트웨어의 디자이너가 설정 한 제한 사항입니다. 다중 코어를 가진 가정용 PC는 여전히 새롭고 전통적인 API 및 언어로는 다중 스레드 소프트웨어를 설계하기가 더 어렵습니다.

귀하의 PC는 또한 그 1 프로그램을 실행하는 것이 아닙니다. 덜 활동적인 코어에 넣을 수있는 다른 많은 일을 수행하므로 기본 소프트웨어가 많은 방해를받지 않습니다.

현재 8 코어의 처리량에 맞추기 위해 단일 코어의 속도를 높이는 것은 불가능합니다. 새로운 아키텍처에서 더 빠른 속도가 필요할 것입니다.

더 많은 코어를 사용할 수 있고 API가이 가정으로 설계되면 프로그래머는 더 많은 코어를 사용하기 시작합니다. 멀티 스레드 디자인을보다 쉽게 ​​만들기위한 노력이 계속되고 있습니다. 몇 년 후에이 질문을했다면 "내 게임은 일반적으로 32 개의 코어 만 사용하므로 왜 내 CPU에는 256이 있습니까?"


3
1 코어와 다중 코어의 차이는 소프트웨어를 활용하는 데있어 차이 가 있습니다. 대부분의 알고리즘과 프로그램은 직렬입니다. 예를 들어, 도널드 크 누스는 말했다 HW 디자이너와 같은 멀티 코어 CPU의 모양이되는 것을 " 우리에게 기계를 제공함으로써 소프트웨어 작가에 대한 무어의 법칙의 미래의 죽음에 대한 책임을 전달하는 노력이 빠른 단지 몇 가지 주요 벤치 마크에서 일! "
피터 코르

불행히도 아직 아무도 하나의 와이드 / 빠른 코어가 여러 코어에서 효율적으로 병렬 코드를 실행할 수있을만큼 빠른 속도로 어디서나 단일 스레드 프로그램을 실행할 수있는 방법을 찾지 못했습니다. 그러나 다행히 CPU 설계자들은 단일 스레드 성능이 여전히 중요하다는 것을 인식하고 각 개별 코어가 병렬 문제에 대한 순수한 처리량을 원할 때보 다 훨씬 더 크고 강력하게 만듭니다. (Skylake (4 와이드) 또는 Ryzen (5 와이드) 대 Xeon Phi 코어 (Silvermont + AVX512 기반의 Nights Landing / Knight 's Mill)와 비교) (2와 제한된 OoO exec)
Peter Cordes

2
어쨌든, 적어도 2 개의 코어를 갖는 것이 멀티 태스킹 OS에 종종 도움이되지만, 현재 CPU보다 4 배나 8 배 빠른 단일 코어에서의 선제 멀티 태스킹은 꽤 좋습니다. 동일한 전력 예산으로 모든 것을 구축 할 수 있다면 훨씬 더 나은 대화식 유스 케이스의 경우 훨씬 더 좋습니다. (듀얼 코어는 여러 작업이 CPU 시간을 원할 때 상황 전환 비용을 줄이는 데 도움이됩니다.)
Peter Cordes

1
모두 사실이지만 역사적으로 멀티 코어는 더 비쌌습니다. 과학 응용 프로그램 외부에서 병렬 알고리즘을 설계해야 할 이유는 많지 않았습니다. 대부분의 직렬 실행이 필요한 알고리즘에서도 병렬 처리를위한 공간이 많이 있습니다. 그러나 현재 세대 IPC는 크지 않으며 엉망입니다. 일반적으로 찾기 및 수정하기 어려운 버그가 발생합니다. 물론 4 배 더 빠른 CPU는 놀랍습니다 (그러나 여전히 여러 개의 코어를 원할 것입니다).
hekete

2
그들이 있기 때문에 @PeterCordes 음, 대부분의 알고리즘과 프로그램은 시리얼없는 될,하지만 그것이 항상 해본 적이 방법입니다 주로하기 때문에 (의 뿌리에 "그것은 좋은 절충했다"). 가장 심각한 경우는 4 개의 개별 워크로드에서 동일한 프로그램을 4 회 실행하고 문제없이 병렬로 실행할 수있는 경우입니다. 그러나 그것은 또 다른 문제를 안겨줍니다 .CPU는 종종 병목 현상이 아니며 일반적으로 CPU를 사용하지 않고 더 나은 알고리즘을 사용하는 것이 좋습니다. 때로는 다른 병목 현상 (메모리, 디스크, 네트워크 ...)에도 도움이됩니다.
루안

3

역사적 관점에서 가장 강력한 이유는 전력 손실 입니다.

Pentium IV 이후 인텔은 4GHz ~ 12GHz 범위에서 실행되는 차세대 프로세서 코드 명 Tejas를 추구했습니다. 문제는 그 속도로 달리는 것이 실행하기에는 너무 많은 열을 생성한다는 것입니다.

Tejas가 취소 된 후 인텔은 10 ~ 15 년이 더 소요되어 마침내 4GHz에서 코어가 수용 가능한 수준의 열로 작동했습니다.

Tejas와 Jayhawk을 참조하십시오 .

인텔은 여러 코어를 사용하는 Tejas와 함께 또 다른 프로젝트를 진행했습니다. 그 프로젝트는 수용 가능한 수준의 열을 가졌으므로 그것이 진행된 방식입니다. 10nm 제조 공정을 위해 10 년을 더 기다리지 않고 성능을 향상시킬 수있었습니다.

코어에 리소스가 부족하다고 가정하면 N 코어 대신 단일 코어에서 초당 동일한 수의 명령을 얻으려면 해당 단일 코어의 명령 속도가 N 배 더 빨라야합니다. CPU 코어의 동적 전력 손실은 작동 주파수에 선형 적으로 비례합니다. 또한 작동 전압의 제곱에 비례합니다. 더 낮은 주파수에서 실행하면 더 낮은 작동 전압을 사용할 수 있습니다. 더 낮은 주파수에서 더 낮은 전압을 사용한다는 것은 실제로 발생하는 열 이 작동 주파수 의 큐브 와 함께 감소한다는 것을 의미합니다 .

이것의 극단적 인 예는 인간의 뇌인데, 이것은 단지 20W의 전력을 사용하여 초당 2 ^ 18 작업을 수행 할 수 있습니다. 그것은 단지 수백 Hz에서 동시에 실행되는 수십억 개의 뉴런을 사용함으로써 이것을 달성합니다.

또한 PC에는 보통 수백 또는 수천 개의 스레드가 동시에 실행됩니다. 운영 체제는 각 스레드에 코어의 시간 할당을 처리합니다. 따라서 개별 프로그램이 모든 코어를 이용하지 않아도 다른 프로그램이 다른 코어에서 실행될 경우 CPU 시간을 덜 소비하므로 여전히 이점이 있습니다.

어쨌든 고성능 시장은 FPGA 형태의 병렬 처리로 이동하고 있습니다. 인텔은 최근 Altera (두 번째로 큰 FPGA 제조업체)를 인수했으며 현재 FPGA 하드웨어 가속기가 장착 된 보드를 판매하고 있습니다. 소프트웨어는 API 호출을 사용하여 런타임에 이미지와 함께 FPGA를로드 할 수 있습니다. 그런 다음 CPU는 데이터를 FPGA에 공급하여 대부분의 작업을 수행 할 수 있도록합니다. 응용 프로그램 유형은 일반적으로 비디오 인코딩, AI, 렌더링, 데이터베이스 검색 등입니다.


또한 PC에는 보통 수백 또는 수천 개의 스레드가 동시에 실행됩니다. 아니요, 실행 하지 않습니다 . 현대의 데스크탑에는 많은 스레드가 존재하지만 거의 모든 스레드는 주어진 시간에 I / O 또는 타이머를 기다리는 수면 상태입니다. 예를 들어 Linux 데스크탑의로드 평균 (마지막 순간 동안)은 현재 0.19 개의 작업이 주어진 순간에 CPU 시간을 사용할 준비가되어 있습니다. 비디오 인코딩을 실행하는 경우 x264는 OS가 여러 코어에서 예약하기 위해 여러 스레드를 시작했지만 논리 코어 수만큼이나 많았습니다.
Peter Cordes

그리고 BTW, OP (어떤 이유로 든)는 주파수를 완전히 생략하고 초당이 아닌 IPC (클럭 사이클 당 지침) 스케일링에 대해 물었습니다. 당신이 말하는 것은 사실이지만 , 더 높은 클럭을 사용하지 않고 CPU를 더 넓게 만들 것을 제안했습니다 . 나는 이미 내 대답에서 그 문제를 해결 했으므로 주파수를 이용한 전력 스케일링을 설명하는 대답은 +1입니다.
Peter Cordes

@PeterCordes 맞습니다. 모든 스레드가 한 번에 실행된다는 것을 의미하지는 않았습니다. 설명해 주셔서 감사합니다.
user4574

그들이 대부분의 시간 동안 전혀 달리기를 할 준비가되지 않았기 때문에 "턴을 돌리는 것"은 그리 많지 않습니다. OS가 키 누르기 또는 네트워크 읽기를 제공하거나 타이머가 만료되어 깨우는 경우와 같이 대부분 잠 들어 있습니다. 실제로 계산 집약적 인 작업을 수행하지 않는 한 2 명 이상이 깨어있는 경우는 드 rare니다. 그리고 수백 개의 스레드를 시작하지 않으면 사용 가능한 코어 수만큼 스레드 수를 시작합니다.
Peter Cordes

2

이 모든 일이 어디로 가는지 그림으로 마무리하십시오 ...

신경망과 AI는 현재 가장 뜨거운 주제입니다. 한 가지 이유는 방대한 수의 간단한 코어를 효율적으로 병렬로 사용할 수 있기 때문에 최대 컴퓨팅 성능에 가깝게 추출 할 수 있기 때문입니다. 이 요구 사항은 본질적으로 매우 병렬 적이며 코어간에 많은 통신이 필요하지 않은 프로세서 배열에 상당히 쉽게 매핑됩니다. 이것이 GPU가 AI 가속을위한 최초의 기술인 이유입니다. 현재 우리는 시장에 출시되는 NN의 비디오 GPU보다 칩이 훨씬 더 최적화 된 것을보고 있습니다. 다음 단계 또는 마지막 단계는 멤 리스터와 같은 아날로그 기술을 사용하여 NN을 만드는 것입니다.

또한 게이밍 PC와 같은 그래픽 카드에서는 멀티 코어 인텔 또는 AMD CPU보다 훨씬 더 원시적 인 성능을 제공합니다.


2
다시 "... 본질적으로 대규모 병렬" : 심지어 곤란하게 평행 ?
Peter Mortensen

1

기본적으로 CMOS 손실은 주파수에 비례하여 (^ 1.5) 병렬 CPU 성능은 CPU 수에 비례하는 선형보다 다소 낮습니다.

따라서 고정 전력 소비를 위해 CPU의 속도와 수량을 비교할 때 여러 클럭 속도에서 다중 CPU 애플리케이션의 컴퓨팅 전력 대 전력 소비 비율이 향상됩니다.

이것보다 더 복잡하지만 동적 응용 프로그램에서 병렬 CPU가 와트 당 더 나은 뱅을 얻는 이유는 이것입니다. 하나의 시나리오에 최적화 된 경우 항상 예외가 있습니다.

Intel / AMD 일반 PC 응용 프로그램에서 더 빠른 CPU 크기는 아니지만 리소그래피 해상도에서 크기가 줄어들고 게이트 커패시턴스가 낮아서 하위 임계 값 수준 및 코어 전압이 감소하면서 전력이 감소합니다.

개선이 선형 적이 지 않고 8 코어가 2보다 4 배 더 낫다는 것을 의미하지는 않지만 충족되는 목표는 전력 소비, 속도 및 전압을 조절하여 성능 및 효율성을 개선하고 필요에 따라 최대 전력을 공급하여 처리 동적 범위를 넓히는 것입니다. 과도한 온도 상승.

더 과학적인 답변을 보려면 https://www.sciencedirect.com/topics/computer-science/dynamic-power-consumption을 읽으십시오.


-2

멀티 코어는 일반적으로 멀티 스칼라가 아닙니다. 그리고 다중 스칼라 코어는 멀티 코어가 아닙니다.

수 메가 헤르츠에서 실행되는 다중 스칼라 아키텍처를 찾는 것이 완벽 할 것입니다. 그러나 일반적으로 브리지는 소비자가 사용할 수 없지만 비용이 많이 들기 때문에 높은 클럭 속도에서 짧은 명령보다는 낮은 주파수에서의 멀티 코어 프로그래밍 경향이 있습니다.

다중 명령 코어는 저렴하고 명령하기가 쉬우므로 여러 기가 헤르츠에서 다중 스칼라 아키텍처를 갖는 것은 나쁜 생각입니다.


1
"수퍼 스칼라", 시계 당 여러 명령어를 의미합니까? 대부분의 멀티 코어 CPU 수퍼 스칼라입니다. 예를 들어 Ryzen의 너비는 5입니다. Apple의 최고급 AArch64 칩은 6 또는 8 너비입니다. 2 와이드 CPU가 대부분의 코드에서 악용 할 수있는 성과가 매우 낮기 때문에 각각의 개인 캐시가 필요한 여러 코어로 확장하기 전에 각 코어를 최소 2 와이드로 만드는 것이 좋습니다. 예를 들어 인텔의 제온 파이 많은 코어 컴퓨팅 카드에는 많은 이중 이슈 코어가 있습니다). 스마트 폰 코어와 동일 : 소형 코어는 최소 2 와이드입니다. 단일 스레드 성능이 중요합니다!
Peter Cordes

1
또는 dl.acm.org/citation.cfm?id=224451- 상위 레벨 프로그램의 제어 흐름 그래프에서 더 넓은 범위에서 ILP를 찾는 "Multiscalar"코어에 대한 연구 논문을 사용 했습니까 ? HW와 SW의 조합. 우리가 데스크탑과 스마트 폰에서 사용하는 주류 CPU는 이와 같지 않습니다. 순서대로 실행되는 일반적인 슈퍼 스칼라 일뿐입니다. 한 번에 하나씩 명령을 실행하는 척하는 직렬 ISA를 구현합니다.
Peter Cordes

감사. afaik, 스칼라 아치의 개념은 알려진 또는 사전 정의 된 명령 세트 (AVX의 경우) 뒤에 열을 측정 할 수 있다는 것입니다. <br/> 현재 아키텍처 계산 vs 열은 계산 불가능하게 예측할 수 없습니다. 이것은 이상적인 시간 / 열에서 수행 할 수있는 능력이 계산할 수 없기 때문에 멀티 코어가 큰 주파수에서 작동 할 수없는 가능성을 향상시킵니다. 그것이 내가 아는 전부입니다. "multiscalars"의 물리학을 이해하기 위해 벡터 머신을 파고 있습니다. 이 사건은 제온 / 피가 고대 cpus처럼 이상적인 열 곡선을 따른다. 고객 경험 향상
03

AVX와 같은 SIMD 명령어 세트 는 전체 파이프 라인을 더 넓게 만들 필요없이 파이프 라인 통해 더 많은 작업을 수행 할 수있는 방법 입니다. 예를 들어, Skylake는 vpaddd ymm0, ymm1, ymm2클럭 당 3 개의 명령어를 실행할 수 있으며 각 명령어는 8 개의 압축 된 32 비트 정수 추가를 수행합니다. 따라서 시계 당 24 개의 정수가 추가되지만 비 순차적 실행 장치 "전용"은 비행중인 3 개의 명령을 추적해야합니다. 그건 많은 24 개 실행할 수있는 CPU보다 빌드로 저렴 add eax, edx클럭 당 명령어를. SIMD는 기본적으로 파이프 라인 너비와 직교합니다.
Peter Cordes

Skylake는 클럭 사이클 당 최적화의 좋은 사례입니다. skylakes는 Xeon 오리지널 오프 로딩을 SIMD 파이프 라인에 통합하기 때문에 내부 버스 최적화의 흥미로운 사례 인 변형은 무수히 많습니다. 하나의 큰 코어가 (예를 들어) 페놈이 AVX에 대해하는 방식과 같이 몇 사이클에서 오프로드와 계산을 통합한다고 가정합니다. 내부 블록 작업에 필요한 전력과 계산이 순방향으로 통합 된 방식입니다. 처럼 여러 개의 짧은 지침 oposite로 GPU와 같은 네 할렘에 추가 유사 여러 "가상"코어
machtur
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.