왜 GPU 대신 여전히 CPU를 사용하고 있습니까?


373

요즘 많은 계산이 GPU에서 수행되는 것 같습니다. 분명히 그래픽이 있지만 CUDA 등을 사용하여 AI, 해싱 알고리즘 (비트 코인 생각) 및 기타를 GPU에서 수행합니다. CPU를 제거하고 GPU를 자체적으로 사용할 수없는 이유는 무엇입니까? GPU가 CPU보다 훨씬 빠른 이유는 무엇입니까?


3
어떤 정보에 올바른 정보가 포함되어 있는지 어떻게 알 수 있습니까? 다른 사람이 투표권을받을 때까지 기다려야합니까? 답을 받아들이는데 너무 성급한 것 같습니다 : O
ell

14
@ell now에 대한 최근 답변이 있는데, 여기에는 "잘못된 정보"가 포함되지 않습니다. 그들은 훌륭하게 설계된 StackExchange의 효율적인 시장 메커니즘으로 인해 점진적으로 위로 올라가고 있습니다. ;-) 답변을 받기 전에 조금 더 기다리기를 제안합니다. 당신이 아주 신중하게 그렇게하고있는 것 같습니다. 그건 그렇고 좋은 질문입니다. 분명해 보이지만 전혀 그렇지 않습니다. 물어 주셔서 감사합니다!
엘리 Kesselman

124
"Boeing 747이 더 빠르고 연료 효율이 좋은 경우 왜 자동차를 운전해야합니까?"
vartec

7
아니요. RISC와 CISC가 아니기 때문입니다. 그것은 약간의 위장 된 다른 컴퓨터 과학 기초 중 하나입니다. 그것은이다 "우리가 I / O 프로세서에 중앙 프로세서에서 작업을 오프로드 이유는 무엇입니까?" .
JdeBP

5
@ vartec : 버스와 택시 사이에 약간 더 좋은 비유가 있다고 생각합니다. 모두 같은 장소에서 같은 장소로 가고 싶은 40 명의 사람들이 있다면, 버스가 훨씬 더 효율적일 것입니다. 원하는 출발지와 목적지가 넓게 흩어져있는 40 명의 사람들이 있다면, 단일 택시조차도 버스만큼 좋을 수도 있고, 버스 비용으로 인해 다수의 택시가있을 수 있습니다.
supercat

답변:


388

TL; DR 답변 : GPU는 CPU보다 프로세서 코어가 훨씬 많지만 각 GPU 코어는 CPU 코어보다 훨씬 느리게 실행되며 최신 운영 체제에 필요한 기능이 없기 때문에 일상적인 처리를 수행하는 데 적합하지 않습니다. 컴퓨팅. 비디오 처리 및 물리 시뮬레이션과 같은 계산 집약적 인 작업에 가장 적합합니다.


GPGPU 는 여전히 비교적 새로운 개념입니다. GPU는 처음에 그래픽 렌더링에만 사용되었습니다. 기술이 발전함에 따라 GPU에 대한 계산 기능을 개발하여 CPU와 관련하여 GPU의 많은 수의 코어를 활용하여 데이터의 종류에 관계없이 동시에 많은 병렬 데이터 스트림을 처리 할 수 ​​있습니다. GPU는 수백 또는 수천 개의 스트림 프로세서를 가질 수 있지만 각각 CPU 코어보다 느리게 실행되며 기능이 더 적습니다 ( Turing이 완료 되어 CPU가 실행할 수있는 모든 프로그램을 실행하도록 프로그래밍 가능하더라도). GPU에서 누락 된 기능에는 최신 운영 체제를 구현하는 데 필요한 인터럽트 및 가상 메모리가 포함됩니다.

다시 말해, CPU와 GPU는 서로 다른 작업에 더 적합한 아키텍처가 상당히 다릅니다. GPU는 많은 스트림에서 대량의 데이터를 처리하여 비교적 간단한 작업을 수행 할 수 있지만 단일 또는 소수의 데이터 스트림에서 무겁거나 복잡한 처리에는 적합하지 않습니다. CPU는 코어 단위로 (초당 명령어 측면에서) 훨씬 빠르며 단일 또는 소수의 데이터 스트림에서 복잡한 작업을보다 쉽게 ​​수행 할 수 있지만 동시에 많은 스트림을 효율적으로 처리 할 수는 없습니다.

