首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矩阵运算上的CL_INVALID_WORKGROUP_SIZE获取

矩阵运算上的CL_INVALID_WORKGROUP_SIZE获取
EN

Stack Overflow用户
提问于 2016-02-17 05:47:07
回答 1查看 148关注 0票数 0

我正在传递一个矩阵作为全局内存,并处理本地内存中的每个向量(行)。传入的实际矩阵是100×2025年,但在内核中,我用零填充它,以利用2次运算的功率。我在每个工作项中处理向量的4个元素。

MAX_WORK_ITEM_SIZES:( 512,512) MAX_WORK_GROUP_SIZE: 512

代码语言:javascript
复制
size_t globalWorkSize[2] = { 100, 2048 };
size_t localWorkSize[1] = { 512 };

我也尝试过使localWorkSize 2维:{1,512},但我得到了相同的错误,在这个函数调用上的CL_INVALID_WORKGROUP_SIZE:

代码语言:javascript
复制
err = clEnqueueNDRangeKernel( openCLObjects.queue, openCLObjects.Normalize, 2, NULL,
                    globalWorkSize, localWorkSize, 0, NULL, NULL );

知道会出什么问题吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-17 14:53:51

设备属性:(设备的通用上限)

  • MAX_WORK_ITEM_SIZES:工作组中每个维度中的最大工作项。
  • MAX_WORK_GROUP_SIZE:工作组中的最大总工作项(各种尺寸的产品)。

内核属性:(编译的设备内核的特定限制)

  • CL_KERNEL_WORK_GROUP_SIZE:最大总工作组项目(所有尺寸的产品)

第一种是硬编码的每个设备,并可能受到限制的多少项目可以在完全SIMD模式。

第二个限制是每个内核,而是应该使用什么。这一个考虑到了更多的特定于您的代码。比如最大的私人记忆等等..。

你也符合第二项要求吗?

顺便说一句:无论如何,你都应该使用:

代码语言:javascript
复制
size_t globalWorkSize[2] = { 100, 2048 };
size_t localWorkSize[2] = { 1, 512 };
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35448847

复制
相关文章

相似问题

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