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