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

OpenCL 프로그램

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

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

댓글