mysql yuancheng nv_GPU前沿:NVLink与PCIe的对比学习
本文主要是对《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
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基础上,新的应用若转移不是瓶颈,那么后期新的应用应该怎么发展。
mysql yuancheng nv_GPU前沿:NVLink与PCIe的对比学习相关推荐
- MySQL启动、连接,退出,关闭命令学习
MySQL启动.连接,退出,关闭命令学习 1,启动MySQL服务 net start mysql80 2,连接MySQL mysql -h127.0.0.1 -u用户名 -p密码 回车,出现下面一堆东 ...
- MySQL与CVM自建数据库优势_UCloud云数据库MySQL产品优势及与自建数据库对比
前文,我们了解过UCloudy优刻得云数据库活动<云数据库有什么用?UCloud海外MySQL云数据库促销最低5折>,以及产品介绍<什么是云数据库?云数据库机型版本和产品架构介绍&g ...
- JavaWeb项目+MVC三层架构+Mysql+Tomcat+汽车配件销售系统前后端+可以用于学习javaweb项目入门
JavaWeb项目+MVC三层架构+Mysql+Tomcat+汽车配件销售系统前后端+可以用于学习javaweb项目入门 可以用于课程设计.毕业设计的知识点入门学习 提示:此资源仅用于javaweb网 ...
- sql要学mysql还是php,MySQL_与MSSQL对比学习MYSQL的心得(一)--基本语法,这一期主要是学习MYSQL的基本 - phpStudy...
与MSSQL对比学习MYSQL的心得(一)--基本语法 这一期主要是学习MYSQL的基本语法,陆续还会有续期的文章,敬请期待 语法的差异 我这里主要说语法的不同 1.默认约束 区别:mysql里面DE ...
- UCloud云数据库MySQL产品优势及与自建数据库对比
UCloud云数据库MySQL产品优势及与自建数据库对比 前文,我们了解过UCloudy优刻得云数据库活动<云数据库有什么用?UCloud海外MySQL云数据库促销最低5折>,以及产品介绍 ...
- MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01
MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01 1. MySQL体系结构和存储引擎 1.1 定义数据库和实例 数据库database: 物理操作系统文件或其他形式文件类型的集合. 当使 ...
- MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02
MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02 6. 锁 人们认为行级锁总会增加开销.实际上,只有当实现本身会增加开销时,行级锁才会增加开销.InnoDB 存储引擎不需要锁升级,因 ...
- pcie中文入门学习文档资料
网上转载的整理pcie中文入门学习文档和资料,作为备份: 目录如下: 1.前言篇:PCIe扫盲--PCIe简介:http://blog.chinaaet.com/justlxy/p/510005306 ...
- 事务隔离机制原理深入分析以及MySQL不同隔离级别分场景下实验对比
这是我总结的事务的四种隔离机制,比较好理解,主要是有些地方文字游戏说不清楚很容易混淆: Read Uncommitted(读未提交)A未完,B已更新,未提交,A读到B已更新的数据,由于未提交,那么可能 ...
最新文章
- mysql的优化——索引介绍
- Flask实战1-轻博客
- auto.js停止所有线程_十年架构师带你快速上手多线程
- jquery层级原则器(匹配后代元素div)
- 前端学习(1652):前端系列实战课程之bom
- 【2016年第4期】研究(国家自然科学基金项目成果集萃)导读
- gitlab 删除仓库
- “Git 不是昙花一现!”
- (十)OpenCV相机标定
- matlab plv,脑电脑网络分析代码使用流程介绍
- 游戏服务器架构,配置
- 空气质量等级c语言编程,编程小白如何快速处理空气质量数据
- C#自定义好看的消息提示窗口MessageBox
- 在检查计算机更新时发现错误,修复在 Acrobat Reader 更新期间出现的 Windows 错误...
- c语言日历时钟编程,基于DS1302的日历时钟(1602液晶显示DS1302时钟)C语言程序设计...
- 异步请求 ajax的使用详解
- 如何输入带空格的字符串
- mean shift应用_使用Google地图制作MEAN应用(第二部分)
- 网友感到担忧!iOS 17支持第三方应用商店:这下跟安卓没区别了
- 【Paypal】即时付款通知IPN