2.2_集成GPU

2.2 集成GPU

在这里,术语“集成”的意思是“集成到芯片组”。如图2-8所示,先前只属于CPU的内存池现在可以被集成到芯片组的CPU和GPU所共享。例如,英伟达芯片组中支持CUDA的GPU,包括MCP79(适用于笔记本电脑和上网本)和MCP89等。MCP89将是制造的最新、最好的可支持CUDA的x86芯片组,除了集成了三级缓存,它拥有3倍数量于MCP7x芯片组的流处理器簇。


图2-8 集成GPU

CUDA中用于映射锁页内存(mapped pinned memory)的API,在集成GPU上具有特殊的意义。这些API把分配的主机内存映射到CUDA内核的地址空间,使它们能够直接被访问。这也被称为“零复制”,因为内存是共享的,复制操作不需要通过总线。事实上,在传输受限型工作量上,一个集成的GPU可以超过一个更大的独立GPU。

“写结合”(write-combined,WC)内存的分配在集成GPU上也具有重要意义。CPU的缓存侦测行为在访问这种内存时是被禁止的,这样可以提高访问内存过程中GPU的性能。当然,如果CPU从“写结合”内存中读取数据,通常的WC内存应用的性能会有损失。

集成GPU与独立GPU不是相互排斥的。MCP7x和MCP89芯片组提供了PCIe连接接口(图2-9)。在这样的系统中,CUDA更倾向于在独立GPU上运行,因为大多数的CUDA应用程序将在独立GPU上部署。例如,在单个GPU上运行时,一个CUDA应用程序会自动选择在独立GPU上运行。


图2-9 带独立GPU的集成GPU

CUDA应用程序可以通过检查CUDADeviceProp.integrated的值或者通过传递CU_DEVICE_ATTRIBUTE_INTEGRATED到

cuDeviceGetAttribute()函数来查询一个GPU是否是集成GPU。

对于CUDA而言,使用集成GPU并不稀奇,上百万的计算机在主板上集成了支持CUDA的GPU。但它们会引起大家的好奇心。并且在短短几年内,它们将会变得落伍,因为英伟达已经退出了x86芯片组市场。据传言,英伟达已经宣布他们的出货重点放在集成了支持CUDA的GPU与ARM CPU的片上系统(systems on a chip,SOC)上。可以判定,零复制优化将在那些系统上工作得很好。