OpenCL基础概念问题

landlordddd 2015-07-27 10:45:06
今天再看说明文档时,发现了以下内容:
The total number of work-items in a work-group is computed as local_work_size[0] * … * local_work_size[work_dim – 1]. The total number of work-items in the work-group must be less than or equal to the CL_KERNEL_WORK_GROUP_SIZE value specified in table 5.21 and the number of work-items specified in local_work_size[0], … local_work_size[work_dim – 1] must be less than or equal to the corresponding values specified by CL_DEVICE_MAX_WORK_ITEM_SIZES[0], ….CL_DEVICE_MAX_WORK_ITEM_SIZES[work_dim – 1].
这里涉及了两个部分的概念:
1.一个workgroup当中的workitem总数应该小于等于一个值,这个值是CL_KERNEL_WORK_GROUP_SIZE.
疑问:之前一直认为这个值是CL_DEVICE_MAX_WORK_GROUP_SIZE,也就是说原来理解的是比如我的GPU是R9 280X:
Device Type: CL_DEVICE_TYPE_GPU
Vendor ID: 1002h
Board name: AMD Radeon R9 M280X
Device Topology: PCI[ B#1, D#0, F#0 ]
Max compute units: 12
Max work items dimensions: 3
Max work items[0]: 256
Max work items[1]: 256
Max work items[2]: 256
Max work group size: 256
(以上信息来自clinfo.exe)
我以为一个workgroup当中的workitem总数不得超过此处的256.
然而,说明文档中用的却不是CL_DEVICE_MAX_WORK_GROUP_SIZE,而是CL_KERNEL_WORK_GROUP_SIZE,请问这两者的区别是什么?
2.对于CL_DEVICE_MAX_WORK_ITEM_SIZES,原以为是限制了整个NDRange的workitem总数,也就是说我的globalWorkSize我以为不得超过256(所以之前一旦需要处理数据量超出范围我就不停的queue新的kernel=_=!)
然而说明文档中指出CL_DEVICE_MAX_WORK_ITEM_SIZES实际上限制的是local_work_size的大小,也就是我的workgroup每一维度都必须小于CL_DEVICE_MAX_WORK_ITEM_SIZES(这里的256)就可以了。
现在问题来了:对于global_work_size是没有限制的吗?我可以调用任意多个workgroup吗(只要workgroupsize在合理范围内)?

OpenCL初学者,求各路大神指点迷津啊。
先谢过
...全文
1392 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
landlordddd 2015-08-19
  • 打赏
  • 举报
回复
引用 1 楼 fronteer 的回复:
别想那么多, globalWorkSize 基本不受限制; localWorkSize 不能超过 256, 并且必须是64 的整数倍
谢谢,明白了
fronteer 2015-08-17
  • 打赏
  • 举报
回复
别想那么多, globalWorkSize 基本不受限制; localWorkSize 不能超过 256, 并且必须是64 的整数倍

602

社区成员

发帖
与我相关
我的任务
社区描述
异构开发技术
社区管理员
  • OpenCL和异构编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