複数の呼び出し間の GNU 並列操作の総数を制限します。

複数の呼び出し間の GNU 並列操作の総数を制限します。

私は10,000のコアを持つコンピュータを使用していますが、一度に1,000のコアにしかアクセスできません。

いくつかの場所でGNU並列処理の利点を利用するスクリプトがあります。レベルAを並列化し、このスクリプト内で30倍以上の作業を行います。

--link並列性と構文を使用するためにスクリプト全体を書き換えるには、多くの作業が必要です::: A B C ::: $(seq 30)

parallel2つの独立した呼び出しが2つの間のジョブの総数を1000に制限するのに十分な通信を可能にする方法はありますか?

答え1

私が正しく理解したら、あなたはGNU Parallelを2つ(またはそれ以上)インスタンスを実行し、総実行ジョブ数が1000未満であることを望んでいます。

したがって、ある時点では、そのうちの1つは300のジョブを実行し、もう1つは700のジョブに制限する必要があります。

--limitこの特別なケースのために設計されています。選択したスクリプトを実行し、終了値に基づいてジョブ数を制限します。

これで、実行中のジョブの総数を決定する方法が必要です。

たぶん何ですか[ $(ps aux | grep myprogram | wc -l) -gt 1000 ]

(どのモンスターが10,000個のコアを持っていますか?)

答え2

もう一つの解決策は--sqlmaster/--sqlworker

1000秒を作成し--sqlworker、実行するジョブをデータベースに配置します--sqlmaster

master1$ seq 10000 | parallel --sqlmaster +pg://user:pass@server/db/table sleep 1.1{}
# The + is needed to append to existing table
master2$ seq 4000 | parallel --sqlmaster +pg://user:pass@server/db/table sleep 1.2{}

worker1..1000$ parallel --sqlworker +pg://user:pass@server/db/table 

私はこれがバージョンに敏感ではないと思います--limit。これは、特に単一システムではなくクラスタで実行されているためです。

関連情報