我正在传递一个矩阵作为全局内存,并处理本地内存中的每个向量(行)。传入的实际矩阵是100×2025年,但在内核中,我用零填充它,以利用2次运算的功率。我在每个工作项中处理向量的4个元素。
MAX_WORK_ITEM_SIZES:( 512,512) MAX_WORK_GROUP_SIZE: 512
size_t globalWorkSize[2] = { 100, 2048 };
size_t localWorkSize[1] = { 512 };我也尝试过使localWorkSize 2维:{1,512},但我得到了相同的错误,在这个函数调用上的CL_INVALID_WORKGROUP_SIZE:
err = clEnqueueNDRangeKernel( openCLObjects.queue, openCLObjects.Normalize, 2, NULL,
globalWorkSize, localWorkSize, 0, NULL, NULL );知道会出什么问题吗?
谢谢。
发布于 2016-02-17 14:53:51
设备属性:(设备的通用上限)
内核属性:(编译的设备内核的特定限制)
第一种是硬编码的每个设备,并可能受到限制的多少项目可以在完全SIMD模式。
第二个限制是每个内核,而是应该使用什么。这一个考虑到了更多的特定于您的代码。比如最大的私人记忆等等..。
你也符合第二项要求吗?
顺便说一句:无论如何,你都应该使用:
size_t globalWorkSize[2] = { 100, 2048 };
size_t localWorkSize[2] = { 1, 512 };https://stackoverflow.com/questions/35448847
复制相似问题