GPGPU가있는 경우 왜 SIMD를 사용합니까?


13

이 질문은 Stack Exchange의 CS 부분에서 더 잘 제공된다고 생각했습니다. CUDA 및 OpenCL과 같은 언어의 GPGPU가 있으므로 멀티미디어 SIMD 확장 (SSE / AVX / NEON)이 여전히 목적에 부합합니까?

최근에 SSE 명령어를 사용하여 정렬 네트워크를 가속화하는 방법에 대한 기사를 읽었습니다. 나는 이것이 매우 깔끔하다고 생각했지만 내가 comp arch 교수에게 이야기했을 때 그는 웃으며 GPU에서 유사한 코드를 실행하면 SIMD 버전을 파괴 할 것이라고 말했다. SSE가 매우 간단하고 GPU가 훨씬 더 많은 병렬 처리 기능을 갖춘 매우 복잡한 대형 가속기이기 때문에 이것을 의심하지는 않지만 멀티미디어 SIMD 확장이 GPU를 사용하는 것보다 더 유용한 시나리오가 많이 있습니까?

GPGPU가 SIMD를 중복으로 만드는 경우 인텔이 SIMD 지원을 늘리는 이유는 무엇입니까? SSE는 128 비트였으며 이제는 AVX를 사용하는 256 비트이며 내년에는 512 비트가됩니다. GPGPU가 데이터 병렬 처리로 코드를 더 잘 처리하는 경우 인텔은 왜 이러한 SIMD 확장을 추진하고 있습니까? 이들은 동등한 자원 (연구 및 영역)을 더 큰 캐시 및 분기 예측기에 배치하여 직렬 성능을 향상시킬 수 있습니다.

왜 GPGPU 대신 SIMD를 사용합니까?


2
GPU를 바쁘게 유지하기에 충분한 데이터를 GPU에 공급하는 것은 어려운 일입니다. 호스트와 장치 간의 데이터 전송은 사실상 병목 현상입니다. 특정 작업은 CPU에서 더 잘 지원됩니다 (예 : 캐리 프리 곱셈, PCLMULQDQ 참조).
Juho

2
@Juho AMD의 APU와 같은 새로운 장치가 동일한 다이에 GPU와 CPU를 가지고 있지 않습니까? 이것이 병목 현상을 제거합니까?
jonfrazen

1
모든 것이 말되고 완료 될 때 벡터 명령은 여전히 ​​단일 명령이며, 예약 및 실행 비용은 다른 단일 명령과 동일합니다. 이점이 비용보다 큰 경우 GPU에서 작업을 실행하는 것이 좋습니다. 또한 코어 당 하나의 SIMD 장치를 얻을 수 있지만 일반적으로 섀시 당 하나의 GPU 만 있으며 GPU는 현재 공유 리소스입니다. 이는 GPU에서 실행할 수있는 작업 수를 제한합니다. (코어 수는 항상 증가하고 있지만 GPU 수는 그렇지 않습니다.)
가명

인텔은 GPU 측면에서 (Larrabee / Knights Landing :)별로 많은 것을하지 않으므로 대신 AVX를 푸시하려고 시도하는 것이 당연하다고 생각합니다. AVX를 많이 사용하면 성능이 향상 될 수 있지만 이제는 새로운 CPU에서 다운 클로킹이 발생하여 무언가 한계에 도달 할 수 있습니다.
nsandersen

답변:


16

무료는 없습니다. GPGPU SIMD입니다. GPGPU의 SIMD 명령어는 CPU의 SIMD 명령어보다 넓은 경향이 있습니다. GPGPU는 세분화 된 멀티 스레드 경향이 있으며 CPU보다 하드웨어 컨텍스트가 더 많습니다. GPGPU는 스트리밍 에 최적화되어 있습니다 . 이들은 부동 소수점 단위에 더 큰 비율의 영역을 할당하고, 캐시 할 영역에 더 낮은 비율을, 정수 성능에 더 낮은 비율을 할당하는 경향이 있습니다.

비교해 봅시다. 인텔의 코어 i7-5960x에는 8 개의 코어가 있으며 각각 4 와이드 (배정도) SIMD를 가지며 3M (3.5GHz 터보), 20M L3 캐시에서 실행되며 356mm ^ 2 및 140W를 소비하고 $ 1000가 소요됩니다 .8 * 4 * 3 * 4 = 384 배정 밀도 GFlops. (추가 4 배는 사이클 당 벡터 레인 당 2 개의 융합 곱셈 추가를 수행 할 수 있기 때문입니다.) 768 개의 단 정밀도 GFlop을 수행 할 수 있습니다. 약 1.08 DP GFlops / mm ^ 2 및 2.75 DP GFlops / Watt입니다. 약 57.5 KB / mm ^ 2의 온칩 캐시도 있습니다.

NVidia의 GeForce GTX Titan Black은 각각 32 개의 배정 밀도 SIMD를 가진 890MHz (980MHz 터보), 3.5M의 L1 + L2 캐시에서 실행되는 15 개의 SMX를 가지고 있으며, 561mm ^ 2, 250W를 소비하고 $ 1000가 소요됩니다 . * 15 * 32 * .89 * 4 = 1709 배정 밀도 GFlops. (사이클 당 벡터 레인 당 2 개의 융합 곱셈 추가에서 동일한 4 배.) 5126의 단 정밀도 GFlop을 수행 할 수 있습니다. 약 3.05 DP GFlops / mm ^ 2 및 6.8 DP GFlops / Watt입니다. 따라서 단위 면적당 DP 부동 소수점 밀도는 3 배, DP 부동 소수점 전력 효율은 3 배입니다. 그리고 트레이드 오프? 6.4KB / mm ^ 2의 온칩 캐시. CPU보다 밀도가 약 9 배 낮습니다.

따라서 주요 차이점은 GPU가 캐시보다 부동 소수점 (특히 단 정밀도 부동 소수점)을 선호하는 영역 균형을 선택했다는 것입니다. I / O를 수행하기 위해 CPU와 GPU간에 데이터를 앞뒤로 복사해야한다는 사실을 무시하더라도 GPU와 CPU가 얼마나 잘 수행되는지는 실행중인 프로그램에 따라 다릅니다.

제어 분기가 거의없는 데이터 병렬 부동 소수점 프로그램이 있고 (모든 벡터 레인이 동시에 동일한 작업을 수행함) 프로그램이 스트리밍 중이면 (캐싱의 이점은 없음) GPU는 약 단위 면적당 또는 와트 당 3 배 더 효율적입니다. 그러나 상당한 양의 분산 제어, 비 데이터 병렬 작업을 수행하거나 대량의 읽기-수-시간 데이터 구조의 이점을 얻을 수 있다면 CPU가 더 나을 것입니다.

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