好的,我已经浏览过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上,工作项目的计算方式是否类似?
非常感谢,我一直到处寻找答案。
答案 0 :(得分:5)
好吧,首先,我的卡有1GB内存,为什么 我只允许256MB吗?
这是ATI驱动程序错误/限制AFAIK。我会查看我的5850,如果我可以复制。
第二,我不明白工作项目 维度部分,这是否意味着我可以 最多有128 * 3或128 ^ 3个工作项?
没有。这意味着,由于CL_DEVICE_MAX_WORK_ITEM_SIZES
为128 / 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,是否适用相同的计算?
不明白你在这里想要计算什么。