qpainter如何使用gpu_腾讯机智团队分享--GPU数据传输概览

本文探讨了GPU机器中数据传输的方式,包括CPU与GPU之间的数据拷贝,同机多GPU之间的P2P传输,以及多机GPU之间的网络通信。重点分析了cudaMemcpyPeer的P2P功能,NCCL库在分布式GPU训练中的作用,以及性能参数对传输速度的影响。

在机器学习训练过程中,大家往往会发现IO成为制约训练速度提升的瓶颈。

提升训练速度,数据传输是绕不开的话题。那么GPU机器中,数据传输是如何做的呢?

同机的CPU和GPU之间数据如何传输?

同机的多卡之间数据如何传输?

多机的卡之间数据如何传输?

1、CPU和GPU之间

1)CPU->GPU

8babefe88f76e471148f98db3ed40dc5.png
图1 锁页内存

从CPU向GPU传输数据,最为人熟知的就是cudaMemcpy了。

默认情况下,数据是从系统的分页内存先到锁页内存,然后再到GPU显存。因此如果显式指定使用锁页内存,是可以加快数据传输速度的。

(锁页内存,在cuda编程里使用CudaHostMalloc分配。实质上和linux的mlock系统调用一样,就是给内存页打上标记,不让操作系统将其从物理内存交换到硬盘)

至于为什么cuda要这样设计,个人理解是为了实现的方便。因为操作系统已经处理了硬盘和物理内存间的页交换等情况,显卡驱动只需要实现物理内存到GPU显存这一种数据传输即可,不需要把操作系统内存管理的事情再做一遍。

4f719d3a802ae6d7753d3ac69c4d78ec.png
图2 G9机型(P40卡)上系统内存向显存拷贝速度

2) GPU->CPU

GPU向CPU拷贝数据时,锁页内存同样比分页内存快

e930b8afb3634489b8d30bc96353ab3f.png
图3 G9机型(P40卡)上显存向系统内存拷贝速度

值得一提的是,适当使用pinned memory显然可以加快IO速度。但是并不是越多越好,因为锁页内存是完全独占住了物理内存,操作系统无法调度,可能会影响系统整体性能。

3)同一张GPU卡内部

同一张卡内两块显存对拷,实测P40上高达~285GB/s。也比较接近于GPU卡本身的访存速度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值