谁能告诉我为什么OpenCL告诉我我的Nvidia Geforce GTX 970只有13个最大计算单位?此外,最大计算单位是否等于执行单位(EUs)?因为在我的Iris 6100笔记本电脑上,device.max_compute_units是48,这和图形卡的EUs是一样的。
import pyopencl as cl
platform = cl.get_platforms()[0]
device = platform.get_devices()[0] # Get the GPU ID
print device.max_compute_units
有人能说明一下这个问题吗?我正在努力弄清楚,在这里可以并行执行多少个进程。所以也许我看错了参数?
千谢..。
发布于 2017-05-07 03:52:36
您不能查询内核的数量,只能查询计算单元的数量。英特尔集成GPU一般每个计算单元只有8个核心,而Nvidia每个计算单元有192或128个核心。Max_compute_units是计算单元的数量,应该可以在设备分区中使用,以查找(并限制)分区,但通常只支持CPU进行设备分区。
可以并行执行多少进程(工作项)取决于硬件的能力。对于AMD显卡,可以有多达40倍的核心数量(这是64倍的计算单位数量)。例如,一个8计算单元AMD GPU可以在运行中有20k(8 * 64 * 40)线程,并且在一个队列中有更多的线程。
最大计算单元数可以从驱动程序中改变,我已经看到一个集成的Intel GPU显示了8台计算单元,尽管在beta驱动程序中只有12台,而且新的AMD GPU获得了在某些应用程序中保留一些计算单元用于音频计算的支持,所以通用的计算内核可能只看到这些应用程序中剩下的计算单元。
如果一个Nvidia GPU只有13个计算单元,并且驱动程序启用所有13个计算单元,那么OpenCL可以使用它们中的所有13个。GTX970拥有比英特尔Iris GPU更多的核心。
排队的OpenCL内核的工作组是由计算单元作为一个整体执行的,因此每个工作组的工作项与同一工作组中的其他工作项共享计算单元的相同内存。但是,一些供应商可以稍微扩展规则,并且可以为单个工作组协作使用更多的Compute单元。例如英特尔igpu。
https://stackoverflow.com/questions/43830023
复制