요즘 많은 계산이 GPU에서 수행되는 것 같습니다. 분명히 그래픽이 있지만 CUDA 등을 사용하여 AI, 해싱 알고리즘 (비트 코인 생각) 및 기타를 GPU에서 수행합니다. CPU를 제거하고 GPU를 자체적으로 사용할 수없는 이유는 무엇입니까? GPU가 CPU보다 훨씬 빠른 이유는 무엇입니까?
요즘 많은 계산이 GPU에서 수행되는 것 같습니다. 분명히 그래픽이 있지만 CUDA 등을 사용하여 AI, 해싱 알고리즘 (비트 코인 생각) 및 기타를 GPU에서 수행합니다. CPU를 제거하고 GPU를 자체적으로 사용할 수없는 이유는 무엇입니까? GPU가 CPU보다 훨씬 빠른 이유는 무엇입니까?
답변:
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 로의 일반적인 전환은 매우 어렵습니다.
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는보다 복잡한 명령어를 구현할 수 있습니다.
GPU 부족 :
최신 운영 체제와 같은 것을 구현하려면 이들이 필요합니다.
또한 배정도 산술에서 (상대적으로) 속도가 느리고 (단일 정밀도 산술 성능과 비교할 때) * (실리콘 크기 측면에서) 훨씬 더 큽니다. 구형 GPU 아키텍처는 대부분의 범용 프로그래밍에 필요한 간접 호출 (함수 포인터를 통한) 및 느리게 수행되는 최신 아키텍처를 지원하지 않습니다. 마지막으로 (다른 답변에서 알 수 있듯이) 병렬화 할 수없는 작업의 경우 동일한 작업 부하가 주어지면 GPU와 비교하여 GPU가 손실됩니다.
편집 :이 답변은 2011 년에 작성되었습니다-GPU 기술은 끊임없이 변화하는 분야입니다. 이 글을 읽는 시점에 따라 상황이 매우 다를 수 있습니다. : P
* NVidia의 Quadro 또는 Tesla 라인 (Fermi 세대 이상) 또는 AMD의 FirePro 라인 (GCN 세대 이상)과 같은 일부 GPU는 배정 밀도 산술에서 느리지 않습니다. 그러나 이들은 대부분의 소비자 컴퓨터에는 없습니다.
CPU는 매우 빠른 작업자와 같습니다. GPU는 빠르게 진행되는 복제 작업자 그룹과 비슷하지만 모두 동일한 작업을 동시에 수행해야합니다 (원하는 경우 일부 복제본을 유휴 상태로 두는 것을 제외하고)
동료 개발자, 하나의 초고속 사람 또는 실제로 빠르지 않은 100 개의 빠른 복제품 중 어느 것을 갖고 싶습니까? 모두 동일한 작업을 동시에 수행해야합니까?
일부 작업의 경우 복제본은 예를 들어 바닥을 쓸어 넘기는데 매우 좋습니다.
일부 작업의 경우 복제본이 정지합니다 (예 : 주간 보고서 작성)-모든 복제본은 유휴 상태이지만 한 복제본은 보고서를 작성합니다 (그렇지 않으면 동일한 보고서의 사본 100 개만 얻음).
GPU는 한 번에 많은 작은 작업을 수행하도록 설계되었으며 CPU는 한 번에 한 가지 작업을 수행하도록 설계 되었기 때문입니다. 프로세스가 해싱과 같이 대규모 병렬 처리가 가능한 경우 GPU가 훨씬 빠릅니다. 그렇지 않으면 그렇지 않습니다.
CPU는 GPU보다 훨씬 빠른 해시를 계산할 수 있지만 CPU가 CPU를 처리하는 데 걸리는 시간에 GPU는 수백 개의 해시를 거치게됩니다. GPU는 동시에 많은 작업을 수행하도록 설계되었으며 CPU는 한 번에 한 작업을 수행하도록 설계되었지만 매우 빠릅니다.
문제는 CPU와 GPU가 매우 다른 문제에 대한 매우 다른 솔루션이며, 약간의 중복이 있지만 일반적으로 도메인의 내용이 도메인에 남아 있다는 것입니다. 우리는 CPU가 GPU가 할 수있는 것보다 훨씬 더 나은 작업을 수행하고 있기 때문에 CPU를 GPU로 교체 할 수 없습니다. 단순히 GPU가 작업을 수행하도록 설계되지 않았기 때문입니다.
그러나 CPU를 폐기하고 GPU 만있는 것이 가능하다면 이름을 바꾸지 않을 것이라고 생각하십니까? :)
CPU에서 아키텍처와 같은 GPU를 사용하지 않는 이유 를 실제로 묻고 있습니까?
GPU는 그래픽 카드의 특수 CPU입니다. 범용 CPU는 병렬 및 부동 소수점 실행에 필적하지 않기 때문에 GPU 비 그래픽 계산을 빌려줍니다.
우리는 실제로 다른 GPU보다 CPU가 많은 CPU 아키텍처를 사용하고 있습니다. 예를 들어 나이아가라 프로세서는 상당히 멀티 태스킹됩니다. SPARC T3 은 512 개의 동시 스레드를 실행합니다.
나는 여기에서 끔찍하게 착각 할 수 있고, 주제에 대해 거의 또는 전혀 권위가없는 말을하고 있지만 여기에 간다 :
각 GPU 실행 장치 ( "코어")는 CPU에 비해 주소 공간이 매우 제한적이라고 생각합니다.
GPU 실행 장치는 효율적으로 분기를 처리 할 수 없습니다.
GPU 실행 장치는 CPU와 같은 방식으로 하드웨어 인터럽트를 지원하지 않습니다.
나는 항상 GPU 실행 장치가 의도 된 방식이 Playstation 3 "SPEs"와 같은 것이라고 생각했습니다. 그들은 데이터 블록을 제공하고 그 위에 여러 순차적 작업을 실행 한 다음 다른 블록을 뱉어 내고 싶습니다. 데이터, 헹굼, 반복. 이들은 "CPE"만큼 주소 지정 가능한 메모리를 가지고 있지 않지만 각 "SPE"를 특정한 순차적 작업에 전용으로 사용하는 것이 좋습니다. 한 장치의 출력이 다른 장치의 입력을 공급할 수 있습니다.
실행 단위는 데이터를 "분석"하고 해당 데이터가 무엇인지에 따라 여러 가지 결정을 내리려고하면 제대로 작동하지 않습니다.
이러한 "데이터 블록"은 게임 상태 테이블의 정점 목록, 디스크의 MPEG 데이터 등과 같은 스트림의 일부일 수 있습니다.
무언가가이 "스트리밍"모델에 맞지 않으면 효율적으로 병렬화 할 수없는 작업이 있으며 GPU가 반드시 최상의 솔루션 일 필요는 없습니다. 좋은 예는 키보드, 조이스틱 또는 네트워크 입력과 같은 "외부 이벤트"기반 항목을 처리하는 것입니다. 해당 모델에 맞지 않는 것은 많지 않지만 항상 몇 가지가 있습니다.
이것은 클럭 속도 나 목적에 관한 것이 아닙니다 . 모든 작업이 아니라면 둘 다 동등하게 대부분을 완료 할 수 있습니다. 그러나 일부는 일부 작업에 비해 약간 더 적합합니다.
벙어리 코어가 많거나 아주 똑똑한 코어 그룹이 더 나은지에 대한 아주 오래된 논쟁 이있었습니다 . 이것은 80 년대로 쉽게 되돌아갑니다.
CPU 내부에는 수행 할 수있는 많은 계산이 있습니다. 똑똑한 코어는 동시에 여러 가지 다른 계산을 수행 할 수 있습니다 (멀티 코어와 비슷하지만 복잡하지는 않습니다. 명령어 수준 병렬 처리 참조 ). 스마트 코어는 동시에 여러 계산 (추가, 빼기, 곱하기, 나누기, 메모리 연산)을 수행 할 수 있지만 한 번에 하나씩 만 수행 할 수 있습니다. 이 때문에 그것들은 물리적으로 더 크고 (따라서 훨씬 비쌉니다) 멍청한 코어입니다.
벙어리 코어는 훨씬 작기 때문에 단일 칩에 더 많은 칩을 추가 할 수 있지만 동시에 많은 계산을 수행 할 수는 없습니다. 많은 멍청한 코어와 몇 가지 스마트 코어 사이에는 균형이 잘 맞습니다.
다중 코어 아키텍처는 계산이 수백 개의 코어로 쉽게 분리 될 수 있기 때문에 그래픽과 잘 작동하지만 코드 품질과 다른 코드가 하나의 계산 결과에 의존하는지 여부에 따라 달라집니다.
이것은 보이는 것 보다 훨씬 복잡한 질문입니다. 자세한 정보는 CPU 설계에 대한이 기사를 읽으십시오.
최신 마이크로 프로세서-90 분 가이드
아키텍처 공간에는 하나의 프로세서를 "중앙"프로세서로, 다른 프로세서를 "그래픽"프로세서로 만드는 마법 분할 선이 없다는 점을 명심해야합니다. (일부 GPU는 완전히 일반화하기에는 너무 무너질 수 있지만 여기서 논의하고있는 것은 아닙니다.)
구별은 보드에 설치되는 방법과 그들에게 주어진 작업 중 하나입니다. 물론, 우리는 주 데이터 이동기에 범용 프로세서 (또는 범용 프로세서)를 사용하고, 그래픽과 같은 것들을 위해 특수하고 병렬화 된 깊게 파이프 라인 단위를 사용하여이를 최대한 활용할 수 있습니다.
GPU가 자신의 작업을 매우 빠르게 수행하는 데 사용 된 대부분의 스파이 트릭은 더 빠르고 더 나은 CPU를 만들려는 사람들에 의해 처음 개발되었습니다. Word와 Excel, Netscape 및 사람들이 컴퓨터를 사용하는 다른 많은 것들이 그래픽 전문 칩이 제공하는 기능을 충분히 활용할뿐만 아니라 지점이 많은 원인 때문에 (아주 비싸기 때문에 해당 아키텍처 에서 느리게 실행 됨) 느리게) 파이프 라인이 깨끗해집니다.
우리가 여전히 CPU를 사용하는 이유는 CPU와 GPU 모두 고유 한 장점이 있기 때문입니다. ACM Computing Surveys 2015에서 승인 된 다음 논문을 참조하십시오. 'CPU 대 GPU 토론'에서 'CPU-GPU 협업 컴퓨팅'으로의 이동에 대한 결정적이고 포괄적 인 토론을 제공합니다.
gpus는 좋은 스트림 프로세서입니다. 스트림 처리는 긴 숫자 배열을 순차적으로 곱하는 것으로 생각할 수 있습니다. cpus에는 스트림 처리 기능 (SIM 확장이라고도 함)이 있지만 모든 프로그래밍 논리를 스트림 처리로 구현할 수는 없으며 컴파일러는 가능할 때마다 simd 명령어를 사용하는 btyecode를 생성 할 수 있습니다.
모든 것이 숫자의 배열은 아닙니다. 사진과 비디오도 소리가납니다 (여기에는 opencl 인코더가 있습니다). 따라서 gpus는 사진, 비디오 및 기타 유사한 것을 처리, 인코딩 및 디코딩 할 수 있습니다. 하나의 단점은 게임에서 말더듬을 만들고 gpus가 그래픽으로 바쁘고 게임을 할 때 시스템의 병목 현상이 발생하기 때문에 게임에서 gpus로 모든 것을 오프로드 할 수 없다는 것입니다. 최적의 솔루션은 PC의 모든 구성 요소를 완전히 활용하는 것입니다. 예를 들어 nvidia의 physx 엔진은 기본적으로 GPU가 완전히 활용 될 때 CPU에서 계산을 수행합니다.