GTC 2015 - MPIを使ったマルチGPUのプログラミング「高性能化編」
通常ならば、MPIの通信を行うには、GPUのメモリからホストCPUのメモリにPCIeのDMAを使ってデータをコピーし、また、PCIeのDMAを使って、そのデータをInfiniBandのネットワークインタフェースカード(IB NIC)に転送するという操作が必要である。
これに対してGPUDirect RDMAは、GPUメモリから読み出したデータを送るPCIeのDMAの転送先をIB NICにしてしまう。つまり、いったん、CPUメモリに入れて、それからIB NICに送るという手間を省いている。このため、MPI通信の遅延が減り、バンド幅も向上する。さらにホストCPUのメモリに転送のためのバッファを用意するということも不要になる。
なお、この図では送信側しか書かれていないが、受信の場合はIB NICからGPUメモリに直接DMA転送する。
また、この図はGPUからIB NICへの転送であるが、GPUDirectはGPU間のデータ転送にも使える。
次の図は、GPUDirect RDMAを使うMPIとGPU対応ではあるがGPUDirectは使っていないMPIと、CUDA対応でない一般のMPIの性能を比較したものである。