연산 처리속도를 높여주는 GPGPU 기술인 CUDA 코어란?

CUDA 코어를 사용하면 GPU의 병렬처리 연산을 매우 빠르게 활용할 수 있습니다. CPU는 8개의 두뇌가 있고, GPU는 2000개 이상의 두뇌가 있다고 할때, 복잡한 연산을 1번 시행하면 CPU가 빠르겠지만 1+1을 10000번 한다면 당연히 GPU가 빠르겠죠. 그래서 GPGPU 기술이 참 중요합니다.

 

그래픽 프로세서는 많은 양의 데이터에 대해 단일 작업을 수행하는 경우가 많기 때문에 수천 개의 단순화된 운영 단위(코어)가 장착되어 있습니다.[2] 따라서 병렬화 연산을 위해 GPU를 SIMD(Single Instruction Multiple Data) 형태로 사용하여 속도를 높이려는 시도가 있어 왔다. 그러나 원래 그래픽 처리용으로 설계된 그래픽 파이프라인에서 기존 병렬 작업을 실행하는 것은 매우 번거로운 작업이었습니다. 프로그래머가 GPU의 모든 세부 사항을 매일 처리해야 했기 때문입니다.

 

CUDA 프로그램은 쓰레드 처리[3]를 기반으로 하며, C/C++로 작성하기 위해 CUDA 고유의 구문을 가진 언어를 사용하여 동시에 실행할 쓰레드 수를 선언합니다. CUDA 코드는 대략적으로 호스트(CPU)에서 GPU(커널이라고 함) 내부에서만 실행되는 함수 호출입니다.

 

최근에는 CUDA에 추가된 OpenACC가 있습니다. 더 추상적이어서 코딩하기가 더 쉽습니다. Microsoft는 OpenACC의 DirectCompute 버전으로 생각할 수 있는 C++ AMP를 만들었습니다. 그러나 이것은 여전히 ​​일반 프로그래머가 사전 지식 없이 처리할 수 있는 복잡성 수준이 아닙니다. 진입장벽이 예전보다 많이 낮아졌을 뿐입니다.

 

R337 드라이버부터 Geforce 제품군의 CUDA 기반 비디오 인코딩/디코드 라이브러리가 제거되었습니다. NVENC[4](기존 CUDA 인코더 대체)를 홍보한다고 하는데 Tesla와 Quadro 제품은 정상적으로 사용이 가능합니다. 이로 인해 이전 라이브러리 파일이 포함되지 않은 경우 미디어 편집 프로그램에서 CUDA 가속을 사용하는 코덱이나 호환성 문제를 사용할 수 없습니다.

 

CUDA와 함께 딥 러닝을 지원하는 여러 라이브러리도 제공됩니다. 실제로 cuDNN, cuFFT[5], convolution 연산 속도를 높이는 cuFFT, 선형 대수 모듈인 cuBLAS와 같이 필요한 라이브러리는 대부분 구현되어 있습니다. 그러나 여전히 사용하기가 어렵습니다. TensorFlow 및 PyTorch 플랫폼은 이러한 라이브러리를 사용합니다.

 

CUDA는 사용하기 쉽도록 GPU의 메모리 모델을 추상화했습니다. 그러나 CUDA로 최대 속도 향상을 얻으려면 GPU의 메모리 구조를 알아야 합니다. Windows 전용 CUDA 프로그래밍의 성가심을 줄이기 위해 만들어진 BSGP(Bulk-Synchronous GPU Programming)라는 사람이 있습니다. BSGP는 CUDA 기계어 명령의 번역을 사용하는 별도의 언어입니다. 낮은 일관성 광선 추적 작업의 경우 CUDA보다 성능이 향상되었습니다. 그러나 BSGP는 완벽하지 않습니다. 반대로 메모리 참조 연속성이 강한 작업의 경우 성능이 CUDA보다 낮습니다.

 

 

Designed by JB FACTORY