커널, 커맨드큐
커널(Kernel)
cl_kernel clCreateKernel(cl_program program, const char *kernel_name, cl_int *errcode_ret)
- 프로그램을 토대로 커널 오브젝트를 생성
- program
- 프로그램 오브젝트
- kernel_name
- 생성하고자 하는 커널의 이름
- 사용 예
- char kernel_name[] = "convolve";
- kernel = clCreateKernel(program, kernel_name, &err);
cl_int clGetKernelInfo(cl_kernel kernel, cl_kernel_info param_name, size_t param_value_size, void *param_value, size_t *param_value_size_ret)
- kernel의 param_name의 정보를 얻어 옴
cl_int clSetKernelArg(cl_kernel kernel, cl_uint arg_index, size_t arg_size, const void *arg_value)
- kernel의 argument 설정
- kernel
- 커널 오브젝트
- arg_index
- 어떤(몇 번째) 인자인지
- arg_size
- 인자의 크기
- arg_value
- 인자의 값이 들어있는 포인터
- 사용 예
- err = clSetKernelArg(kernel, 0, sizeof(cl_mem), *mem_A);
커맨드 큐(Command Queue)
호스트가 디바이스별로 생성
- 하나의 디바이스에 여러 개의 커맨드 큐 연결 가능
호스트가 디바이스에서 실행될 커맨드를 enqueue
커맨드의 종류
- 커널 실행 커맨드
- 메모리 커맨드
- 데이터 이동, 호스트 메모리에 메모리 오브젝트의 map/unmap
- 동기화 커맨드
커맨드 실행 모드
- In-order execution
- 기본 실행 모드
- Out-of-order execution
- 커맨드 큐 생성시 지정 가능
- In-order execution
cl_command_queue clCreateCommandQueue(cl_context context, cl_device_id device, cl_command_queue_properties properties, cl_int *errcode_ret)
- 커맨드 큐의 생성
- properties
- 사용하고자 하는 커맨드 큐의 성질 결정
- CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE
- CL_QUEUE_PROFILING_ENABLE
- bitfield(각 비트 값으로 설정)
- 사용하고자 하는 커맨드 큐의 성질 결정
- 사용 예
- clCreateCommandQueue(context, device, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &err)
cl_int clGetCommandQueueInfo(cl_command_queue command_queue, cl_command_queue_info param_name, size_t param_value_size void *param_value, size_t *param_value_size_ret)
- command_queue의 param_name 정보를 얻어 옴
반응형
'멀티코어 프로그래밍 > OpenCL' 카테고리의 다른 글
OpenCL 디바이스 (9) | 2022.04.21 |
---|---|
OpenCL 플랫폼 (10) | 2022.04.20 |
OpenCL 프로그램 (7) | 2022.04.18 |
OpenCL Architecture(6) (18) | 2022.04.15 |
OpenCL Architecture(5) (19) | 2022.04.14 |
댓글