好的,我已经阅读了大部分关于 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 上,工作项的计算是否类似?
非常感谢,我真的到处寻找答案。