驱动开发系列73 - clEnqueueNDRangeKernel实现
目录
一:API介绍
1. 参数解释:
2. 举例:
二:API实现步骤
1. 获取执行上下文:
2. 检查设备内存使用量:
3. 检查命令队列的有效性:
4. 检查kernel是否有效:
5. 检查命令队列是否允许kernel入队:
6. 检查kernel的所有参数是否已正确设置:
7. 检查工作组和工作项大小:
8. 计算kernel中所需的系数寄存器:
9. 检查kernel提交是否需要阻塞:
10: 对图像进行解压和de-twiddle:
11. 为kernel创建执行命令
12: 为kernel分配内存:
13: kernel执行:
一:API介绍
clEnqueueNDRangeKernel 是OpenCL 的核心API,用于在设备(GPU/CPU/FPGA等)上提交一个 kernel 来执行。它会将 kernel 放入命令队列,等待设备调度执行,并设置kernel被调用多少次(由 global_work_size决定),以及设置如何划线程块(local_work_size决定),支持1D/2D/3D数据。
cl_int clEnqueueNDRangeKernel(cl_command_queue command_queue, // 命令队列cl_kernel kernel, // 要执行的kernel对象cl_uint work_dim, // 维度:1D / 2D / 3Dconst size_t *global_work_offset,// 全局偏移(一般为NULL)const size_t *global_work_size, // 全局工作项数量const size_t *local_work_size, // 局部工作组大小cl_uint num_events_in_wait_list,