美文网首页
GPU前沿:NVLink与PCIe的对比学习

GPU前沿:NVLink与PCIe的对比学习

作者: CPinging | 来源:发表于2021-01-26 16:24 被阅读0次

    本文主要是对《Pump Up the Volume: Processing Large Data on GPUs with Fast Interconnects》的阅读,同时记录了自己的一些想法。

    本文针对GPU的NVLink进行进一步研究,阅读下来感觉非常前沿,能学习很多insight。所以我将本文总结出来,加深自己的理解,也方便读者阅读。

    本文为SIGMOD’20的文章,感兴趣的同学可以下载来自行阅读。

    一、前沿与背景

    1 背景

    贡献:

    • 1 分析NVLink 2.0并理解其性能以及新特性;
    • 2 对接口的传输速度进行实验探究,并采取最后的数据传输策略;
    • 3 提出新的方案使得GPU-CPU能更好的协同工作;
    • 4 测试;

    背景部分需要我们了解哈希join算法,文章中使用的无分区的哈希合并,由于该算法能够很好的测试GPU与CPU的性能,所以全文以该算法贯穿,并在NVLink2.0的基础上对该算法进行重设计,使其更高效。

    2、PCIe-3.0知识

    PCIe具有两种数据传输的原语,memory-mapped I/O(MMIO)以及DMA。其中MMIO将GPU的显存与GPU地址空间相连。CPU使用load和store指令对数据进行访问。

    DMA是的GPU能直接访问CPU的内存,而与MMIO的不同点是DMA能直接访问pinned memory。(在我理解来,就是普通的malloc与cudamalloc的区别,respectively)

    cudaMemcpyAsync拷贝non-pinned内存通过MMIO,对pinned内存使用DMA的方案。Unified Virtual Addressing使用DMA进行zero-copy,对pinned memory进行访问。

    针对Unified Memory,若GPU中没有该数据,操作系统会收到缺页,并把数据从CPU转移到GPU。

    3、NVLink 2.0

    借用https://blog.csdn.net/BtB5e6Nsu1g511Eg5XEg/article/details/86762135的一些知识:

    NVLink控制器由3层组成,即物理层(PHY)、数据链路层(DL)以及交易层(TL)。下图展示了P100 NVLink 1.0的各层和链路。

    • P100搭载的NVLink 1.0,每个P100有4个NVLink通道,每个拥有40GB/s的双向带宽,每个P100可以最大达到160GB/s带宽。

    • V100搭载的NVLink 2.0,每个V100增加了50%的NVLink通道达到6个,信号速度提升28%使得每个通道达到50G的双向带宽,因而每个V100可以最大达到300GB/s的带宽。

    Nvidia Volta GPUs以及IBM POWER9 CPUs支持NVLink2.0。其中一个CPU可以连接6个GPU。每一个方向最高有25GB/s的带宽。文中说,2个GPU就能把CPU的带宽吃满,再多一个GPU就会使得每个GPU带宽降三分之一。

    地址转换也有所区别。NVLink处理单元通过遍历CPU的页表来提供地址转换。此外,CPU能将GPU的cache同样保存到L1中,GPU一个计算单元的cache保存到L1 cache中,其他的计算单元都可以看到。

    与1.0版本相比,NVLink2.0有更快的带宽,有cache一致性,以及更有效的地址转换。

    文章提到,AMD的 Infinity Fabric 以及 Intel CXL 也有类似的特性,但是他们目前商业还不对GPU开源使用。

    二、不同连接性能测试

    本章节针对不同的连接配置进行了性能的测试,配置与实验结果如下:

    • 性能测试

    不同测试路径示意图:

    We compare NVLink 2.0’s ➁ performance to GPU (PCI-e 3.0 ➀) and CPU interconnects (Intel Xeon Ultra Path Interconnect (UPI) ➂, IBM POWER9 X-Bus ➃), CPU memory (Intel Xeon ➄, IBM POWER9 ➅), and GPU memory (Nvidia V100➆).

    英文列出来吧就不翻译了。

    4-byte read accesses on 1 GiB of data

    实验结果表明NVLink2.0连续读写比PCIe3.0快5倍,比其他两个快2倍。随机访问更快,分别为14倍以及35%。

    图b是与cpu内存访问性能的对比,图c是与GPU内存访问性能的对比。

    • Cache一致性

    GPU可以直接访问CPU内存的任意位置,不需要Pinned memory。分配Pageable memory比pinned memory更快;

    PCIe的缺点有:1 数据一致性必须在软件中管理,而不是在硬件中。程序员或者手动刷新缓存,或者操作系统迁移页面;2 系统级别的原子性无法保障;

    文中提到,由于PCIe延迟太高,无法很好的应用细粒度的cahce一致性。(具体原因待解释)

    • 在无分区哈希场景下NVLink的好处

    首先,由于NVLink 2.0的高顺序访问带宽,我们能够将访问到数据。通过将哈希表存储在GPU内存中,我们保留了GPU相对于CPU连接的性能优势。其次,我们利用NVLink 2.0的低延迟和高随机访问带宽,为任意数据量提供构建端可伸缩性。因此,我们能够将哈希表从GPU内存溢出到CPU内存。第三,我们利用缓存一致性和nvlink 2.0的全系统原子来共享CPU和GPU之间的哈希表,并扩展数据处理规模。

    三、CPU与GPU之间数据的传输效率

    数据在CPU与GPU之间必须要有传输的操作,而这个过程设计两种模式,Pull模式与Push模式。其中Push为CPU推到GPU中,而Pull为GPU向CPU拉取指定的数据。

    下图共有8种方案,push一般为粗粒度,Pull粒度很细,达到page或者byte粒度。

    1 Push

    • Pageable Copy

    通过cudaMemcpyAsync发起,然后将数据块直接以pageable内存的形式转移。

    • Pinned memory

    使用DMA对Pinned memory进行访问。该过程使用copy engine,而不是像Pageable memory一样使用MMIO用CPU线程copy。所以很快。

    • Staged Copy

    大量数据使用Pinned memory会加重管理负担,且耗费大量资源。于是Staged Copy使用Pinned staging buffer。首先将Pageable数据块注意到pinned buffer中,然后再copy。

    • Dynamic Pinning

    在传输前将特定的Pageable页面转换为pinned内存。

    • Unified Memory Prefetch

    如果知道要访问什么内容,就可以从CPU预取过来。

    2 Pull

    哈希访问随机性很大,所以使用Push进行数据块访问性能并不好。

    • Unified memory migration

    使用操作系统级别的页迁移方案,4kb。

    • zero-copy

    使用Unified Virtual Address对数据进行byte粒度的访问,但是必须为Pinned memory,且为硬件主导,不涉及软件或操作系统。

    • Coherence

    NVLink2.0的新特性。使用硬件地址转换,GPU可以直接访问CPU的地址,与Unified memory类似,但是是byte粒度(Unified memory migration为page
    粒度),且与zero-copy相比,不需要pinned memory,直接访问Pageable内存。

    三、HASH JOINS算法如何在NVLink2.0下扩展

    HASH JOINS算法包括两个阶段,建立+探测。而建立阶段需要大量的随机访问,所以对延迟的要求很高,而探测阶段需要很高的带宽。所以也呼应了这个算法能很好的对设备连接性能进行测试。

    后面的内容更偏向一个新型方案的设计,我们主要关注NVLink部分,所以后续内容不展开。

    四、Insight

    全文在使用NVLink+新方案并经过实验测试后,得到了一些insight,这里记录下来:

    • 1 GPU在使用了NVLink2.0后能够非常快的访问CPU内存。所以使得从CPU中load数据成为可能;

    • 2 GPU访问不再是一个严重的问题(快了PCIe3.0有6倍),之后说不定瓶颈就在计算以及显存容量上;

    • 3 GPU内部访存的速度依然是NVLink2.0的6.5倍以上,所以最好还是将数据放GPU中;

    • 4 使用cache一致性连接方案使得CPU与GPU的整体性能比较高;

    • 5 cache一致性使得pinned内存不在需要,内存管理变得简单。

    五、总结

    NVLink不得不说,是个好东西。它从最基本的出发点解决转移瓶颈的问题,能够很好的加速当今应用。然而当前该设备还没铺开,似乎常用的服务器还是使用PCIe,但是未来的几年后,随着新设备的普及,我认为下面的研究方向就要改变一下,不能一直盯着如何解决PCIe带宽不足这个点,还是需要提出像本文一样,在更快速的NVLink基础上,新的应用若转移不是瓶颈,那么后期新的应用应该怎么发展。

    相关文章

      网友评论

          本文标题:GPU前沿:NVLink与PCIe的对比学习

          本文链接:https://www.haomeiwen.com/subject/dbpizktx.html