GPU가 CPU보다 숫자 계산에서 더 뛰어난 이유는 무엇입니까? 그리고 분기에서 더 나빠질까요? 누군가 나에게 그것에 대한 자세한 설명을 줄 수 있습니까?CPU에 대한 GPU 성능
답변
GPU의 각 SM은 SIMD의 각 레인에서 서로 다른 스레드의 스레드를 실행하는 SIMD 프로세서입니다. 일단 응용 프로그램이 더 많은 계산 바운드 (소수의 메모리 액세스)되고 어떤 분기 응용 프로그램도 GPU의 최고 FLOPS를 달성하지 않습니다. 이는 분기시 GPU가 분기의 한면을 가리고 다른 한면을 먼저 실행하기 때문입니다. 두 경로는 연속적으로 실행되어 일부 SIMD 레인을 비활성 상태로두고 성능을 저하시킵니다.
도 (a)는 휘어짐의 내부에 발생 GPU는 전형적인 분기 차이를 나타낸다 (4 :
I 성능 실제로 삭제하는 방법을 표시하도록 한 기준에 공개되어 Fung's paper에서 유용도를 포함했다 이 샘플의 스레드). 당신은 커널 코드 다음 있다고 가정에서 같이에서
A: // some computation
if(X){
B: // some computation
if(Y){
C: // some computation
}
else{
D: // some computation
}
E: // some computation
}else{
F: // some computation
}
G: // some computation
스레드 B와 F로 분기 (b)는 SIMD 차선의 일부 시간 떨어지고 성능 이상 사용할 수 없습니다. 그림 (c) ~ (e)는 하드웨어가 분기 경로를 순차적으로 실행하고 분기를 관리하는 방법을 보여줍니다. 더 많은 정보는이 유용한 종이를 참고하십시오.
행렬 곱셈 또는 N 바디 시뮬레이션과 같은 계산 기반 응용 프로그램은 GPU에 잘 매핑되고 매우 높은 성능을 반환합니다. 이는 SIMD 레인을 잘 점유하고, 스트리밍 모델을 따르며, 메모리 액세스가 적기 때문입니다.
정확히 무엇을 찾고 있는지 확실하지 않습니다. 그것이 왜 다른 방법보다는이 방법을하는지에 대한 일반적인 이해라고 가정합니다. 한마디로
https://en.bitcoin.it/wiki/Why_a_GPU_mines_faster_than_a_CPU
:이 문서는 (평신도 측면에서) 귀하의 질문에 합리적인 이해를 제공하기는 CPU 코어는 클럭 당 4 개의 32 비트 명령어를 실행할 수 있습니다
을 (A (128)를 사용하여 (32 비트 ALU 또는 쉐이더를 사용하는) 과 같은 GPU 인 반면, Radeon HD 5970은 (3200 ALU 또는 쉐이더를 사용하는) 클럭 당 3200 32 비트 명령어를 실행할 수 있습니다. 이 차이는 800 (또는 AVX의 경우 400) 시간에 더 많은 지시를 곱한 것입니다. 2011 년 현재 가장 빠른 CPU 인 은 최대 6, 8 또는 12 코어와 다소 높은 주파수 클록 (2000-3000 MHz 대 Radeon HD 5970의 경우 725 MHz), 을 보유하지만 HD5970은 여전히 5 개 이상입니다 2.3GHz의 12 코어 CPU 4 개 (이는 HD5970의 경우 $ 350가 아니라 약 4700 달러로 다시 설정됩니다).
GPU는 특정 작업, 즉 높은 계산이 필요한 3D 그래픽을 렌더링하기 위해 설계되었습니다. 따라서 특정 응용 프로그램은 대부분의 최신 브라우저와 마찬가지로 GPU에 "번호 계산"을 덜어줍니다. 분기 기능의 경우, CPU가 더 나은 "오버로드 (over-lord)"기능을 갖기 때문에 태스크는 CPU와 유지됩니다 (현재로서는 누가 나중에 할 것인지를 알고 있습니다).
좋은 링크와 출발점 – Stencil