3

マルチコア (およびマルチスレッド) マシンで複数のジョブを実行する必要があります。GNU Parallel ユーティリティを使用してコア全体にジョブを分散し、タスクを高速化しています。実行するコマンドは、'commands' というファイルで入手できます。次のコマンドを使用して、GNU Parallel を実行します。

猫コマンド | 並列 -j +0

この場所のガイダンスに従って- gnu parallel、このコマンドは、すべてのコアを使用してこのタスクを実行することになっています。私のマシンには 2 つのコアがあり、コアごとに 2 つのスレッドがあります。ただし、システム モニターには 4 つの CPU が表示されます (CPU1 と CPU2 はコア 1 に属し、CPU3 と CPU4 はコア 2 に属します)。各ジョブ (シミュレーション) は、シングル コアで実行するのに約 20 秒かかります。上記のコマンドでこの GNU 並列ユーティリティを使用して、2 つのジョブを並列に実行しました。システム モニターで、2 つのジョブが cpu1 と cpu2 (同じコア) に割り当てられている場合、明らかに速度が向上しないことがわかります。完了するまでに約 40 秒かかります。これは、順次実行した場合にかかる時間とほぼ同じです。ただし、ツールが 2 つのジョブを CPU1 と CPU3 または CPU4 に分散することがあります (つまり、2 つのジョブが 2 つの異なるコアに割り当てられます)。この場合、両方のジョブが 20 秒で並行して終了します。

ここで、同じコアの異なる「スレッド」ではなく、異なる「コア」でツールを強制的に実行できる方法があるかどうかを知りたいです。どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

1

GNU Parallel はプロセスを生成します。どのコアで実行するかは決定しません。あなたのOSはそれを行います。GNU/Linux では、電力を節約するために同じ物理 CPU のコアでプロセスを生成することにより、電力を節約できます。

echo 1 > /sys/devices/system/cpu/sched_mc_power_savings

( https://lesswatts.org/tips/cpu.phpを参照)

お使いのコンピュータが節電用に設定されている場合、これが該当する可能性があります。

GNU/Linux では、プロセスを生成するコアを制御することもできます。tasksetマスク 10101010(bin)=0xAA; を使用して、GNU/Linux に他のすべてのコアで生成するように指示できます。ここでは、128 コアのマシンを示しています。

cat commands | taskset 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa parallel -j +0
于 2013-01-16T20:29:18.750 に答える