7

Windows Server 2008 SE および 64 プロセッサで実行されているマルチプロセス .NET (F#) 科学シミュレーションがあります。シミュレーションの各時間ステップは、1.5 秒から 2 秒まで振動します。各プロセスは他のプロセスを待機する必要があるため、全体の速度は最も遅いプロセスの速度になります (2 秒 * 反復回数)。したがって、プロセスの振動を可能な限り減らす必要があります。

一連のプロセスに、計算に使用できるまったく同じ「計算時間」を強制する方法はありますか?

4

3 に答える 3

1

2秒のシリーズを並列化して、シミュレーションの複数の「ブランチ」を並行して発生させることは可能ですか?

例:これが4つのプロセスによる1つのシミュレーションであると仮定します。プロセス1には2秒かかるため、プロセス1が完了するまで終了できません。


process1---------------------------------------------- (2 sec)
process2-------- (0.5 sec)
process3---- (0.25 sec)
process4---------------------------- (1 sec)

ほとんどのプロセスがプロセス1を待機している場所で、多くのアイドル時間があります。
実行しようとしている作業について、これらのセットを複数同時に実行することは可能ですか。その場合は、実行時間の長いプロセスが終了するのを待っている間に他のシミュレーションで作業することにより、アイドル状態のコアを利用できます。

于 2011-11-01T14:01:03.630 に答える
1

プロセスをより公平にスケジュールするように OS に依頼する方法はわかりませんが、使用しているアーキテクチャを回避する手法について多くの研究があることは知っています。実用上のボトルネック。

このテーマに関する私のお気に入りの論文は、Frigo と Strumpen によるThe cache complex of multithreaded cache oblivious algorithmです。彼らは、あなたが説明したようなバルク並列計算を、負荷分散を容易にする任意の細粒度の非同期計算に変える時空間細分割などの魅力的な手法について説明しています。

于 2011-11-01T15:57:36.087 に答える
0

あなたがやりたいことを100%理解しているかどうかはわかりません。ただし、プロセス間同期の場合は、名前付きEventWaitHandleまたはSemaphore.

コメントごとに更新

を使用ProcessorAffinityして、プロセスを特定のプロセッサに制限できます。

于 2011-11-01T14:19:54.860 に答える