找回密码
 注册
查看: 2245|回复: 0

win下ati卡用gcc编opencl笔记七

[复制链接]
发表于 2012-12-29 17:56:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
理解clEnqueueNDRangeKernel函数

opencl里由该函数控制生成多少核心来执行任务。例子如下:

  1. global_size=8;
  2. local_size=2;
  3. err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global_size, &local_size, 0, NULL, NULL);
复制代码


其中第3个参数的值是1,表示1维。2=2d,3=3d.

以前面笔记中add_numbers程序为例,任务是计算存在一维数组里的64个数的和。

用cpu计算时,程序如下:

  1. sum=0.0
  2. for (i=0;i<64;i++)
  3. {
  4.   sum=sum+data[i]
  5. }
复制代码


也就是一个线程,依次处理全部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 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表