결과적으로 GPU는 워드 프로세서와 같은 많은 일반 소비자 응용 프로그램을 포함하여 크게 혜택을받지 않거나 병렬화 할 수없는 작업을 처리하기에 적합하지 않습니다. 또한 GPU는 근본적으로 다른 아키텍처를 사용합니다. GPU가 작동하려면 특별히 GPU 용으로 응용 프로그램을 프로그래밍해야하며, GPU를 프로그래밍하려면 크게 다른 기술이 필요합니다. 이러한 다른 기술에는 새로운 프로그래밍 언어, 기존 언어의 수정 및 많은 스트림 프로세서에서 수행 할 병렬 연산으로 계산을 표현하는 데 더 적합한 새로운 프로그래밍 패러다임이 포함됩니다. GPU 프로그래밍에 필요한 기술에 대한 자세한 내용은 스트림 처리병렬 컴퓨팅 에 관한 Wikipedia 기사를 참조하십시오 .

최신 GPU는 배정 밀도 부동 소수점 숫자를 조작 할 수있는 최신 카드를 사용하여 벡터 연산 및 부동 소수점 산술을 수행 할 수 있습니다. CUDA 및 OpenCL과 같은 프레임 워크를 사용하면 GPU 용 프로그램을 작성할 수 있으며 GPU의 특성상 과학적 컴퓨팅과 같이 병렬 처리가 가능한 작업에 가장 적합합니다. NVIDIA Tesla Personal Supercomputers 에서와 같이 클러스터를 계산하십시오 . folding @ home에 경험이있는 최신 GPU를 사용하는 소비자는 GPU 클라이언트 를 사용 하여 단백질 접힘 시뮬레이션을 매우 빠르게 수행하고 프로젝트에 더 많은 작업을 수행 할 수 있습니다 ( FAQ 를 읽으십시오)첫째, 특히 GPU와 관련된 것들). GPU는 또한 PhysX를 사용하여 비디오 게임에서 더 나은 물리 시뮬레이션을 가능하게하고 비디오 인코딩 및 디코딩을 가속화하며 다른 컴퓨팅 집약적 작업을 수행 할 수 있습니다. GPU가 수행하는 데 가장 적합한 작업 유형입니다.

AMD는 기존 x86 CPU 코어와 GPU를 결합한 APU (Accelerated Processing Unit) 라는 프로세서 설계를 개척하고 있습니다. 이 방법을 사용하면 마더 보드 통합 그래픽 솔루션보다 훨씬 뛰어난 그래픽 성능을 제공 할 수 있지만 (고가의 개별 GPU에는 적합하지 않음) 별도의 GPU 없이도 우수한 멀티미디어 성능을 갖춘 소형의 저비용 시스템이 가능합니다. 최신 Intel 프로세서는 온칩 통합 그래픽도 제공하지만 경쟁적인 통합 GPU 성능은 현재 Intel Iris Pro Graphics를 사용하는 몇 개의 칩으로 제한됩니다. 기술이 계속 발전함에 따라이 개별 부품의 수렴 정도가 증가 할 것입니다. AMD 구상CPU와 GPU가 하나 인 미래는 동일한 작업에서 원활하게 함께 작동 할 수 있습니다.

그럼에도 불구하고 PC 운영 체제 및 응용 프로그램에서 수행하는 많은 작업이 여전히 CPU에 더 적합하며 GPU를 사용하여 프로그램을 가속화하려면 많은 작업이 필요합니다. 많은 기존 소프트웨어가 x86 아키텍처를 사용하고 GPU에는 다른 프로그래밍 기술이 필요하고 운영 체제에 필요한 몇 가지 중요한 기능이 없기 때문에 일상적인 컴퓨팅을 위해 CPU에서 GPU 로의 일반적인 전환은 매우 어렵습니다.


