OpenCL中的工作项,工作组和命令队列组织和内存限制

时间:2010-07-12 22:14:10

标签: opencl

好的,我已经浏览过OpenCL的大部分ati和nvidia指南,有些东西我只是想确定,有些需要澄清。文档中的任何内容都没有明确的答案。

现在我有一个radeon 4650,现在正在查询我的设备,我得到了

  CL_DEVICE_MAX_COMPUTE_UNITS:  8
  CL_DEVICE_ADDRESS_BITS:  32
  CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: 3
  CL_DEVICE_MAX_WORK_ITEM_SIZES: 128 / 128 / 128 
  CL_DEVICE_MAX_WORK_GROUP_SIZE: 128
  CL_DEVICE_MAX_MEM_ALLOC_SIZE:  256 MByte
  CL_DEVICE_GLOBAL_MEM_SIZE:  256 MByte
好吧,首先,我的卡有1GB内存,为什么我只允许256MB?

第二部分我不理解工作项维度部分,这是否意味着我最多可以拥有128 * 3或128 ^ 3个工作项?

当我在运行查询之前计算出这个数据时,我得到了8个内核* 16个流处理器* 4个工作项= 512为什么这个错了?

我的inte core 2 duo CPU也有相同的3维工作项目,是否适用相同的计算?

至于命令队列,当我尝试使用OpenCL访问我的核心二重CPU作为设备时,只在一个核心上处理了东西,我尝试了多个队列并排队几个条目,但仍然只在一个核心处理,我使用了一个128 * 128 * 128 * 8的global_work_size作为一个简单的写程序,其中每个工作项将自己的global-id写入缓冲区,我只得到零。

那么Nvidia卡呢?在具有32个cuda核心的Nvidia 9500 GT上,工作项目的计算方式是否类似?

非常感谢,我一直到处寻找答案。

1 个答案:

答案 0 :(得分:5)

  好吧,首先,我的卡有1GB内存,为什么   我只允许256MB吗?

这是ATI驱动程序错误/限制AFAIK。我会查看我的5850,如果我可以复制。

http://devforums.amd.com/devforum/messageview.cfm?catid=390&threadid=124142&messid=1069111&parentid=0&FTVAR_FORUMVIEWTMP=Branch

  

第二,我不明白工作项目   维度部分,这是否意味着我可以   最多有128 * 3或128 ^ 3个工作项?

没有。这意味着,由于CL_DEVICE_MAX_WORK_ITEM_SIZES128 / 128 / 128,因此您可以在一个暗淡区域拥有最多128个。由于CL_DEVICE_MAX_WORK_GROUP_SIZE为128,您可以拥有,例如:work_group_size(128, 1, 1)work_group_size(1, 128, 1)work_group_size(64, 1, 2),或work_group_size(8, 4, 4)等,只要每个暗淡的产品是<= 128没关系。

  

当我跑步之前我计算了这个   查询,我有8个核心* 16流   处理器* 4个工作项= 512为什么   这错了?

     

我也有同样的3维度   我的inte core 2 duo的工作项目   CPU,是否适用相同的计算?

不明白你在这里想要计算什么。