OpenCL이란? Open Computing Language의 줄임말.
"a framework suited for parallel programming of heterogeneous systems" 라고 정의합니다.
여기서 말하는 framework는 OpenCL의 C 언어 뿐만 아니라 컴파일러 그리고 runtime 환경 ? 라이브러리를 포함합니다.
그리고 heterogeneous systems은 이질 시스템,
적어도 두개 이상의 서로 다른 데이터 베이스 관리로 구축된 데이터 베이스 시스템라고 네이버 선생님이 설명해놓았군요.
여기서는 그런 의미보다는 CPU + GPU 하드웨어를 동시에 활용하는 시스템의 의미도 포함하는 것 같습니다.
OpenCL 프로그래밍은 Host code와 Device code를 각각 작성하여합니다.
- Device는 OpenCL의 C, 즉 *.cl 확장자로 코딩. Kernel로 사용됩니다.
- Host는 일반적인 C/C++ 코딩(*.cpp) 입니다.
1. Kernel 코드
__kernel void hello(__global char * string)
함수 지시자 : __kernel
주소 지시자 : __global
__kernel은 Device에서 실행되고 Host에서 호출
Task Call : clEnqueueTask()
Data-parallel call : clEnqueueNDRangeKernel()
2. Host Code
: 호스트 프로그래밍 일반적인 순서는 아래와 같습니다.
- Get a list of available platforms
- Select device
- Create Context
- Create command queue
- Create memory objects
- Read kernel file
- Create program object
- Compile kernel
- Create kernel object
- Set kernel arguments
- Execute kernel (Enqueue task) ← hello() kernel function is called here
- Read memory object
- Free objects
출저 : https://www.fixstars.com/en/opencl/book/OpenCLProgrammingBook/basic-program-flow/