39
이 답변과 마찬가지로, 주된 이유는 이와 같은 병렬 아키텍처를 처리하기에 좋은 주류 프로그래밍 언어가 없기 때문입니다. 우리는 수십 년 동안 멀티 스레드 프로그래밍을 발전시키기 위해 노력해 왔으며 사람들은 여전히 ​​멀티 스레드 "악"이라고 부릅니다. 멀티 코어 CPU와 GPU는 현실이지만이 문제를 해결하기 위해 새로운 프로그래밍 패러다임을 제시해야합니다.
Soren

인텔은 라라 비 아키텍처 (길이가 너무 길다)를 개발해 왔다는 점에 주목할 필요가 있다.
Chris S

하드웨어 이유와 APU에 대해 토론하고 APU가 어떻게이를 바꿀지에 대한 훌륭한 답변입니다. 그러나 @Soren은 소프트웨어 측면에서 매우 좋은 지적을합니다. 실제로 하드웨어 문제, 소프트웨어 문제 및 CPU가 작동한다는 사실과 작동하는 것으로 알려진 경우 사람들이이를 교체하기 어렵습니다.
Nich Del

3
"우리는 이와 같은 병렬 아키텍처를 처리 할 수있는 좋은 메인 스트림 프로그래밍 언어가 없습니다." -Haskell, OCaml, Scheme, F #, Erlang 및 기타 기능 프로그래밍 언어는 멀티 스레딩을 매우 잘 처리합니다. 내가 언급 한 모든 것이 주류입니다.
BlueRaja-대니 Pflughoeft

1
@BlueRaja-우리는 이러한 언어를 알고 있습니다. 메인 스트림에 대한 정의는 나의 것과 다릅니다 :-)
Soren

252

GPU가 CPU보다 훨씬 빠른 이유는 무엇입니까?

GPU는 CPU보다 빠르지 않습니다 . CPU와 GPU는 서로 다른 트레이드 오프와 함께 두 가지 목표로 설계되므로 성능 특성 이 다릅니다 . 특정 작업은 CPU에서 더 빠르지 만 다른 작업은 GPU에서 더 빨리 계산됩니다. CPU는 작은 데이터 세트에 대한 복잡한 조작에 탁월하며 GPU는 큰 데이터 세트에 대한 간단한 조작에 탁월합니다.

GPU는 단일 명령어가 큰 데이터 블록 (SIMD / Single Instruction Multiple Data)에서 작동하도록 설계된 특수 목적의 CPU로, 모두 동일한 작업을 적용합니다. 명령을 디코딩 할 때 오버 헤드가 훨씬 줄어들 기 때문에 한 번에 하나의 셀을 사용하는 것보다 데이터 블록에서 작업하는 것이 훨씬 효율적입니다. 단일 GPU 명령 구현 (물리적 크기 제한, 더 많은 에너지 사용 및 더 많은 열 생성).

CPU는 단일 데이텀에서 가능한 한 빨리 단일 명령을 실행하도록 설계되었습니다. 단일 데이텀으로 만 작동하면되므로 단일 명령어를 구현하는 데 필요한 트랜지스터 수는 훨씬 적으므로 CPU는 더 큰 명령어 세트, 더 복잡한 ALU, 더 나은 분기 예측, 더 나은 가상화를 가질 수 있습니다. 아키텍처 및보다 정교한 캐싱 / 파이프 라인 체계. 명령 주기도 더 빠릅니다.

우리가 여전히 CPU를 사용하는 이유는 x86이 CPU 아키텍처의 왕이고 Windows가 x86 용으로 작성 되었기 때문 이 아닙니다. 우리가 여전히 CPU를 사용 하는 이유는 OS가 수행해야하는 작업, 즉 의사 결정, CPU 아키텍처에서보다 효율적으로 실행됩니다. OS는 100 가지의 서로 다른 유형의 데이터를보고 서로에 따라 다양한 결정을 내려야합니다. 이러한 종류의 작업은 적어도 SIMD 아키텍처로 쉽게 병렬화되지 않습니다.

앞으로 CPU가 SSE와 같은 데이터 블록을 처리 할 수있는 기능을 확보함에 따라 CPU와 GPU 아키텍처 간의 수렴이 예상됩니다. 또한 제조 기술이 개선되고 칩이 작아짐에 따라 GPU는보다 복잡한 명령어를 구현할 수 있습니다.


