2

私は c# コンソール アプリを持っています。モンテカルロ シミュレーションは完全に CPU バウンドで、実行時間は利用可能な専用スレッド/コアの数に反比例します (コア/スレッド間の比率は 1:1 を維持しています)。

現在、毎日実行されます:

AMD Opteron 275 @ 2.21 GHz (4 コア)

アプリは 3 つのスレッドを使用するマルチスレッドで、4 番目のスレッドは別のプロセス コントローラー アプリ用です。

実行には1 日あたり 15 時間かかります。

次の CPU で構成されたシステムで同じ作業を実行するのにかかる時間を、可能な限り見積もる必要があります。

http://en.wikipedia.org/wiki/Intel_Nehalem_(microarchitecture)
2 x X5570
2 x X5540 

ケースを比較して、利用可能なスレッドを使用して再コーディングします。安価な x5540 よりも 2 x x5570 CPU を搭載したサーバーが必要であることを正当化したいと思います (単一のマザーボードで 2 つの CPU をサポートします)。これにより、オペレーティング システムで 8 コア、16 スレッド (これが Nehalem チップの仕組みだと私は信じています) を利用できるようになります。私のアプリでは、モンテカルロ シミュレーションまで 15 スレッドです。

これを行う方法はありますか?シングル スレッド ベンチマークに関連する 3 つの CPU すべてのベンチマーク データを参照できる Web サイトはありますか? 次に、ケースとスレッド数を推定できます。必要に応じてベンチマークをインストールして実行するために、現在のシステムにアクセスできます。

今後 3 か月間でこのアプリのワークロードが約 20 倍に増加し、24 時間時計で完了する必要があるというビジネス上の指示もあることに注意してください。

どんな助けでも大歓迎です。

これもここに投稿しました:http://www.passmark.com/forum/showthread.php?t=2308うまくいけば、ベンチマークをよりよく説明できるので、コアごとのスコアを効果的に取得できます

4

5 に答える 5

2

cudaでアルゴリズムを再作成することを検討しましたか? 現在の GPU を使用して、これらの 10 ~ 100 倍の計算を増やします。この方法では、ファットビデオカードを購入するだけで済みます

于 2009-09-24T18:38:58.793 に答える
1

説明したニーズに応じて拡張できるシングルボックスサーバーを見つけるのは困難です。個々のクロック速度が遅い場合でも、SunCoolThreadsまたはその他のスレッド数の多いサーバーを確認することをお勧めします。http://www.sun.com/servers/coolthreads/overview/performance.jsp

T5240は128スレッドをサポートします:http ://www.sun.com/servers/coolthreads/t5240/index.xml

データセットが適切な大きさである場合、メモリとCPUキャッシュの帯域幅が制限要因になる可能性があります。ディスクからデータを取得するのにどのくらいの時間がかかりますか?RAMサイズとキャッシュを大幅に増やすことは役に立ちますか?

一歩下がって、より少ない計算で同じまたは類似のソリューションを提供できる別のアルゴリズムがあるかどうかを確認することをお勧めします。

計算スレッドの最適化に多くの時間を費やしたようですが、実行されるすべての計算は、最終結果にとって実際に重要ですか?

どこでも計算をショートカットする方法はありますか?

最終結果にほとんど影響を与えないアイテムを特定し、それらの計算をスキップする方法はありますか?

プログレッシブ反復で詳細が追加された初期反復に、より低い解像度のモデルを使用できますか?

私が精通しているモンテカルロアルゴリズムは非決定論的であり、実行時間はサンプル数に関連します。サンプリングモデルを最適化して、調査する項目の数を制限する方法はありますか?

明らかに、処理している問題のドメインまたはデータセットはわかりませんが、同等の結果をもたらす可能性のある別のアプローチがある可能性があります。

于 2009-12-24T06:59:17.600 に答える
0

極端に言えば、デュアル ソケットの X5570 でさえ、あなたが想像するワークロードに拡張することはできないでしょう。計算を複数のシステムに分散する必要があります。簡単な計算:

現在のワークロード

3 cores * 15 real-world-hours = 45 cpu-time-hours

提案された 20 倍のワークロード

45 cpu-time-hours * 20 = 900 cpu-time-hours
900 cpu-time-hours / (20 hours-per-day-per-core) = 45 cores

したがって、パフォーマンスの完全な線形スケーリングを仮定すると、目標を達成するには 45 個の 2.2GHz Opteron コアに相当するものが必要になります (処理時間が 1 日あたり 15 時間から 20 時間に増加するにもかかわらず)。Nehalem CPU がスレッドあたり3 倍高速であっても、パフォーマンス エンベロープの外側に留まり、成長する余地はありません。また、ハイパースレッディングがアプリケーションで機能することも前提としています。

私が見た最良の見積もりでは、X5570 はおそらく既存の Opteron の 2 倍のパフォーマンスになります。

出典: http://www.dailytech.com/Server+roundup+Intel+Nehalem+Xeon+versus+AMD+Shanghai+Opteron/article15036.htm

于 2009-09-24T17:16:19.163 に答える
0

それは大きなハンマーを振り回すことになるでしょうが、おそらくいくつかの頑丈な 4 ウェイ サーバーを見ることは理にかなっています。高価ですが、少なくとも 1 つのボックスで最大 24 個の物理コアを入手できます。他のすべての最適化手段 (SIMD を含む) を使い果たした場合は、それを検討する必要があります。

また、メモリ帯域幅などの他のボトルネックにもうんざりしています。モンテカルロ シミュレーションのパフォーマンス特性はわかりませんが、1 つのリソースを増やすと、別のボトルネックが明らかになる可能性があります。

于 2009-12-24T08:11:16.173 に答える
0

tomshardware.com には、CPU ベンチマークの包括的なリストが含まれています。ただし...それらを単に分割することはできません。可能な限りリンゴとリンゴの比較に近いものを見つける必要があり、ワークロードの命令の組み合わせが依存する場合と依存しない場合があるため、完全には取得できません。

これを公式と見なさないでください。作業がCPUバウンドで高度にベクトル化されていない場合、おそらく1.5倍から1.75倍のシングルスレッドスピードアップになるという実際のデータが必要です。

また、次のことも考慮する必要があります。1) C# と CLR を使用している。GC が起動してシリアル化するのを防ぐための措置を講じていない場合。2) nehalem にはハイパースレッドがあるため、完全な 16 倍のスピードアップは見られません。コードの最適化方法によっては、8 倍から 12 倍のスピードアップが見られる可能性が高くなります。ただし、ここでは楽観的です (16x を期待しないでください)。3) 3 つのスレッドで適切なスケーリングが行われている != 16 スレッドで適切なスケーリングが行われている場合、ここにドラゴンがいる可能性があります (通常はそうです)。

これを次のようにエンベロープ計算します。

15 時間 * 3 スレッド / 1.5 x = nehalem での 30 時間のシングル スレッド作業時間。

30 / 12 = 2.5 時間 (最良の場合)

30 / 8 = 3.75 時間 (最悪の場合)

実際に 20 倍の増加がある場合、並列実行時間を意味します: 2.5 時間 * 20 = 50 時間 (最良の場合)

3.74 時間 * 20 = 75 時間 (最悪の場合)

どのくらいプロファイリングしましたか? アプリから 2 倍を絞り出すことができますか? 1 つのサーバーで十分かもしれませんが、そうではない可能性があります。

そして、念のため、.Net 4.0 または .Net 3.5 CTP のタスク並列ライブラリを試してみてください。これは、この種の作業に役立つはずです。

-リック

于 2009-09-25T03:17:02.567 に答える