본문 바로가기
멀티코어 프로그래밍/OpenCL

커널, 커맨드큐

by 기리의 개발로그 2022. 4. 19.

커널, 커맨드큐

커널(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
      • 커맨드 큐 생성시 지정 가능

 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

댓글