10.8_本章小结

10.8 本章小结

在本章中,我们介绍了如何在CUDA C应用程序中实现任务级的并行性。通过使用两个

(或者多个)CUDA流,我们可以使GPU在执行核函数的同时,还能在主机和GPU之间执行复制操作。然而,当采用这种执行方式时,需要注意两个因素。首先,需要通过cudaHostAlloc()来分配主机内存,因为接下来需要通过cudaMemcpyAsync()对内存复制操作进行排队,而异步复制操作需要在固定缓冲区执行。其次,我们要知道,添加这些操作到流中的顺序将对内存复制操作和核函数执行的重叠情况产生影响。通常,应该采用宽度优先或者轮询方式将工作分配到的流。如果没有理解硬件的排队工作原理,那么初看上去会觉得这种方式有违直觉,因此当你编写自己的应用程序时,要记住这个情况。

第11章

多GPU系统上的CUDA C

有一句古老的谚语,当用于GPU时可以表述为:“比在一个GPU上计算要更好的,只有在两个GPU上计算。”近年来,在系统中包含多个图形处理器已变得越来越常见。当然,多GPU系统在某种程度上类似于多CPU系统,因为二者都还没有成为主流的系统配置。但是,在系统中包含多个GPU却是很容易的。例如,GeForce GTX 295在单块显卡上就集成了两个GPU,NVIDIA 的Tesla S1070 计算系统包含了4个支持CUDA 的图形处理器,在基于最新NVIDIA芯片组构建的系统中,主板上就有一个支持CUDA 的集成GPU,如果在某个PCI EXPRESS插槽中再添加一块独立的NVIDIA GPU,那么系统中就包含了多个GPU。这些情况都是很常见的,因此我们需要了解如何利用多GPU系统中的资源。