23
이것은 아마도 가장 좋은 대답 일 것입니다. 두 패러다임의 근본적인 차이점을 이해하는 것이 중요합니다. 오늘날의 워크로드를 고려하여 GPU가 CPU를 능가하려면 본질적으로 GPU가 CPU로 바뀌어야한다는 것을 의미합니다. 따라서 문제는 답입니다.
surfasb

2
이것이 가장 좋은 답이 +1입니다. 이 답변과 허용되는 답변은 모두 정확하지만이 답변은 훨씬 명확하게 설명합니다.

이 스레드에서 아무도 데이터를 GPU로 전송하는 오버 헤드를 언급 한 것에 대해 놀랐습니다. PCI-Express 버스를 통한 제한된 대역폭은 CPU에서 수행되는 것보다 GPU에서 일부 병렬 작업이 CPU에서 수행되는 것보다 훨씬 느립니다. FFT의 크기가 다양하면 데이터 전송, 컨텍스트 설정, 결과 읽기의 오버 헤드로 인해 GPU와 CPU의 성능이 크게 달라지는 간단한 사례를 볼 수 있습니다 : stackoverflow.com/a/8687732/303612 작은 작업은 CPU에서의 캐시 수행, 메모리 대역폭은 현재의 PCI-E 아키텍처 훨씬 우수 할 수있다
닥터 앤드류 버넷 - 톰슨

1
@ Dr.AndrewBurnett-Thompson : 그것은 질문과 관련이 없기 때문입니다. 현재 GPU는 보조 처리 장치로 간주되므로 GPU에서 데이터를 GPU로 이동하는 것이 필요하고 비용이 많이 드는 이유입니다. GPU를 최고급 처리 장치로 취급하면 주 메모리와 GPU 메모리간에 데이터를 마샬링 할 필요가 없습니다.
Lie Ryan

1
낙관적이지 않고 대역폭 오버 헤드가 0이 아닙니다. GPU 아키텍처가있는 프로세서가 전체 쇼를 실행하는 경우 이동할 필요가없는 경우 GPU 메모리 기본 메모리입니다. 환승이 없기 때문에 처음에 논의해야 할 송전 오버 헤드가 없습니다. AMD의 APU는 통합 메인 메모리와 함께 HSA (heterogenous system architecture)를 사용하므로 CPU와 GPU간에 제로 복사가 가능합니다.
Lie Ryan

75

GPU 부족 :

  1. 가상 메모리 (!!!)
  2. 메모리 이외의 장치를 주소 지정하는 수단 (예 : 키보드, 프린터, 보조 저장소 등)
  3. 인터럽트

최신 운영 체제와 같은 것을 구현하려면 이들이 필요합니다.

또한 배정도 산술에서 (상대적으로) 속도가 느리고 (단일 정밀도 산술 성능과 비교할 때) * (실리콘 크기 측면에서) 훨씬 더 큽니다. 구형 GPU 아키텍처는 대부분의 범용 프로그래밍에 필요한 간접 호출 (함수 포인터를 통한) 및 느리게 수행되는 최신 아키텍처를 지원하지 않습니다. 마지막으로 (다른 답변에서 알 수 있듯이) 병렬화 할 수없는 작업의 경우 동일한 작업 부하가 주어지면 GPU와 비교하여 GPU가 손실됩니다.

편집 :이 답변은 2011 년에 작성되었습니다-GPU 기술은 끊임없이 변화하는 분야입니다. 이 글을 읽는 시점에 따라 상황이 매우 다를 수 있습니다. : P

* NVidia의 Quadro 또는 Tesla 라인 (Fermi 세대 이상) 또는 AMD의 FirePro 라인 (GCN 세대 이상)과 같은 일부 GPU는 배정 밀도 산술에서 느리지 않습니다. 그러나 이들은 대부분의 소비자 컴퓨터에는 없습니다.


@Cicada : 그것에 대한 참조가 있습니까? 어쨌든, 그것이 사실이더라도 최신 하드웨어조차도 그 경우에는 잘 수행되지 않을 것입니다. (예를 들어 CPU에 비해 ​​성능상의 이점이 크지 않으며 전력 소비 단점)
Billy ONeal

