
私は24の計算集約的なプロセスを持っています、各プロセスは単一のスレッドで実行され、それぞれ約2時間実行されます。私は8コアCPUです。
8つのプロセスのみを実行するのではなく、24のプロセスをすべて同時に実行する場合、ランタイム全体に影響はありますか?
プロセス間の調整オーバーヘッドについて話しているので、この場合、各CPUには3つのプロセスが割り当てられます。オーバーヘッドがたくさんありますか?
答え1
これは、特定のワークロードとアーキテクチャの詳細によって異なります(たとえば、プロセスが別のNUMAノードにある可能性がある同じメモリを読み取っていますか?)。したがって、パフォーマンスを測定して結果を確認するのが最善です。
8個の実行単位で24個のCPU集約型ジョブを実行するには、ジョブのスケジュールをオンまたはオフにする必要がありますが、実行単位と同じくらい多くのジョブを実行するには、原則としてより少ない数のスイッチが必要です。タスク間の切り替えのためにコードを実行することに関連するオーバーヘッドはそれほど高くないと思います。ただし、CPUでジョブをスケジュールするときの1つの影響は、そのCPUによってキャッシュされた状態がフラッシュされる危険性があることです。スケジュールされた新しいタスクは役に立ちません。)これが頻繁に発生すると、パフォーマンスが低下する可能性があります。
あなたの場合、これら3つを互いにベンチマークすることは合理的かもしれません。
- 24の同時ジョブを実行します。
- 8つのタスクを実行してください。
- 8つのジョブを実行し、各ジョブに特定のCPUを割り当てます。
たとえば、Linuxで(3)を使用して実行できますcpuset
。