PCI-E 总线对GPU性能的影响

现在的显卡都是PCI-E 3.0的总线接口,我的机子是PCI-E x16,GPU性能会有多少损失呢?有资料说PCI-E容易成为瓶颈。能否简单解释一下?

LZ您好:

1:pci-e 3.0是其版本或者说速率的标识,x16是具体插槽的宽度(lane数量)的标识。

2:显卡是否能跑到pci-e 3.0的速率取决于和它配合的主板能否支持pci-e 3.0这个速率;
显卡能否跑到x16的模式,同样取决于显卡当前使用的插槽是否是x16的,显卡一般在x1,x2,x4,x8,x16下都可以运行。

3:如果您打算将一块pci-e 3.0 x16的显卡跑满其pci-e总线速度,那么需要同样支持pci-e 3.0 x16的主板予以配合。仅仅x16的插槽是不行的,您的主板的pci-e总线可能运行在pci-e 2.0或者1.1/1.0模式下,此时分别相当于pci-e 3.0的x8和x4速度。

“我的机子是PCI-E x16,GPU性能会有多少损失呢?”

pci-e总线的速度并不影响GPU的计算效能以及访问显存的性能。

如果您使用mapped memory作为显存使用,那么此时数据实际上是存储于主机端内存并使用pci-e总线传输的,此时pci-e 3.0 x16的总线可以尽量快一些。但具体和直接使用的显存的情况比较,pci-e 3.0 x16依然是慢得多的,以及这个是两种不同的使用方式,亦不好直接相比。

以及,如果要将和host数据传输的时间全部算进去考虑总的性能,亦无法给出具体会损失多少性能的评估,这个和您的具体实现有关。如果本身传输的数据不是很大,并且通过多stream予以掩盖,那么可能GPU一直是处于满负荷工作状态的,以及不同版本的pci-e下差别也不大。
如果是整个程序卡在了pci-e传输上,那么即使是pci-e 3.0 x16也是很慢的,甚至可能此时GPU经常处于空闲状态,还不如直接用CPU处理。

因此,这并无一个通行的评估。

我没有见到“有资料”的具体表示,仅简要说一下:

1:pci-e即便是最快的3.0 x16,其速度也不过800MB/S*16=12.8GB/S的速度,这个比中高端GPU的显存动辄100GB/S以上的带宽还是慢得多,以及也比中高端CPU的内存带宽20~40GB/S慢不少。

2:通过pci-e 传输数据还有其他的启动和通信开销,以及很长的延迟,比访问global memory的延迟更长。

3:如果某算法实现中,需要频繁通过pci-e总线传递数据,并且无法掩盖传输时间,那么将导致GPU大量时间处于闲置等待的状态,这将极大地影响总体的速度。因此,一般而言,请尽量减少device端和host端的数据传递,尽量将所有的数据都放在device端处理,以及如果是streamming形式提供的数据,请考虑开多个stream,以便计算和传输互相掩盖,此时建议使用tesla卡以达到最佳效果。

大致如此,您的问题回答完毕,祝您好运~

您讲的还是有一点点复杂的,不过我大概能听明白,意思是显卡性能发挥不仅仅跟PCI-E总线有关,只看这个总线接口不能对GPU性能损失作出客观的评估。
又去查了一下,讲的是GPU带宽比较大,而PCI_E带宽比较小,当要传输的数据量很大时,PCI-E容易成为瓶颈。跟您的分析是一致的。
谢谢

LZ您好:

简单地说,pci-e总线带宽较小,延迟较高,要尽量减少使用;具体影响情况如何,取决于您的具体应用和实现。

大致如此,祝您编码顺利~