개인적으로 NVIDIA 의 CUDA 를 별로 안좋아한다. 일단 기본적인 방법은 꽤 간단해서 단순하게 프로그램을 해보는 것은 어렵지 않은데, 조금 복잡한 프로그램을 돌리다보면 상당히 많은 난관에 부딫힌다.
어쨌건, 그렇다고 parallel computing 자체를 싫어하는 것은 물론 아니다. 그렇기 때문에 다른 쪽의 parallel computing 을 기다리고 있었는데, 가장 기다리는 것은 인텔의 Larrabee 이고, 두번째로 기다리던 것은 OpenGL 을 만들고 있는 Khronos 그룹에서 만드는 OpenCL 이다[1].
NVIDIA 의 개발자 트위터를 following 하고 있던 중, 오늘 NVIDIA 가 OpenCL 드라이버와 프로파일러, 샘플을 공개 했다는 트윗을 보고 바로 설치했다[2]. 실제 closed beta 테스트는 꽤 이전부터 한듯 하고, open beta 는 얼마 안된듯 하다.
먼저 이곳에서 드라이버/프로파일러/SDK 샘플을 다운 받아 설치한다.
그러면 샘플이 넉넉히 있다는 것을 볼 수 있고, 문서도 자세하게 포함되어 있다(Khronos 그룹이 공개한 스팩을 포함해서, CUDA 관점에서 본 OpenCL 의 구조 등이 자세하게 있다).
기본적인 형식은 CUDA 와 비슷한듯 한데, 지금 알 수 있는 차이점을 소개하자면, CUDA 는 .cu 파일을 직접 별도의 CUDA 컴파일을 통해 컴파일 하여, PTX(GPU 용 어셈블리 파일?)파일과 C/C++ 의 OBJ 파일로 나누어진다. 그리고 그것이 링크 되는 과정이다.
반면 OpenCL 은 순수하게 C/C++ 언어로 되어 있고, 별도의 .cl 파일은 컴파일시에는 무시 되고, 실행할 때 파일을 읽어들여 컴파일 하는 형식이다(기존 GPU 의 GLSL 같은 쉐이더를 사용하는 방법이라 생각하면 된다).
아마도 OpenCL 의 방법이 분명 디버깅에는 안좋을 것이다. 하지만 왠지 모르게 개인적으로는 이 방법을 선호한다(그냥 CUDA 가 괴롭다는게 이유일 듯-_-ㅋ).
더 자세한 상황은 좀 더 써봐야 할 듯 하다.
ps. 현재 CUDA Contest 가 진행 중인데, OpenCL 을 사용해서 참가해도 된다는 답장을 받았다.
ps2. AMD-ATI 진영에서는 OpenCL 을 사용할 수 있도록 현재 Stream SDK 라는 것을 공개하는 듯 하다. 자세하게 살펴보지는 않았지만, 이것은 아직 GPU 를 사용하는 것은 아니고, CPU/SSE 를 사용하는 듯 하다. 나중에는 CPU 와 GPU 를 동시에 지원될듯 한데, GPU 만 사용하는 NVIDIA 와 어떻게 경쟁이 될지 기대가 된다.
- 실제 OpenCL 은 애플사가 최초 개발하고 있으며, 상표권도 애플이 가지고 있다고 한다. 참고 : http://en.wikipedia.org/wiki/OpenCL [본문으로]
- ATI 도 OpenCL 에 관심이 있는 것 같긴 한데, 현재로써는 별다른 공개 할만한 과정은 없는 것 같다. 참고 : http://ati.amd.com/technology/streamcomputing/opencl.html 대세는 Parallel Computing데, ATI 에서는 이것을 다룰 방법이 CUDA 만큼 잘 잡혀 있지는 않다. 반면 NVIDIA 는 CUDA 에 엄청난 정성을 쏟아는다. (이러다가 혹여나 CUDA 가 안되면 망할 것 같은 느낌...) [본문으로]







556940
40
572





댓글을 달아 주세요
안녕하세요. 구굴서 CUDA 검색을 하다가 방문했습니다.
프로그래밍 관련 일을 하시거나 공부하시나보내요.^^상당히 멋진공부를 하시는것 같아 부럽습니다.
저는 산업디자인을 공부하고 있는 학생입니다.
궁금한게 있습니다. 프로그래밍하고는 완전 거리가 먼 공부를 하고 있다보니 이해가 안가는 부분이 많이 있습니다.(ㅋ밝히기 창피하지만 정보처리자격증은 있습니다^^)
아무래도 전 CUDA 관련 어플(?) 들을 이용한, 그러한 엔진들을 사용하여 가시적으로 만들어야하는 일을 해야 하는데, 피직스, CUDA, OPTIX 등.. 이런 것들이 상당히 생소 합니다. 제가 모바일용 쿼드로를 장착한 워크스테이션을 사용중인데, 이런 부분을 표면적으로나 이해를 해야 공부하는데 있어서 극대화 시킬 수 있겠는데, 많이 어렵내요. 쿼드로를 사용하기위한 이해하기 쉬운 정보를 얻을 수 있는 곳이 있을까 여쭈어봅니다.
물론 개인적인 의견이 담긴 이 포스팅도 많은 도움이 되었습니다.
저도 많이 돌아다녀본 것이 아니라서 많은 도움이 되긴 힘들 것 같네요.
하지만 제 개인적인 경험으로는 CUDA SDK 와 NVIDIA 에 있는 CUDA 포럼이 가장 좋은 참고가 되는 것 같습니다.
하지만 이 역시 기존에 프로그래밍에 익숙한 개발자를에게 더욱 적합하겠죠.
비 개발자들을 위한 CUDA 포럼이 있는지는 모르겠지만, 그래도 가장 쉽게 CUDA 를 배울 수 있는 부분은 CUDA SDK 에 있는 샘플 인것 같습니다. 물론 기본적인 프로그래밍(eg. C 언어)은 다 할 줄 아셔야 하구요.
컴퓨터 아키텍쳐/CUDA 아키텍쳐에 대해 깊게 알면 알수록 여러가지 도움이 되구요. (특히 성능에 있어서 매우 critical 한 부분이 됩니다.)
어쨌건 저는 SDK 를 추천드립니다~