複数の入力を処理するためにGNU Parallelで複数の同等のコマンド(複数のスレッドプール)を使用する

複数の入力を処理するためにGNU Parallelで複数の同等のコマンド(複数のスレッドプール)を使用する

処理したい(ファイルを別の形式に変換する)大きなデータセット(> 200,000ファイル)があります。アルゴリズムはほとんどシングルスレッドなので、並列処理を使用するのは当然です。しかし、私は何か珍しいことをしたかったのです。各ファイルは2つの方法(CPUとGPUベース)のいずれかを使用して変換できますが、CPUとGPUの両方を使用したいと思います。

抽象的な意味で同じ結果を生成する2つの異なるコマンド(fooおよび)があります。bar固定容量を持つ2つのスレッドプールを構成し、それぞれ最大NインスタンスfooとMインスタンスを実行し、プールのbar1つを使用して利用可能なスロットを持つプールに応じて(性別を決定する必要がないか必要ありません)、各入力ファイルを処理します。しようとします。

GNU Parallelや他のツールで同様のことを行うことはできますか?

ベストアンサー1

このような:

gpus=2

find files |
  parallel -j +$gpus '{= $_ = slot() > '$gpus' ? "foo" : "bar" =}' {}

あまり怖くないです。

  parallel -j +$gpus '{=
      if(slot() > '$gpus') {
        $_ = "foo"
      } else {
        $_ = "bar"
      }
    =}' {}

-j +$gpusCPUスレッドごとに1つのジョブを実行+ $gpus

{= ... =}Perlコードを使用して$_を設定します。

slot()ワークスロット番号(1..cpu_threads+$gpus)。

おすすめ記事