[CUDA-Samples] simpleIPC

CUDA Advent Calendar 2019 20日目の記事です.
ネタのつなぎのCUDA Samples読み回5回目です.
読んでいたもののバージョンが変わってしまうといけないのでこちらにforkしてあります.

何このサンプル

IPC(Inter Process Communication; プロセス間通信)のサンプルです.
何ができるかというと,別々に起動したプロセス同士でGlobalメモリのアドレスやcudaEventを共有したりできます.

サンプルがやっていること

このプログラムでははじめに立ち上がったプロセス(親プロセス)が一定個数のGlobalメモリ領域を確保後,同じ個数の子プロセスを作り,それぞれの子プロセスがそれぞれGlobalメモリのアドレスを親プロセスと共有しアクセスします.
子プロセスと親プロセス間の情報の共有はSharedメモリ(CUDAのではないですよ)を介して行われ,これによってGlobalメモリのアドレスを親子プロセス間で共有します.
これを実現するのがcudaIpcMemHandle_t構造体です.
この構造体はGlobalメモリをAllocateしたプロセスがcudaIpcGetMemHandle関数を用いることでそのGlobalメモリのアドレスから設定されます.
子プロセス側ではこの構造体からcudaIpcOpenMemHandle関数によりGlobalメモリのアドレスを取得します.
子プロセスでメモリを使い終わったらcudaIpcCloseMemHandle関数を呼び,親プロセスでメモリ領域をcudaFreeします.
このサンプルではcudaEventのプロセス間コミュニケーションも行っています.

おわり

前から思っていましたがSharedメモリという名前はCUDA+Linux環境では紛らわしくないですかね????

カテゴリー:CUDA
記事作成日:2019-12-20