GPU 컴퓨팅 또는 GPGPU는 과학 및 엔지니어링 컴퓨팅의 일반적인 목적에 그래픽 처리 장치(GPU)를 사용하는 것을 말합니다.
GPU 컴퓨팅 모델은 이질적인 공동 프로세싱 컴퓨팅 모델에 CPU와 GPU를 함께 사용하는 것입니다. 어플리케이션의 순차적 부분은 CPU에서 실행하고, 계산 집약적인 부분은 GPU를 통해 보다 빠르게 처리됩니다. 사용자 관점에서는 GPU가 성능을 크게 향상시켜 주기 때문에 더욱 향상된 어플리케이션성능을 경험하게 됩니다.

GPU는 지난 수년 간에 걸쳐 빠르게 발전하였으며 현재 수 테라플롭 부동 소수점의 성능을 발휘하는 단계에 이르고 있습니다. NVIDIA는 GPGPU의 혁신을 이끌어 왔으며, 지난 2006~2007년 “CUDA”라는 새로운 대규모 병렬 아키텍처를 도입함으로써 컴퓨팅 업계의 엄청난 발전에 기여하고 있습니다. CUDA 아키텍처는 수백 개의 프로세서 코어로 구성되어 있으며, 이들 코어가 함께 작동함으로써 어플리케이션 데이터 셋을 경이로운 속도로 처리합니다.
지난 수년 동안 GPGPU의 비약적인 발전을 통해 CUDA 병렬 프로그래밍 모델을 이용한 프로그래밍도 훨씬 용이해졌습니다. 이 프로그래밍 모델을 통해 어플리케이션 개발자는 계산 집약적 커널을 GPU에 매핑하도록 어플리케이션을 수정할 수 있습니다. 어플리케이션의 일부는 CPU에서 처리됩니다. 함수를 GPU에 매핑하려면 함수에서 병렬 처리가 가능하도록 함수를 새롭게 작성하고 “C” 키워드를 추가하여 데이터를 GPU로 전달해야 합니다. 개발자는 수천 개의 쓰레드 가운데 수십 개의 쓰레드를 동시에 실행시켜야 합니다. GPU 하드웨어가 이러한 쓰레드를 관리하고 스케줄링을 진행합니다.
Tesla 20 시리즈 GPU는 최신 CUDA 아키텍처인 “페르미(Fermi)”를 기반으로 하고 있습니다. 페르미는 500기가플롭 이상의 IEEE 표준 2배 정도 부동 소수점 하드웨어 지원, L1 및 L2 캐시, ECC 메모리 오류 보호, GPU 전반에 걸쳐 분산된 공유 메모리 형태의 로컬 사용자 관리 데이터 캐시, 집합적 메모리 액세스 등 주요한 기능들을 포함하고 있으며 과학 어플리케이션에 최적화되어 있습니다.
GPU 컴퓨팅의 역사
그래픽 칩은 고정된 기능의 그래픽 파이프라인으로부터 시작되었다. 이후, 이러한 그래픽 칩들이 점점 더 프로그래밍할 수 있게 되면서, 엔비디아가 최초의 GPU (Graphics Processing Unit)를 발표하게 되었다. 1999년에서 2000년경에는 전자기학 및 의료 이미징과 같은 분야의 연구원들 그리고 특히 컴퓨터 과학자들이 다용도의 컴퓨팅 애플리케이션을 구동하는 데 GPU를 사용하기 시작했다. 이들은 GPU의 뛰어난 부동소수점 성능이 광범위한 과학 애플리케이션들의 성능을 높인다는 사실을 알게 되었으며, 이것이 GPU를 통한 일반 목적의 컴퓨팅을 일컫는 ‘GPGPU’ (General Purpose computing on GPU)의 시작이 되었다.
문제는 GPGPU에서 GPU를 프로그래밍 하기 위해서는 OpenGL이나 CG와 같은 그래픽 프로그래밍 언어를 사용해야 된다는 점이었다. 개발자들은 과학 애플리케이션을 그래픽 애플리케이션처럼 보이게 하기 위해, 삼각형과 폴리곤을 그리는 맵핑 작업을 해야 했으며, 이는 과학계가 GPU의 뛰어난 성능을 누리는데 상당한 제약이 되었다.
엔비디아는 이러한 성능이 보다 다양한 과학분야에 가져다 줄 수 있는 이점과 그 잠재력을 간파하여, 과학 애플리케이션 및 C, C++ 와 Fortran같은 고급언어의 추가지원을 위해 완전히 프로그래밍화 할 수 있도록 GPU를 변환하는데 투자하기로 결정했다. 이러한 노력 끝에 GPU를 위한 CUDA 아키텍처가 탄생하게 되었다.
CUDA 병렬 아키텍처 및 프로그래밍 모델
CUDA 병렬 하드웨어 아키텍처는 태스크 병렬뿐 아니라 미세하게 그레인화 (grained) 되었거나 개략적으로 그레인화된 데이터를 표현하는 abstraction을 제공하는 CUDA 병렬 프로그래밍 모델을 동반한다. 프로그래머는 C, C++, Fortran과 같은 고급언어 또는 OpenCL™, DirectX-11 Compute와 같은 드라이버 API를 선택하여 병렬표현 할 수 있다.

NVIDIA는 현재 C, C++, Fortran, OpenCL 및 DirectCompute를 이용한 GPU 프로그래밍을 지원합니다. 개발자는 위 그림에 나타나 있는 것처럼 라이브러리 및 미들웨어와 함께 다양한
소프트웨어 개발 도구를 이용할 수 있습니다(참조).
CUDA 병렬 프로그래밍 모델은 프로그래머들이 문제(problem)를 개략적인 하위 문제로 분할할 수 있도록 한다. 이에 따라, 하위문제에서의 미세 그레인 병렬화는 각각의 개별 하위문제가 협동 병렬로 해결될 수 있도록 표현된다.
OpenCL™는 애플사의 상표이며 크로노스 그룹이 배포한 OpenCL™을 사용하고 있습니다.
DirectX는 Microsoft의 등록상표입니다.