首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >OpenCL全局/本地工作大小选择

OpenCL全局/本地工作大小选择
EN

Stack Overflow用户
提问于 2016-12-21 22:12:55
回答 1查看 1.5K关注 0票数 1

我正在学习使用opencl。现在我的任务很简单,把一个大数组复制到另一个数组。让我们假设a301300对b301300。这只是一个测试,让我了解什么是全球工作规模和本地工作规模。并利用支持向量机将float8向量阵传递给核函数。

代码语言:javascript
代码运行次数:0
运行
复制
__global float8* dts,
__global float8* dts_from_file

1.在我的测试用例中,我似乎必须选择全局工作大小>数组大小。

代码语言:javascript
代码运行次数:0
运行
复制
size_t globalWorkSize[3] = { 128, 128, 256 };

(128*128*256*8)>301*300*300。否则,我将得到截断输出。我是对的,还是只是对全球工作规模的定义感到困惑?FYI

代码语言:javascript
代码运行次数:0
运行
复制
    CL_DEVICE_ADDRESS_BITS=64
    CL_DEVICE_MAX_WORK_GROUP_SIZE=256
    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS=3
    CL_DEVICE_MAX_WORK_ITEM_SIZES[0,1,2]=256, 256, 256

2.是由CL_KERNEL_WORK_GROUP_SIZE=256限制的本地工作大小吗?

代码语言:javascript
代码运行次数:0
运行
复制
size_t localWorkSize[3] = { 4,8,8 };

如果我将4改为更大的值,就会出现clEnqueueNDRangeKernel错误CL_INVALID_WORK_GROUP_SIZE,因为4*8*8=256?

3.多个设备的全局/本地工作大小(CPU+GPU)如何,是否需要为每个设备指定不同的工作大小?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-12-22 09:30:32

本地工作的总大小不能超过CL_DEVICE_MAX_WORK_GROUP_SIZE,而且每一个都不能超过CL_DEVICE_MAX_WORK_ITEM_SIZES。在您的情况下,使用本地工作大小{4、8、8}是可以的。

全局工作大小中的每一个都必须是本地工作大小的倍数。当内核只处理一段数据时,必须设置大于数组大小的全局工作大小,并在内核中添加如下检查

代码语言:javascript
代码运行次数:0
运行
复制
if (get_global_id(0) < array_size_x)    {   ...   }

每个项目都可以处理更多的数据,您必须在不同的情况下进行不同的检查。

每个设备都有不同的工作大小,它们必须独立设置。让不同的设备同时运行同一内核并不是一件容易的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41272795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档