본문 바로가기

멀티코어 프로그래밍/OpenCL20

OpenCL 메모리 오브젝트(2) OpenCL 메모리 오브젝트 데이터 전달 3가지의 데이터 전달 방법 Initiate read/write data transfer Map/Unmap memory Copy data between memory objects 커맨드 큐에 enqueue 하는 방식으로 구현 버퍼 쓰기 cl\_int clEnqueueWriteBuffer(cl\_command\_queue command\_queue, cl\_mem buffer, cl\_bool blocking\_write, size\_t offset, size\_t size, const void \*ptr, cl\_uint num\_events\_in\_wait\_list, const cl\_event \*event\_wait\_list, cl\_event \*eve.. 2022. 4. 26.
OpenCL 메모리 오브젝트 OpenCL 메모리 오브젝트 메모리 모델(Memory Model) 글로벌 메모리(global memory) 모든 워크 그룹의 모든 워크 아이템이 접근 가능한 메모리 워크 아이템은 메모리의 임의의 위치에 읽기/쓰기 가능 글로벌 메모리 캐싱 디바이스의 캐시 메모리 유무에 따라 컨스탄트 메모리(constant memory) 커널의 실행동안 변하지 않는 값(상수)으로 남아 있는 글로벌 메모리 영역(읽기만 가능) 호스트가 할당하고 초기화 로컬 메모리(local memory) 워크 그룹별로 각각 존재하는 메모리 한 워크 그룹 내의 워크 아이템들만 접근 가능 워크 그룹 내의 워크 아이템들간 공유를 위해 사용 프라이빗 메모리(private memory) 워크 아이템별로 갖는 메모리 한 워크 아이템의 프라이빗 메모리는 .. 2022. 4. 25.
OpenCL 컨텍스트 OpenCL 컨텍스트 컨텍스트(Context) OpenCL 컨텍스트 커널이 실행되는 황경 동기화와 메모리 관리가 정의되는 도메인 호스트 프로그램이 API clCreateContext()를 이용하여 생성 포함하는 리소스 디바이스 호스트가 사용할 OpenCL 디바이스 목록 커널 OpenCL 디바이스에서 실행할 OpenCL 함수들 프로그램 오브젝트 프로그램 소스 및 실행 오브젝트 메모리 오브젝트 호스트와 OpenCL 디바이스에서 접근 가능한 메모리 오브젝트 집합 커널은 계산 과정에서 메모리 오브젝트 사용 cl_context clCreateContext(const cl_context_properties *properties, cl_uint num_devices, const cl_device_id *device,.. 2022. 4. 22.
OpenCL 디바이스 OpenCL 디바이스 디바이스(Device) cl_int clGetDeviceIDs(cl_platform_id platform, cl_device_type_type device_type, cl_uint num_entries, cl_device_id *devices, cl_uint *num_devices) OpenCL 계산 디바이스의 ID를 가져옴 platform clGetPlatformIDs()를 이용해 가져온 플랫폼 device_type 사용하고자 하는 OpenCL 계산 디바이스의 종류 ex) CL_DEVICE_TYPE_CPU, CL_DEVICE_TYPE_GPU, CL_DEVICE_TYPE_DEFAULT 등 num_entries devices num_devices 사용 예 cl_device_id dev.. 2022. 4. 21.
OpenCL 플랫폼 openCL 플랫폼 플랫폼 openCL 구현 시스템에 여러 벤더의 opencl 구현이 설치되어 있다면 플랫폼이 여러 개가 존재한다는 의미 ex) AMD opencl, intel opencl 플랫폼(Platform) cl_int clGetPlatformIDs(cl_uint num_entries, cl_platform_id *platforms, cl_uint *num_platforms) OpenCL 플랫폼의 ID를 가져옴 num_entires 요청하고자 하는 플랫폼의 수 platforms 존재하는 플랫폼들에 대한 포인터 num_platforms 존재하는 플랫폼의 수 리턴 값 cl_int 에러 정보(음수 값) CL_SUCCESS(0) 사용 예 err = clGetPlatformIDs(0, NULL, &num_.. 2022. 4. 20.
커널, 커맨드큐 커널, 커맨드큐 커널(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_va.. 2022. 4. 19.
728x90