1、 OpenCL执行流程
2、 获取系统平台列表的函数:
Cl_int clGetPlatformIDs(cl_uint num_entries, cl_platform_id*platforms, cl_uint *num_platforms)
3、 获取平台的属性信息:
Cl_int clGetPlatformInfo(cl_platform_id platform, cl_platform_infoparam_name, size_t param_value_size, void *param_value, size_t*param_value_size_ret)
4、 获取设备列表:
Cl_int clGetDeviceIDs(cl_platform_id platform, cl_device_typedevice_type, cl_uint num_entried, cl_device_id *devices, cl_uint *num_devices)
5、 获取设备属性信息:
Cl_int clGetDeviceInfo(cl_device_id device, cl_device_infoparam_name, size_t param_value_size, void *param_value, size_t*param_value_size_ret)
6、 上下文为关联的设备、内存对象、命令队列、程序对象、内核对象提供一个容器。上下文是OpenCL应用的核心。对于上下文中关联的所有计算设备必须全都来自于同一平台,对于来自不同平台的OpenCL设备,需要为各个平台独立地创建上下文。
7、 创建上下文的函数:
Cl_context clCreateContext(const cl_context_properties *properties,cl_uint num_devices, const cl_device_id *devices, void (CL_CALLBACK*pfn_notify)(const char*, const void*, size_t, void*), void *user_data, cl_int*errcode_ret)
Cl_context clCreateContextFromType(const cl_context_properties*properties, cl_device_type device_type, void (CL_CALLBACK *pfn_notify)(constchar*, const void*, size_t, void*), void *user_data, cl_int *errcode_ret)
8、 获取上下文属性信息:
Cl_int clGetContextInfo(cl_context context, cl_context_infoparam_name, size_t param_value_size, void *param_value, size_t*param_value_size_ret)
9、 每条命令队列只能关联一个设备,如果要同时使用多个设备,则需要创建多个命令队列,每个命令队列关联到一个设备。
10、 命令队列中的命令,只能是主机发送给设备,而设备不能发送命令给主机。
11、 创建命令队列的函数:
Cl_command_queue clCreateCommandQueueWithProperties(cl_contextcontext, cl_device_id device, const cl_queue_properties *properties, cl_int*errcode_ret)
12、 获取命令队列属性信息:
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)
13、 对于内核对象而言,一个内核对象代表的就是一个在设备上执行的函数;而对于程序对象而言,一个程序对象就是内核的一个容器。
14、 一个程序对象包含了对所有指定cl源文件编译、构建后的一个二进制目标对象。而一个内核对象则表示其中某一个内核执行函数。
15、 创建程序对象的函数:
Cl_program clCreateProgramWithSource(cl_context context, cl_uintcount, const char **strings, const size_t *lengths, cl_int *errcode_ret)
Cl_program clCreateProgramWithBinary(cl_context context, cl_uintnum_devices, const cl_device_id *device_list, const size_t *lengths, constunsigned char **binaries, cl_int *binary_status, cl_int *errcode_ret)
16、 构建程序对象的函数:
Cl_int clBuildProgram(cl_program program, cl_uint num_devices, constcl_device_id *device_list, const char *options, void(CL_CALLBACK*pfn_notify)(cl_program program, void *user_data), void *user_data)
17、 编译程序对象的函数:
Cl_int clCompileProgram(cl_program program, cl_uint num_devices, constcl_device_id *device_list, const char *options, const_cl_program *input_header,const char **header_inlcude_name, void(CL_CALLBACK *pfn_notify)(cl_programprogram, void *user_data), void *user_data)
18、 链接程序对象的函数:
Cl_program clLinkProgram(cl_context context, cl_uint num_devices,const cl_device_id *device_list, const char *options, cl_uintnum_input_programs, const cl_program *input_programs, void(CL_CALLBACK*pfn_notify)cl_program(program, void *user_data), void *user_data, cl_int*errcode_ret)
19、 获取程序对象编译信息的函数:
Cl_int clGetProgramInfo(cl_program program, cl_program_infopram_name, size_t param_value_size, void *param_value, size_t*prame_value_size_ret)
20、 内核对象可以是一个通过命令队列发送到设备上执行的函数。
21、 创建内核对象的函数:
Cl_kernel clCreateKernel(cl_program program, const char *kernel_name,cl_int *errcode_ret)
Cl_int1 clCreateKernelIsInProgram(cl_program program, cl_uintnum_kernels, cl_kernel *kernels, cl_uint *num_kernels_ret)
22、 设置内核参数的函数:
Cl_int clSetKernelArg(cl_kernel kernel, cl_uint arg_index, size_targ_size, const void *arg_value)
Cl_int clSetKernelArgSVMPointer(cl_kernel kernel, cl_uint arg_index,const void *arg_value)
Cl_int clSetKernelExecInfo(cl_kernel kernel, cl_kernel_exec_infoprame_name, size_t prame_value_size, const void *param_value)
23、 获取内核对象的属性信息:
Cl_int clGetKernelInfo(cl_kernel kernel, cl_kernel_info prame_name,size_t prame_value_size, void *param_value, size_t *prame_value_size_ret)
Cl_int clGetKernelWorkGroupInfo(cl_kernel kernel, cl_device_iddevice, cl_kernel_work_group_info prame_name, size_t param_value_size, void*pram_value, size_t *param_value_size_ret)
24、 获取内核对象的参数信息:
Cl_int clGetKernelArgInfo(cl_kernel kernel, cl_uint arg_index,cl_kernel_arg_info param_name, size_t param_value_size, void *param_value,size_t *param_value_size_ret)
25、 内核对象加入队列的函数:
Cl_int clEnqueueNDRangeKernel(cl_command_queue command_queue,cl_kernel kernel, cl_uint work_dim, comst size_t *global_work_offset, constsize_t *global_work_size, const size_t *local_work_size, cl_uintnum_events_in_wait_list, const cl_event *event_wait_list, cl_event *event)