cuda流,多GPU编程,纹理操作

流:一系列将在GPU上按顺序执行的操作

cuda流,多GPU编程,纹理操作_第1张图片

步骤:

定义流:cudaStream_t s1;

创建流:cudaStreamCreate(&s1);

销毁流:cudaStreamDestory(s1);

cuda流,多GPU编程,纹理操作_第2张图片

 

多GPU编程

统一地址:

CPU和GPU分配使用统一的虚拟地址空间

驱动/设备可以判断数据所在的地址

GPU可以引用指针 另一个GPU上的地址

Host上的地址

两个方面

Peer-to-peer(P2P) memcopies

使用另一个GPU的地址 cudaDeviceEnablePeerAccess( peer_device, 0 )

允许current GPU访问peer_device GPU cudaDeviceCanAccessPeer( &accessible, dev_X, dev_Y)

检查是否dev_X可以访问dev_Y的内存返回0/1(第一个参数)

cuda流,多GPU编程,纹理操作_第3张图片

Peer-to-peer memcopy

cudaMemcpyPeerAsync(void* dst_addr, intdst_dev, void* src_addr, intsrc_dev, size_tnum_bytes, cudaStream_tstream)

两个设备之间拷贝字节

1)如果peer-access允许字节在最短的PCIe路径上传输

2)如果peer-access不允许CUDA驱动通过CPU memory传输

 

纹理操作

 纹理内存的优势:

1.它们是被缓存的,如果它们在texture fetch 中将提供更高的带宽

2.它们不会像全局或常驻内存读取时受内存访问模式的约束

3.寻址计算时的延迟更低,从而提高随机访问数据时的性能

4. 在一个操作中,包装的数据可以通过广播到不同的变量中 5.8-bit和16-bit的整型输入数据可以被转换成在范围[0.0,1.0]或[-1.0,1.0]的浮点数 

 

CPU/GPU协同

cuda流,多GPU编程,纹理操作_第4张图片

 

 

你可能感兴趣的:(CUDA,C)