2

私は、128ノードのLinuxおよびWindowsクラスターで実行されるフォトニックシミュレーションパッケージを作成する準備をしています。このパッケージは、ジョブを設計してクラスターに送信するためのWindowsベースのクライアントを備えています。

これのほとんどはよく知られた根拠ですが、実数処理能力の観点から、C#がC++にどのように積み重なるのか興味があります。私は両方の言語に非常に慣れていますが、.NETまたはMonoを使用したC#の優れたオブジェクトモデルとフレームワークのサポートは非​​常に魅力的です。ただし、このアプリケーションでは、開発者の好みのために処理能力をあまり犠牲にすることはできません。

この分野での経験はありますか?利用可能なハードベンチマークはありますか?最終的なマシンコードは、C#またはC ++ソースのどちらからのものでも、同じ手法を使用して最適化されると思います。特に、これは通常、pcode/ILレベルで行われるためです。

4

3 に答える 3

2

C#とネイティブC++で採用されている最適化手法は大きく異なります。C#コンパイラはILを発行しますが、ILはわずかに最適化されており、初めて実行するときにバイナリコードにJITされます。最適化作業のほとんどは、JITコンパイラー内で行われます。

これには長所と短所があります。JITには時間予算があり、最適化に費やすことができる労力を制限します。ただし、実際に実行されているハードウェアに関する深い知識もあるため、(理論的には)新しいCPUオペコードとパイプラインハザードデータベースなどのパフォーマンスデータに関する詳細な知識を透過的に利用できます。

実際には、後者がどれほど重要かはわかりません。少なくともMonoは、SSE(SSE2、おそらく?)を備えたCPUで実行されていることがわかった場合、いくつかのループを自動的に並列化することを知っています。これは、シナリオにとって大きな問題になる可能性があります。

于 2010-06-21T22:09:38.513 に答える
1

クイック検索を行ったところ、次のことがわかりました。

http://www.drdobbs.com/184401976;jsessionid=232QX0GU3C3KXQE1GHOSKH4ATMY32JVN

編集:これは5年前に行われたので、パフォーマンスは全体的に向上する可能性が高いことを(記事を読んで)覚えておいてください!

于 2010-06-21T22:08:42.463 に答える
1

私はこれらのパフォーマンスの比較を見つけました:

http://reverseblade.blogspot.com/2009/02/c-versus-c-versus-java-performance.html
http://systematicgaming.wordpress.com/2009/01/03/performance-c-vs-c /
http://journal.stuffwithstuff.com/2009/01/03/debunking-c-vs-c-performance/
http://www.csharphelp.com/2007/01/managed-c-versus-unmanaged-c //

そしてここにケーススタディさえあります:
http ://www.itu.dk/~sestoft/papers/numericperformance.pdf

それが役に立てば幸い。

于 2010-06-21T23:04:08.667 に答える