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

oma*_*ouk 6 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

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

Str*_*ger 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个工作项?

号这意味着你可以有最多128在一个昏暗的,因为CL_DEVICE_MAX_WORK_ITEM_SIZES128 / 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为什么这个错了?

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

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