GNU Parallelを使ってプログラムを同時に実行するには?

GNU Parallelを使ってプログラムを同時に実行するには?

Pythonスクリプトを何度も並列に実行する必要がありますが、このようにバックグラウンドで実行しました。

ipython program.py & ipython program.py & ...

私はこの方法が実行ごとに1つのコアを使用するのか、スレッドを使用してprogram.pyを実行するのか疑問に思います。ところで、私はGNU Parallelの使い方を知りたかったのですが、私が見つけた例は、「find」の「cat」のようなコマンドです。 GNU Parallelを使用して毎回別のコアで同時にprogram.pyを実行する方法は?ご協力ありがとうございます。

答え1

GNU Parallelを使用して毎回別のコアで同時にprogram.pyを実行する方法は?

あなたは(ほぼ)プログラムをコアに結び付けたくありません。一般的に、どのコアがタスクを実行しているのか気にしません。通常、システムの各CPUスレッドに対して1つのジョブのみを実行しようとします。

そしてそれGNU Parallelを使用すると簡単です。

seq 1000 | parallel ipython program.py

これは実行されますが、ipython program.py 1CPUipython program.py 1000スレッドごとに1つのジョブのみが並列に実行されます。したがって、ハイパースレッディング(つまり、16個のCPUスレッド)を使用する8コアシステムでは、16個のジョブを並列に開始します。

この内容は第2章で説明します。https://doi.org/10.5281/zenodo.114601415分ほど時間をかけてお読みください。あなたのコマンドラインはあなたを愛するでしょう。

答え2

このメソッドが実行ごとに1つのコアを使用しているかどうかを知りたいです。

いいえ、必ずしもそうではありません。

または、スレッドを使用してprogram.pyを実行してください。

いいえ、これは別です。プロセス、いいえ。スレッドは同じコアまたは異なるコアで予約できます。

だからいくつかの用語を混同しているようです。

プロセスを開始するとき、オペレーティングシステムは何をしますか?スケジュールつまり、使用可能なCPUコアがあるときにアイドルCPUコアで実行されることを意味します。これは非常に賢いので、異なるPythonプロセスが異なるコアで実行される可能性がありますが、必ずしもそうではありません(コアが1つしかない場合でもうまく機能します!)。

GNU Parallelを使用して毎回別のコアで同時にprogram.pyを実行する方法は?

まったくそうではありません。これは、マルチプロセッサスケジューリングが機能する方法ではなく(コア固定などのトリックを経ず)、おそらく利点はありません。プログラムが呼び出す方法でCPUコアをまだ完全に活用していない場合は、GNUの同様のNothingはそれを置き換えます。すべてのコアが自動的に使用されない場合は、プロセスが競合していることを意味します。その他CPU時間よりも多くのリソース。

たとえば、ipython(実際にインタラクティブに実行しない限り、不要な多くのPythonモジュールをロードして実行した後は実行できません)を使用しているように見えるため、比較的ストレージ帯域幅が集中している可能性が高くなります。並列に)代わりに通常のPythonを使用します。

一般的に、GNUはややparallel薄暗いと思います。つまり、使用するのは不必要に困難です。私はこれが3つのプロセス(、、および)を並列に開始するecho argument1 argument2 argument3 | xargs -P0 -n1 python script.pyより簡単な方法であることがわかりました。python script.py argument1python script.py argument2python script.py argument3

関連情報