3
그렇습니다. Fermi 디바이스 (CUDA 4.0 및 sm_20)는 간접 점프 (따라서 C ++ 가상 메소드, 상속 등)를 지원합니다.
Angry 양상추

$ 300 2 년 된 GPU에서 544 GigaFLOPS 가 느리나요?
벤 Voigt

2
@Ben : 데이터 병렬 응용 프로그램에서만 이러한 종류의 성능을 얻을 수 있습니다. 일반적인 순차적 작업은 완전히 다른 볼 게임입니다. (해당 칩에서 1600 개의 코어가 모두 병렬로 실행되고 본질적으로 동일한 명령을 반복해서 실행합니다. 심지어 실제 성능보다는 이론적 인 것입니다)
Billy ONeal

@ 빌리 : 그러나 그것은 배정 밀도 산술 (당신이 주장한 것)의 속도가 아니라 특정 클래스의 알고리즘에서 속도가 느립니다. (그리고 CPU는 일반적으로 벤치 마크 처리량도 달성하지 못합니다)
Ben Voigt

37

CPU는 매우 빠른 작업자와 같습니다. GPU는 빠르게 진행되는 복제 작업자 그룹과 비슷하지만 모두 동일한 작업을 동시에 수행해야합니다 (원하는 경우 일부 복제본을 유휴 상태로 두는 것을 제외하고)

동료 개발자, 하나의 초고속 사람 또는 실제로 빠르지 않은 100 개의 빠른 복제품 중 어느 것을 갖고 싶습니까? 모두 동일한 작업을 동시에 수행해야합니까?

일부 작업의 경우 복제본은 예를 들어 바닥을 쓸어 넘기는데 매우 좋습니다.

일부 작업의 경우 복제본이 정지합니다 (예 : 주간 보고서 작성)-모든 복제본은 유휴 상태이지만 한 복제본은 보고서를 작성합니다 (그렇지 않으면 동일한 보고서의 사본 100 개만 얻음).


4
내가 둘 다 가질 수 있을까?
케빈 판코

22
@Kevin : 예. 그러나 CPU GPU 가 모두 있는 컴퓨터가 필요합니다 ! 그런 것이 있다면!
Joachim Sauer

3
훌륭한 비유. 이것을 기억할 것입니다.
Mayo

23

GPU는 한 번에 많은 작은 작업을 수행하도록 설계되었으며 CPU는 한 번에 한 가지 작업을 수행하도록 설계 되었기 때문입니다. 프로세스가 해싱과 같이 대규모 병렬 처리가 가능한 경우 GPU가 훨씬 빠릅니다. 그렇지 않으면 그렇지 않습니다.

CPU는 GPU보다 훨씬 빠른 해시를 계산할 수 있지만 CPU가 CPU를 처리하는 데 걸리는 시간에 GPU는 수백 개의 해시를 거치게됩니다. GPU는 동시에 많은 작업을 수행하도록 설계되었으며 CPU는 한 번에 한 작업을 수행하도록 설계되었지만 매우 빠릅니다.

문제는 CPU와 GPU가 매우 다른 문제에 대한 매우 다른 솔루션이며, 약간의 중복이 있지만 일반적으로 도메인의 내용이 도메인에 남아 있다는 것입니다. 우리는 CPU가 GPU가 할 수있는 것보다 훨씬 더 나은 작업을 수행하고 있기 때문에 CPU를 GPU로 교체 할 수 없습니다. 단순히 GPU가 작업을 수행하도록 설계되지 않았기 때문입니다.

그러나 CPU를 폐기하고 GPU 만있는 것이 가능하다면 이름을 바꾸지 않을 것이라고 생각하십니까? :)


대부분의 최신 CPU는 한 번에 2, 4 또는 8 개의 작업을 수행하도록 설계되어 있다고 생각합니다.
danielcg

