OpneCL 프로그램
프로그램과 커널
프로그램 오브젝트
- 프로그램 소스 또는 바이너리
- 각 디바이스별 실행 코드
- 커널 오브젝트의 리스트
커널 오브젝트
- 디바이스에서 실행되는 하나의 함수
- 프로그램 내의 하나의 커널에 해당
- __kernel이 사용된 함수
- 커널의 파라미터 정보
- 호스트 프로그램이 지정한 실제 값을 저장
- 기타 커널 정보
- 커널명, 메모리 사용량, 속성 정보 등
프로그램(Program)
cl_program clCreateProgramWithSource(cl_context context, cl_uint count, const char **strings, const size_t *lengths, cl_int *errocode_ret)
소스코드로부터 프로그램을 생성
count
- 만들고자 하는 프로그램의 개수
strings
- 소스 코드들에 대한 스트링
lengths
- 각 소스 코드의 길이
디바이스별 빌드
호스트 API가 자동으로 빌드
- 컨텍스트 내의 모든 디바이스별로 커널 빌드
- 프로그램 오브젝트에 함께 포함됨
다른 디바이스에 같은 코드 실행
- 같은 커널 소스 코드를 실행한다는 의미
- 실행 코드는 디바이스별로 다름
cl_int clBuildProgram(cl_program program, cl_uint num_devices, const cl_device_id *device_list, const char *options, void (CL_CALLBACK *pfn_notify) (cl_program program, void *user_data), void *user_data)
- 생생된 프로그램을 빌드(전처리 + 컴파일 및 링크)
- options
- 빌드 옵션(-DMACRO=1)
- pfn_notify
- 프로그램 빌드가 완료되었을 때 호출 될 callback 함수
- pfn_notify가 NULL인 경우 cl_BuildProgram은 블라킹 방식으로 작동
- 사용 예
- const char options[] = "-cl-std=CL1.1 -cl-mad-enable -Werror";
- clBuildProgram(program, 1, &device, options, NULL, NULL);
cl_int clGetProgramInfo(cl_program program, cl_program_info param_name, size_t param_value_size, void *param_value, size_t *param_value_size_ret)
- 프로그램 오브젝트의 정보를 얻어 옴
cl_int clGetProgramBuildInfo(cl_program program, cl_device_id device, cl_program_build_info param_name, size_t param_value_size, void *param_value, size_t *param_value_size_ret)
- 프로그램 오브젝트의 각 디바이스별 빌드 정보를 얻어 옴
반응형
'멀티코어 프로그래밍 > OpenCL' 카테고리의 다른 글
OpenCL 플랫폼 (10) | 2022.04.20 |
---|---|
커널, 커맨드큐 (9) | 2022.04.19 |
OpenCL Architecture(6) (18) | 2022.04.15 |
OpenCL Architecture(5) (19) | 2022.04.14 |
OpenCL Architecture(4) (42) | 2022.04.13 |
댓글