아주 오래 전 컴퓨터에는 GPU 라는 개념이 특별히 존재하지 않았습니다.
그저 화면에 얼마나 많은 픽셀을 나타낼 수 있는가 정도가 그래픽 카드의 성능을 나타내는 기준이였습니다.
그랬던 상황이 오늘 날에 이르게 된 것입니다.( 굳이 자세히 언급할 필요가 없을 것 같습니다.^^ )
오늘날의 GPU 의 성능은 가히 놀라울 정도입니다.
하지만 이런 놀라운 성능을 가진 GPU의 processing unit 들이 대부분의 시간을 놀면서 있다는 것이
우리의 신경에 거슬렸던 것입니다.
그래서 이들에게 일감을 분배시키기 위한 방안을 생각하게 되었고,
이를 배경으로 등장한 것이 바로 GPGPU 입니다.
GPU 를 활용한 일반적인 처리 방식을
GPGPU( General-purpose computing on graphics processing uints ) 라고 합니다.
범용성 있게 GPU 를 활용해서 처리하겠다는 것이지만,
사실 CPU 와 GPU 의 목적은 엄연히 다릅니다.
CPU 는 광범위한 영역에서도 효율적으로 이용될 수 있도록 설계를 된 것이지만,
GPU 는 그래픽 처리를 위한 산술 연산에 특화된 processing unit 입니다.
오늘 날 PC 는 멀티코어 형식이 많아지고 있는 추세인데,
하나의 CPU 는 기본적으로 특정 시간에 하나의 연산만 수행할 수 있습니다.
GPU 의 경우에는 병렬처리 형식에 완전히 특화된 형태입니다.
오늘날 GPU의 코어는 32개라고 합니다.
즉 32개가 연산이 동시에 실행될 수 있다는 얘기입니다.
아래 그림을 한번 보실까요?
GPU 에는 SIMD 라는 것이 굉장히 많은 것을 볼 수 있습니다.
SIMD( Single Instruction Multiple Data ) 라는 것은 병렬 프로세서의 한 종류입니다.
벡터 기반의 프로세서에서 주로 사용되는데,
하나의 명령어를 통해서 여러 개의 값을 동시에 계산할 수 있도록 해줍니다.
( http://ko.wikipedia.org/wiki/SIMD --> 여기서 참고 했습니다^^ )
벡터 기반이라는 사실에 우리는 주목할 필요가 있습니다.
GPU 는 광범위한 목적으로 설계된 processing unit 이 아닙니다.
즉, GPGPU 를 활용하는 목적은 주로 수치 연산에만 국한된 이야기 입니다.
일반적인 로직으로 GPGPU 를 활용하는 것은 그리 좋은 선택이 아니라는 것입니다.
현재 GPGPU 가 활용되고 있는 영역은 이미지 프로세싱, 비디오 프로세싱, 시뮬레이션 등과 같이
많은 수학 연산이 필요한 영역입니다.
분명한 것은 이들 수치 연산에 국한된 모델이라 할지라도, 그 성능이 무척 매력적이라는 것입니다.
이런 GPGPU 활용을 위해서 마이크로소프트는 어떤 준비물을 가지고 등장했을까요?
그것이 바로 'DirectCompute' 라는 것입니다.^^
아래 그림을 한번 보실까요?
DirectCompute 외에도 친숙한 이름이 보이시나요?
개인적으로 현재 GPGPU 분야에서 가장 앞서 있다고 보여지는 CUDA 가 있습니다.
이것들에 대한 우열을 가리기는 어려운 문제입니다.
여러분이 처한 상황에서 최선의 선택을 하면 되는 것입니다.
그 중에 DirectCompute 도 하나의 선택지일 뿐입니다.
CUDA 도 굉장히 훌륭한 GPGPU 모델입니다.
( 사실 저도 CUDA 를 공부하면서 GPGPU 의 개념을 잡았습니다.^^ )
CUDA 는 제가 지금 언급하지 않아도 될 정도로 많은 정보들이 공개되어 있습니다.
DirectCompute 는 마이크로소프트에서 가지고 나온 GPGPU 모델입니다.
앞으로 OS 의 강력한 지원을 가지고 등장하게 될 것입니다.
사실 GPGPU 와 DirectCompute 는 매우 혼란스럽게 사용될 수 용어들입니다.
그래서 오늘은 이들 두 용어를 확실히 구분하는 것으로 마무리 하겠습니다.^^
다음 시간부터는 DirectCompute 에 대해서 조금씩 살펴보겠습니다.
참고 자료
http://microsoftpdc.com/Sessions/P09-16
본 내용은 위의 PDC 를 참고해서 만들었습니다.
'DirectX 11' 카테고리의 다른 글
| [JumpToDX11-12] DirectCompute 의 절차. (0) | 2010/04/26 |
|---|---|
| [JumpToDX11-11] DirectCompute 를 위한 한걸음! (0) | 2010/02/11 |
| [JumpToDX11-10] GPGPU 를 위한 DirectCompute. (2) | 2010/01/27 |
| [JumpToDX11-9] Multi-threaded Rendering 을 위한 API. (0) | 2010/01/11 |
| [JumpToDX11-8] Deferred Contexts (0) | 2009/12/02 |
| [JumpToDX11-7] 간편해진 리소스 처리. (0) | 2009/11/18 |
TAG Compute Shader,
ComputeShader,
DirectCompute,
directx,
DirectX 최적,
DirectX11,
GPGPU,
Visual Studio 2010,
visualstudio2010,
VIVA2010,
VS2010,
VSTS 2010,
vsts2010,
비주얼 스튜디오 2010,
비주얼스튜디오2010,
비쥬얼스튜디오2010,
조진현




댓글을 달아 주세요
CUDA는 C/C++ 로 사용을 해야해서.. CUDA.NET을 이용해본적이 있는데..
Directcompute 를 이용하는 것과 속도차이라던지.. 실제 코드를 작성할 떄 용이성?이라던지.. 장단점이 있는건가요?
보통 레퍼런스들이 전부 CUDA 소스들이라서.. 왠만해서는 게임이나 CAD 같은..분야 외에는 안쓰게 될수도 있을것 같아요....ㄷㄷ
시뮬레이션 속도는 좋기야 하지만.. 계산쪽은 대부분 유닉스나 리눅스계열이라..호환이 되지 않고서는..;;
CUDA와 DirectCompute 의 속도 차이는 거의 없을 것이라고 생각이 듭니다.
어차피 구조 상에서 GPU 를 활용해야 하는 것이기 때문에
두 플랫폼의 성능 상 우위를 논하기는 어려운 문제인 것 같습니다.
사실 DirectCompute 는 아직 정식으로 SDK 에 포함된 내용이 아닙니다.
그래서 아직 공개된 자료가 거의 없는 상황입니다.
CUDA 의 경우에는 이미 몇년전에 공개가 되어서 지금 가장 앞선 GPGPU 환경입니다.
CUDA 의 이점은 저보다 아시는 분들이 더 많으시겠지만,
저는 개인적으로는 XP 에서도 된다는 것입니다.
DirectCompute 는 XP 에서 실행이 되지 않습니다.
물론 DirectCompute 를 지원하는 그래픽카드에서만 실행되겠지만,
그 또한 OS 에서 지원해 주지 않으면, 실행되지 않는다는 것입니다.
반면 CUDA 쪽은 XP 지원에 대한 포럼이 있을 정도로 활용되고 있는 상황입니다.
CUDA 의 단점은 역시 자사의 그래픽카드만 실행할 수 있다는 것입니다.
엔비다아 계열의 카드만 지원되기 때문에 게임과 같은 대중을 목표로 하는 프로젝트에서는 쉽게 적용하기 어렵습니다.
DirectCompute 의 경우에는 모든 밴더들이 이를 지원해야하는 좀 강제적이기 때문에 게임쪽에서는 DirectCompute 를 선택하는 것이 좋을 것이라 생각이 됩니다.
DirectCompute 는 아직 문법적인 내용은 많이 공개가 되지 않았지만,
HLSL 이라는 쉐이더 기반의 언어를 사용하기 때문에,
아무래도 게임 개발자들쪽에 포커스가 간 것이 사실입니다.
아직 계속 발전 중인 분야이니, 좀 더 지켜보면 좋을 것 같습니다.^^