@ danielcg25 : 대부분의 최신 GPU는 256, 512, 1024 개의 작업을 한 번에 수행하도록 설계되었습니다 (GTX 680에는 1536 개의 CUDA 코어가 있음). 각각의 개별 CPU 코어는 개념적으로 별개의 엔티티이지만 GPU에는 해당되지 않습니다.
Phoshi

@ danielcg25 : 나는 알고 있지만, 의도적으로 (의도적이지만) 오해가있는 의견은 아무도 주제를 모른 채 읽지 않으면 해로울 수 있습니다. 그런 의미에서 "엉덩이가된다"는 신호 : 소음 비율을 낮추기 때문에 SE에서는 높이 평가되지 않습니다.
Phoshi

방금 정보를 제공하고있었습니다. 오늘날 대부분의 컴퓨터는 실제로 2-8 개의 것을 한 번에 처리 할 수 ​​있습니다. 일부 프로세서는 그 이상을 수행 할 수 있습니다. 여전히 한 번에 100 개의 작업을 수행하는 GPU에 근접하지 않습니다.
danielcg

@ danielcg25 : 그것은 다른 종류의 처리이지만, 그것은 질문에 관한 것입니다. 각 CPU 코어는 효과적으로 분리되어 자체 데이터 청크 및 자체 프로세스로 작업합니다. 각 CPU 코어는 서로 다른 별도의 작업을 수행하며 선형으로 확장되지 않습니다. 옥토 코어는 쿼드 코어의 두 배만큼 유용하지 않으며 듀얼 코어의 두 배만큼 유용하지 않습니다. 반면 GPU 코어는 서로 다른 데이터 조각에서 동일한 작업을 수행하며 선형으로 확장됩니다. 멀티 코어 CPU가 존재한다는 것은 명백하지만 이것은 같은 것은 아닙니다 .
Phoshi

14

CPU에서 아키텍처와 같은 GPU를 사용하지 않는 이유 를 실제로 묻고 있습니까?

GPU는 그래픽 카드의 특수 CPU입니다. 범용 CPU는 병렬 및 부동 소수점 실행에 필적하지 않기 때문에 GPU 비 그래픽 계산을 빌려줍니다.

우리는 실제로 다른 GPU보다 CPU가 많은 CPU 아키텍처를 사용하고 있습니다. 예를 들어 나이아가라 프로세서는 상당히 멀티 태스킹됩니다. SPARC T3 은 512 개의 동시 스레드를 실행합니다.


왜 공감해야합니까?
jkj

3
마지막 줄은 단순히 거짓이므로 추측합니다. 사실, 하나의 x86 전용 주류 OS 만 생각할 수 있습니다. 심지어 현재 상용화되지 않은 알파 및 ARM 프로세서로 포팅되었습니다.
Javier

승인. 새로운 아키텍처로의 변경을 방해하는 주류 운영 체제 지원에 대한 나의 의견 인 마지막 섹션을 제거했습니다. 답변 범위에 속하지 않을 수 있습니다.
jkj

11

나는 여기에서 끔찍하게 착각 할 수 있고, 주제에 대해 거의 또는 전혀 권위가없는 말을하고 있지만 여기에 간다 :

  • 각 GPU 실행 장치 ( "코어")는 CPU에 비해 ​​주소 공간이 매우 제한적이라고 생각합니다.

  • GPU 실행 장치는 효율적으로 분기를 처리 할 수 ​​없습니다.

  • GPU 실행 장치는 CPU와 같은 방식으로 하드웨어 인터럽트를 지원하지 않습니다.

나는 항상 GPU 실행 장치가 의도 된 방식이 Playstation 3 "SPEs"와 같은 것이라고 생각했습니다. 그들은 데이터 블록을 제공하고 그 위에 여러 순차적 작업을 실행 한 다음 다른 블록을 뱉어 내고 싶습니다. 데이터, 헹굼, 반복. 이들은 "CPE"만큼 주소 지정 가능한 메모리를 가지고 있지 않지만 각 "SPE"를 특정한 순차적 작업에 전용으로 사용하는 것이 좋습니다. 한 장치의 출력이 다른 장치의 입력을 공급할 수 있습니다.

실행 단위는 데이터를 "분석"하고 해당 데이터가 무엇인지에 따라 여러 가지 결정을 내리려고하면 제대로 작동하지 않습니다.

