|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
理解clEnqueueNDRangeKernel函数
opencl里由该函数控制生成多少核心来执行任务。例子如下:
- global_size=8;
- local_size=2;
- err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global_size, &local_size, 0, NULL, NULL);
复制代码
其中第3个参数的值是1,表示1维。2=2d,3=3d.
以前面笔记中add_numbers程序为例,任务是计算存在一维数组里的64个数的和。
用cpu计算时,程序如下:
- sum=0.0
- for (i=0;i<64;i++)
- {
- sum=sum+data[i]
- }
复制代码
也就是一个线程,依次处理全部64个数。
并行计算:
global_size=8,表示生成8个线程,把64个数分成8段。每个线程只管累加8个数。
local_size=2,表示每个线程在分好的每段8个数中,再局部以2个为一组,分成4组,进行相加。
如果是用cpu计算,local_size就能是1. cpu没那么多线程。
如果是2d的,global_size要定义成类似{8,8},这个例子也就是8x8=64个线程。合理不合理,要看GPU最多能有多少线程。
[ 本帖最后由 shirazbj 于 2012-12-29 18:35 编辑 ] |
|