cudagpus是什么_如何在cuda中复制不同gpus之间的内存

将数据从一个GPU传输到另一个GPU通常需要通过主机内存进行“分段”.例外情况是GPU和系统拓扑支持对等(P2P)访问并且已明确启用P2P.在这种情况下,数据传输可以直接通过PCIE总线从一个GPU流向另一个GPU.

在任何一种情况下(有或没有P2P可用/启用),典型的cuda runtime API call将是cudaMemcpyPeer / cudaMemcpyPeerAsync,如cuda p2pBandwidthLatencyTest sample code中所示.

在Windows上,P2P的一个要求是在TCC模式下驱动程序支持两个设备.大多数情况下,TCC模式不是GeForce GPU的可用选项(最近,使用CUDA 7.5RC工具包中提供的驱动程序和运行时对GeForce Titan系列GPU进行了例外处理.)

因此,在Windows上,这些GPU将无法利用直接P2P传输.然而,几乎相同的序列可用于传输数据. CUDA运行时将检测传输的性质,并在“引擎盖下”执行分配以创建临时缓冲区.然后,传输将分两部分完成:从始发设备到登台缓冲区的传输,以及从登台缓冲区到目标设备的传输.

以下是一个完整的示例,展示了如何将数据从一个GPU传输到另一个GPU,同时利用P2P访问(如果可用):

$cat t850.cu

#include

#include

#define SRC_DEV 0

#define DST_DEV 1

#define DSIZE (8*1048576)

#define cudaCheckErrors(msg) \

do { \

cudaError_t __err = cudaGetLastError(); \

if (__err != cudaSuccess) { \

fprintf(stderr, "Fatal error: %s (%s at %s:%d)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部