이러한 "데이터 블록"은 게임 상태 테이블의 정점 목록, 디스크의 MPEG 데이터 등과 같은 스트림의 일부일 수 있습니다.

무언가가이 "스트리밍"모델에 맞지 않으면 효율적으로 병렬화 할 수없는 작업이 있으며 GPU가 반드시 최상의 솔루션 일 필요는 없습니다. 좋은 예는 키보드, 조이스틱 또는 네트워크 입력과 같은 "외부 이벤트"기반 항목을 처리하는 것입니다. 해당 모델에 맞지 않는 것은 많지 않지만 항상 몇 가지가 있습니다.


분기 예측 최적화에 대한 좋은 지적-나는 그것을 고려한 적이 없지만 당신이 옳습니다.
Jimmy Breck-McKye

6

이것은 클럭 속도 나 목적에 관한 것이 아닙니다 . 모든 작업이 아니라면 둘 다 동등하게 대부분을 완료 할 수 있습니다. 그러나 일부는 일부 작업에 비해 약간 더 적합합니다.

벙어리 코어가 많거나 아주 똑똑한 코어 그룹이 더 나은지에 대한 아주 오래된 논쟁 이있었습니다 . 이것은 80 년대로 쉽게 되돌아갑니다.

CPU 내부에는 수행 할 수있는 많은 계산이 있습니다. 똑똑한 코어는 동시에 여러 가지 다른 계산을 수행 할 수 있습니다 (멀티 코어와 비슷하지만 복잡하지는 않습니다. 명령어 수준 병렬 처리 참조 ). 스마트 코어는 동시에 여러 계산 (추가, 빼기, 곱하기, 나누기, 메모리 연산)을 수행 할 수 있지만 한 번에 하나씩 만 수행 할 수 있습니다. 이 때문에 그것들은 물리적으로 더 크고 (따라서 훨씬 비쌉니다) 멍청한 코어입니다.

벙어리 코어는 훨씬 작기 때문에 단일 칩에 더 많은 칩을 추가 할 수 있지만 동시에 많은 계산을 수행 할 수는 없습니다. 많은 멍청한 코어와 몇 가지 스마트 코어 사이에는 균형이 잘 맞습니다.

다중 코어 아키텍처는 계산이 수백 개의 코어로 쉽게 분리 될 수 있기 때문에 그래픽과 잘 작동하지만 코드 품질과 다른 코드가 하나의 계산 결과에 의존하는지 여부에 따라 달라집니다.

이것은 보이는 보다 훨씬 복잡한 질문입니다. 자세한 정보는 CPU 설계에 대한이 기사를 읽으십시오.

최신 마이크로 프로세서-90 분 가이드

http://www.lighterra.com/papers/modernmicroprocessors/


문법이 잘못되고 위의 사용되는 일반적으로 하위 파 스타일을 사용하십시오. 저는 커피를 마시지 않았습니다. 그것의 상당히 복잡한 개념과 포함 된 링크는 더 많은 것을 이해하고 싶다면 가야 할 곳입니다. 나쁜 설명이 아닙니다
Silverfire

1
나는 당신을 위해 그것을 수정하고 링크도 추가했습니다.
bwDraco

5

하나의 구문 요점을 깨뜨리고 싶습니다 .CPU와 GPU라는 용어는 구조적 이름이 아닌 기능적 이름입니다.

컴퓨터가 GPU를 기본 프로세서로 사용한다면 아키텍처와 디자인에 관계없이 "중앙 처리 장치"(CPU)가됩니다.


4

아키텍처 공간에는 하나의 프로세서를 "중앙"프로세서로, 다른 프로세서를 "그래픽"프로세서로 만드는 마법 분할 선이 없다는 점을 명심해야합니다. (일부 GPU는 완전히 일반화하기에는 너무 무너질 수 있지만 여기서 논의하고있는 것은 아닙니다.)

구별은 보드에 설치되는 방법과 그들에게 주어진 작업 중 하나입니다. 물론, 우리는 주 데이터 이동기에 범용 프로세서 (또는 범용 프로세서)를 사용하고, 그래픽과 같은 것들을 위해 특수하고 병렬화 된 깊게 파이프 라인 단위를 사용하여이를 최대한 활용할 수 있습니다.

