
GPU 컴퓨팅이란?
GPU 컴퓨팅이란 과학 및 엔지니어링 컴퓨팅을 위한 GPU (graphics processing unit)의 이용을 말한다.
GPU 컴퓨팅 모델은 헤테로지니어스 컴퓨팅 모델 안에서 CPU와 GPU를 동시에 이용한다. 애플리케이션 중 순차적 기능은 CPU에서, 그리고 강도 높은 컴퓨테이션은 GPU에서 처리된다. 사용자측에서는 GPU의 고성능으로 애플리케이션이 보다 빠르게 구동되는 이점을 누릴 수 있다.

애플리케이션 개발자는 강도 높은 컴퓨팅을 요하는 커널 (kernel)을 GPU에 맵핑하기 위해 본인의 애플리케이션을 개량해야 하며, 애플리케이션의 나머지 부분은 CPU에 그대로 남는다. GPU에 하나의 기능을 맵핑하기 위해서는, 그 기능 내 병렬을 공개하기 위한 기능의 재작성 및 GPU에서 데이터의 입출력을 위한 “C” 키워드를 추가하는 작업이 필요하다.
GPU 컴퓨팅은 CUDA 아키텍처라 불리는 엔비디아 GPU의 고도 병렬 아키텍처에 의해 이뤄진다. CUDA 아키텍처는 애플리케이션의 데이터 셋을 처리하기 위한 수백 개의 프로세서 코어를 지니고 있다.
테슬라 10-시리즈 GPU는 CUDA 아키텍처의 2세대로, IEEE 표준 배정밀 부동소수점 (double precision floating point) 하드웨어 지원, GPU의 분산공유 메모리 형태의 로컬 데이터캐시 및 병합 메모리 액세스 (coalesced memory access) 등과 같이 과학 애플리케이션에 최적화된 기능들을 갖고 있다.
Jack Dongarra 교수
이노베이티브 컴퓨팅 연구실 책임자
The University of Tennessee
GPU 컴퓨팅의 역사
그래픽 칩은 고정된 기능의 그래픽 파이프라인으로부터 시작되었다. 이후, 이러한 그래픽 칩들이 점점 더 프로그래밍할 수 있게 되면서, 엔비디아가 최초의 GPU (Graphics Processing Unit)를 발표하게 되었다. 1999년에서 2000년경에는 전자기학 및 의료 이미징과 같은 분야의 연구원들 그리고 특히 컴퓨터 과학자들이 다용도의 컴퓨팅 애플리케이션을 구동하는 데 GPU를 사용하기 시작했다. 이들은 GPU의 뛰어난 부동소수점 성능이 광범위한 과학 애플리케이션들의 성능을 높인다는 사실을 알게 되었으며, 이것이 GPU를 통한 일반 목적의 컴퓨팅을 일컫는 ‘GPGPU’ (General Purpose computing on GPU)의 시작이 되었다.
문제는 GPGPU에서 GPU를 프로그래밍 하기 위해서는 OpenGL이나 CG와 같은 그래픽 프로그래밍 언어를 사용해야 된다는 점이었다. 개발자들은 과학 애플리케이션을 그래픽 애플리케이션처럼 보이게 하기 위해, 삼각형과 폴리곤을 그리는 맵핑 작업을 해야 했으며, 이는 과학계가 GPU의 뛰어난 성능을 누리는데 상당한 제약이 되었다.
엔비디아는 이러한 성능이 보다 다양한 과학분야에 가져다 줄 수 있는 이점과 그 잠재력을 간파하여, 과학 애플리케이션 및 C 와 C++ 같은 고급언어의 추가지원을 위해 완전히 프로그래밍화 할 수 있도록 GPU를 변환하는데 투자하기로 결정했다. 이러한 노력 끝에 GPU를 위한 CUDA 아키텍처가 탄생하게 되었다.
CUDA 병렬 아키텍처 및 프로그래밍 모델
CUDA 병렬 하드웨어 아키텍처는 태스크 병렬뿐 아니라 미세하게 그레인화 (grained) 되었거나 개략적으로 그레인화된 데이터를 표현하는 abstraction을 제공하는 CUDA 병렬 프로그래밍 모델을 동반한다. 프로그래머는 C, C++, Fortran과 같은 고급언어 또는 OpenCL™, DirectX-11 Compute와 같은 드라이버 API를 선택하여 병렬표현 할 수 있다.

엔비디아가 처음 제공한 언어지원은 C언어에 대한 것이다. CUDA 소프트웨어 개발툴을 위한 C 셋은 최소한의 키워드 또는 확장 셋으로 C언어를 이용하여 GPU를 프로그래밍할 수 있게 한다. Fortran, OpenCL 등에 대한 지원은 향후 제공될 예정이다
CUDA 병렬 프로그래밍 모델은 프로그래머들이 문제(problem)를 개략적인 하위 문제로 분할할 수 있도록 한다. 이에 따라, 하위문제에서의 미세 그레인 병렬화는 각각의 개별 하위문제가 협동 병렬로 해결될 수 있도록 표현된다.
OpenCL™는 애플사의 상표이며 크로노스 그룹이 배포한 OpenCL™을 사용하고 있습니다.