OpenCL的NDRange中globalSize,globalSize参数理解及调试笔记
来源:互联网 发布:电子书包的软件 编辑:程序博客网 时间:2024/04/30 07:33
先上源码:
const size_t globalSize[2] = {6,4} ; const size_t localSize[2] = {3,2} ; const size_t offset[2] = {3,5} ; size_t dim = 2 ; errNum = clEnqueueNDRangeKernel(commandQueue, kernel, dim, offset, globalSize, localSize, 0, NULL, NULL);
kernel是:
kernel void id_check(global float *output){int global_id_0 = get_global_id(0);int global_id_1 = get_global_id(1);printf("STEP_GLOBAL_ID global_id_0:[%d] global_id_1:[%d]\n",global_id_0,global_id_1);int global_size_0 = get_global_size(0);int global_size_1 = get_global_size(1);printf("STEP_GLOBAL_SIZE global_size_0:[%d] global_size_1:[%d]\n",global_size_0,global_size_1);int offset_0 = get_global_offset(0);int offset_1 = get_global_offset(1);printf("STEP_GLOBAL_OFFSET offset_0:[%d] offset_1:[%d]\n",offset_0,offset_1);int local_id_0 = get_local_id(0);int local_id_1 = get_local_id(1);printf("STEP_GLOBAL_LOCAL local_id_0:[%d] local_id_1:[%d]\n",local_id_0,local_id_1);int index_0 = global_id_0 - offset_0 ;int index_1 = global_id_1 - offset_1 ;int index = index_1 * global_size_0 + index_0 ;printf("STEP_GLOBAL_INDEX index_0:[%d] index_1:[%d] index:[%d]\n",index_0,index_1,index);float f = global_id_0 * 10.0f + global_id_1 * 1.0f ;f += local_id_0 * 0.1f + local_id_1 * 0.01f ;output[index] = f ;printf("STEP_GLOBAL_FINAL f:[%f] output:[%f]\n",f,output[index]);}
分析结果:
总共的计算次数为: 6*4 = 24 ;
local size 是 global size 的一个 ,虚拟区域分区。 get_global_id(0) = get_group_id(0) * get_group_size(0) + get_local_id(0) + offset ;
kernel中的打印,绝大多数 pc上有,但是 可能有的板子没有这种功能。
offset 是 global id 的偏移, 可能偏移大于 size ,如果大于的话,直接向后偏移即可,size还是不变。具体可以调试本代码。
1 0
- OpenCL的NDRange中globalSize,globalSize参数理解及调试笔记
- OpenCL 学习step by step (5) 使用二维NDRange workgroup
- [opencl笔记]2017年08月30日 opencl的调试
- 遇到的OpenCL kernel文件中参数的限制情况
- OpenCL的初步基本理解
- OpenCL中设置内核参数整理
- OpenCL中设置内核参数整理
- openCl-work-item的并行的理解
- OpenCL的学习---计算直方图的理解
- OPencl 笔记
- OpenCL笔记
- OpenCL笔记
- opencl笔记
- OpenCL 笔记
- OpenCL 学习笔记 - OpenCL C built-in functions - OpenCL C的内建函数
- IOCP的笔记及理解
- OpenCL: OpenCL的shader
- linux 中C语言便于调试的宏定义编写及 __FILE__,__FUNCTION__, __LINE__参数使用
- JDK1.7,1.8特性一览
- Unity3D基于CG的Shader基础(二)
- iOS 网络错误view封装
- javascript (function(){})()
- Project 2013设置节假日日历
- OpenCL的NDRange中globalSize,globalSize参数理解及调试笔记
- 基础练习 矩阵乘法
- 数据库-数据库、基本表、视图的创建,触发器的使用
- 比特币中的SHA256是何方神圣?
- 使用itext创建PDF文档-导出大表格-每页显示标题-项目实战
- Tips: oracle 监听和tnsnames 模板
- Android自定义样式的对话框
- Nginx 反向代理、负载均衡、页面缓存、URL重写以及读写分离
- Spring Boot JPA-Hibernate