subprocessと並列GPU処理

 Pythonでの一連のデータ処理の中で「はじめのこのプロセスは単一のGPUで、だけどその後のこの処理は複数のGPUを使って高速に済ませたい」ということがあります。今回は複数のGPUが搭載されているマシンでGPUに並列処理をさせる話です。Windows10環境のPythonの場合です。

 状況としては、単一のマシンに搭載されている2つのGPUがあり、そのうちの一方を使って処理を行うコマンド「hogehoge.exe」と、他方を使って処理を行うコマンド「fugafuga.exe」があるとします。その際に前者と後者を同時に実行し、かつ、それらが処理完了するまで後続の処理を待機させるには下記のようにします。

 ちなみに、Windows10でコマンドラインで起動させるアプリケーションを子プロセスとしてsubprocessでコールするには「powershell.exe」に対してコマンドを発行します。また子プロセスとしてコールするには「subprocess.Popen」を使います。

 subprocess.Popenではなく「subprocess.call」を使った場合、proc_1が完了するまでproc_2の開始が待機するので間違えないように注意が必要です。


 処理を並列化するには、互いの処理に依存関係がないことが必須条件です。なお、今回はGPU並列との観点で記載しましたが、マルチコアマルチスレッドのCPUについてもスレッドごとに処理を分ける場合も考え方は同じです。

0
Would love your thoughts, please comment.x
()
x