6

好的,我已经阅读了大部分关于 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 时,东西只在一个核心上处理,我尝试做多个队列并排队几个条目,但仍然只在一个核心上处理,我使用了global_work_size 为 128*128*128*8,用于一个简单的写入程序,其中每个工作项将自己的全局 ID 写入缓冲区,而我只得到零。

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

非常感谢,我真的到处寻找答案。

4

1 回答 1

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_SIZESis 128 / 128 / 128。因为CL_DEVICE_MAX_WORK_GROUP_SIZE是 128,你可以有,例如:work_group_size(128, 1, 1)or work_group_size(1, 128, 1)or work_group_size(64, 1, 2), or work_group_size(8, 4, 4)etc,只要每个 dim 的乘积是<= 128它就可以了。

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

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

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

于 2010-07-12T23:00:59.240 回答