#1 OpenCL 설치하기. 간단한 설명.
- 포스팅에 들어가며
최근 CPU 로 처리하던 이미지 프로세싱 코드를 OpenCL을 이용해 GPU로 옮기는 프로젝트를 하게 되면서 넷 상에 한글로 된 기초 자료가 너무 부실한 것이 너무 아쉬웠습니다. 또한 코딩을 하면서 겪은 시행착오들을 새로 시작하시는 분들이 겪지 않았으면 해서 앞으로 약 10회정도 OpenCL에 관련한 포스팅을 하며 블로그를 시작해 볼까 합니다.
OpenCL(Open Computing Language)은 개방형 범용 병렬 컴퓨팅 프레임워크입니다.
이종 플랫폼이라는 말을 들어보셨나요? 여기서 얘기하는 이종플랫폼은 CPU, GPU, DSP등의 연산장치가 혼재되어있는 시스템을 말합니다. OpenCL은 이러한 시스템 내에서 여러 연산장치의 연산 유닛을 유저가 쉽게 사용 할 수 있도록 도와주는 프레임워크 입니다.
이 중에서도 우리가 특히 관심 있는것은 GPU입니다. GPGPU(General-Purpose computing on Graphics Processing Units) 는 말 그대로 GPU의 강력한 병렬 프로세싱 능력을 그래픽 연산에만 사용 하는 것이 아니라, 다양한 연산에 사용 하겠다는 것입니다.
렌더링 시, DirextX나 OpenGL 셰이더를 이용해 GPU 병렬처리가 가능하고 이를 통해 그래픽 연산이 아닌 다른 연산(이미지 필터링이나 병렬 계산 등)을 하는 것이 가능하지만 어디까지나 용도가 정해져 있는 것을 다른 용도로 사용 하는 것입니다.
하지만 OpenCL은 단순히 계산 용도로 사용 할 수 있도록 나온 프레임 워크입니다. 최근 뜨고있는 딥러닝, 물리 시뮬레이션, 주가분석 등 다양한 분야에서 사용되고 있으며, 2~3일 걸리는 일을 몇시간 단위로 줄여주고, 실시간으로 처리가 불가능하던 작업을 가능하게 만들어 주고 있습니다.
흔히 CUDA와 많이 비교되곤 하는데요, 성능상의 비교는 사실 무의미 하다고 할 수 있습니다. 애초에 CUDA는 NVIDIA 플랫폼에서 사용 하도록 만들어진 프레임워크이고, OpenCL은 Intel, AMD GPU에서 사용 하도록 만들어져 있기 때문입니다. 굳이 비교를 하자면 동일한 스펙의 GPU에서 테스트를 해보았을 때 CUDA가 약간 더 성능이 좋다는 의견이 대부분 입니다.
-OpenCL의 설치
NVIDIA용 OpenCL이 나와 있지만 NVIDIA 플랫폼 하에서는 CUDA를 사용 하는것이 맞으므로 포스팅 하지 않겠습니다(CUDA는 다음에 포스팅 예정입니다). 본 포스팅은 그래픽 카드가 없는 Intel 내장 GPU, AMD GPU를 대상으로 하고 있습니다.
Visual Studio 2015 community를 기준으로 작성하였으며 2013, 2008버전에서도 무리없이 잘 돌아가는 것을 확인하였습니다. Visual Studio가 설치 되어 있는 환경 에서 설치 하는 것을 추천 드립니다. 그래야 플러그인이 자동으로 삽입되기 때문입니다.
OpenCL을 사용하기위한 코드는 AMD와 Intel간의 차이가 없으며 GPU가 달려 있다고 하더라도 잠시 제거 하고 누구나 사용 할 수있는 Intel GPU로 설치를 소개하도록 하겠습니다.
OpenCL의 필요 사양은 다음과 같습니다.
https://software.intel.com/en-us/intel-opencl
거의 대부분의 CPU가 위 조건을 만족 할 것입니다. 다만, OpenCL 2.0을 사용 하기 위해서는 5세대 이상의 intel 내장 GPU가 있어야 합니다.
간혹 intel i시리즈 3세대 이하에서는 특별히 드라이버를 추가 설치 해야 할 경우가 있을 수 있습니다.(질문을 주시거나 opencl, 내장그래픽카드명 키워드로 구글링하면 쉽게 정보를 얻을 수 있습니다.)
필요 사양을 확인 하셨으면 이제 OpenCL SDK를 깔아 주시면 됩니다.
Intel Opencl Developer Zone : https://software.intel.com/en-us/intel-opencl
위 사이트의 Download 에 들어가시면 Windows용 SDK를 다운로드 받으 실 수 있습니다.
SDK 설치 시 OpenCL용 드라이버도 함께 설치됩니다.
여기서 주의할점! Widows update를 통해 내장그래픽 드라이버를 최신으로 유지하셔야 합니다. update를 하지 않을 시 속도가 느려지거나 특정 API가 실행이 되지 않는 등의 문제가 발생 할 수 있습니다.
드라이버와 SDK 설치를 마치셨으면 Visual Studio를 실행해 줍니다.
파일 -> 새로만들기 -> 프로젝트 로 가시면 다음과 같이 OpenCL 프로젝트 생성탭이 생긴 것을 볼 수 있습니다.
CodeBuilder Project for Windows를 선택해주시고 확인을 눌러줍니다.
Device Type을 CPU로 선택해주시고 Finish를 눌러줍니다.
위와 같이 복잡한 코드가 포함되어 있는 프로젝트가 생성됩니다.
제대로 설치가 되었는지 여부를 확인하기 위해 F5를 눌러 실행을 해보면 다음과 같은 콘솔창이 뜨는 것을 확인할 수 있습니다.
위 샘플 코드는 platform, device를 가져오고 program을 생성하는등 initialization 부분과 CL코드 실행부분의 에러 핸들링이 모두 되어 있기 때문에 에러 메세지 없이 위와 같은 결과가 나왔다면 올바르게 설치가 되었고, OpenCL 코딩을 할 준비가 되었다는 뜻으로 받아들이시면 됩니다.
다음 포스팅 주제는 간단한 구조를 가진 코드를 이용한 OpenCL Host 의 기본적인 구조, 간단한 덧셈 예제 입니다.