GPU가 자신의 작업을 매우 빠르게 수행하는 데 사용 된 대부분의 스파이 트릭은 더 빠르고 더 나은 CPU를 만들려는 사람들에 의해 처음 개발되었습니다. Word와 Excel, Netscape 및 사람들이 컴퓨터를 사용하는 다른 많은 것들이 그래픽 전문 칩이 제공하는 기능을 충분히 활용할뿐만 아니라 지점이 많은 원인 때문에 (아주 비싸기 때문에 해당 아키텍처 에서 느리게 실행 됨) 느리게) 파이프 라인이 깨끗해집니다.


1
파이프 라인 오버 헤드는 높은 순위의 답변이 누락 된 기본 세부 사항이라고 생각합니다.
Steve

2

GPU가 있다는 요점은 당시 CPU가 비싼 그래픽 계산에서 CPU를 구제하는 것이 었습니다.
다시 단일 프로세서로 결합하면 모든 시작 위치로 돌아갈 수 있습니다.


한 걸음 앞으로 두 걸음 뒤로
랜돌프 리차드슨

2

간단한 이유 : 대부분의 응용 프로그램은 다중 스레드 / 벡터화되지 않습니다.

그래픽 카드는 적어도 개념 상 멀티 스레딩에 크게 의존합니다.

하나의 엔진을 가진 자동차, 바퀴 당 하나의 작은 엔진을 가진 자동차를 비교하십시오. 후자의 차를 사용하면 시스템 프로그래밍 관점에서 고려되지 않은 모든 엔진을 명령해야합니다.

그러나 AMD 퓨전을 사용하면 벡터화되거나 하나의 스레드에 대해 빠른 처리 성능을 사용하는 방법이 변경됩니다.


2

우리가 여전히 CPU를 사용하는 이유는 CPU와 GPU 모두 고유 한 장점이 있기 때문입니다. ACM Computing Surveys 2015에서 승인 된 다음 논문을 참조하십시오. 'CPU 대 GPU 토론'에서 'CPU-GPU 협업 컴퓨팅'으로의 이동에 대한 결정적이고 포괄적 인 토론을 제공합니다.

CPU-GPU 이기종 컴퓨팅 기술 조사


1

간단히 말하면 GPU를 자동차의 트레일러와 비교할 수 있습니다. 일반적으로 트렁크는 실제로 큰 물건을 구입하는 경우를 제외하고 대다수의 사람들에게 충분합니다. 그러면 트레일러가 필요할 수 있습니다. 일반적으로 대부분의 작업을 수행하는 일반 CPU를 보유하는 것으로 충분하므로 GPU와 동일합니다. 그러나 많은 스레드에서 집중적 인 계산이 필요한 경우 GPU가 필요할 수 있습니다


1

gpus는 좋은 스트림 프로세서입니다. 스트림 처리는 긴 숫자 배열을 순차적으로 곱하는 것으로 생각할 수 있습니다. cpus에는 스트림 처리 기능 (SIM 확장이라고도 함)이 있지만 모든 프로그래밍 논리를 스트림 처리로 구현할 수는 없으며 컴파일러는 가능할 때마다 simd 명령어를 사용하는 btyecode를 생성 할 수 있습니다.

모든 것이 숫자의 배열은 아닙니다. 사진과 비디오도 소리가납니다 (여기에는 opencl 인코더가 있습니다). 따라서 gpus는 사진, 비디오 및 기타 유사한 것을 처리, 인코딩 및 디코딩 할 수 있습니다. 하나의 단점은 게임에서 말더듬을 만들고 gpus가 그래픽으로 바쁘고 게임을 할 때 시스템의 병목 현상이 발생하기 때문에 게임에서 gpus로 모든 것을 오프로드 할 수 없다는 것입니다. 최적의 솔루션은 PC의 모든 구성 요소를 완전히 활용하는 것입니다. 예를 들어 nvidia의 physx 엔진은 기본적으로 GPU가 완전히 활용 될 때 CPU에서 계산을 수행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.