OpenCL,PyopenCL,为什么GTX970只有13个计算单元?如何找出并行数量
谁能告诉我为什么OpenCL告诉我,我的Nvidia Geforce GTX 970只有13个最大计算单位?另外,最大计算单位是否等于执行单位(EU)?因为在我的Iris 6100笔记本电脑上,device.max_compute_units是48,与图形卡的EU相同。OpenCL,PyopenCL,为什么GTX970只有13个计算单元?如何找出并行数量
import pyopencl as cl
platform = cl.get_platforms()[0]
device = platform.get_devices()[0] # Get the GPU ID
print device.max_compute_units
有人可以解释一下这个问题吗?我想知道在这里可以并行执行多少个进程。所以也许我在看错误的参数?
万分感谢...
您不能查询核心数量,只有数量的计算单元。英特尔集成GPU通常每个计算单元只有8个核心,而Nvidia每个计算单元的核心数量为192或128个。 Max_compute_units是计算单元的数量,应该可用于设备分区来查找(并限制)分区,但通常只有CPU支持设备分区。
可以并行执行多少个进程(工作项)取决于硬件的能力。对于AMD显卡来说,内核数量可能会多达40倍(这是计算单元数量的64倍)。例如,一个8位计算单元的AMD GPU可以有20k(8 * 64 * 40)个线程在线,更多的线程在单个队列中。
最大计算单元数量可以从驱动程序中更改,我已经看到集成的英特尔GPU尽管有12个测试版驱动程序,但只有8个计算单元,而且新的AMD GPU也获得了对预留一些计算单元音频计算在一些应用程序中,因此通用计算内核可能只会看到这些应用程序中剩余的计算单元。
如果Nvidia GPU只有13个计算单元,并且驱动程序启用了所有13个计算单元,则OpenCL可以使用它们的全部13个。 GTX970拥有比Intel Iris GPU更多的内核。
排队的OpenCL内核的工作组作为一个整体由计算单元执行,因此每个工作组的工作项与计算单元的相同内存与同一工作组中的其他工作项共享。但是一些供应商可以稍微扩展规则,更多的计算单元可以用于单个工作组的协作。如Intel igpu。
英特尔GPU具有执行单元(EU)。每个可以从7个SIMD线程(波/扭曲)中选择。英特尔驱动程序将这些映射到“计算单元”的OpenCL API,但它最多只是一个不精确的映射。工作组可以(并且通常)运行在多个EU上。因此,跨苹果架构比较并不是一个完全公平的苹果。请参阅https://software.intel.com/sites/default/files/managed/c5/9a/The-Compute-Architecture-of-Intel-Processor-Graphics-Gen9-v1d0.pdf中的5.3。 – Tim
什么是共享内存那么多欧盟呢?一片L3? –
共享本地内存由几个EU共享(我认为是24)。是的,它已经超过L3(参见第5.5节中的图,同一文件; SLM显示在L3盒中)。 – Tim
因为GPU有13个计算单元(采用NVIDIA术语的流式多处理器)。 – talonmies
[与工作组数量对应的计算单位数量]的可能重复(http://stackoverflow.com/questions/9326430/number-of-compute-units-corresponding-to-the-number-of-work-组) – talonmies