2012-01-21 21 views
4

誰でもBEPU Physic Engineを試しましたか? http://bepuphysics.codeplex.com/管理対象と非管理対象物理エンジンのC#

それアンマネージコードが許可されていないので、ほとんどXNA(XBOXとWP7プロジェクト)のために使用されるC#で書かれた完全に管理下剤エンジン...私はそれを知っているのです。

しかし、私が知りたいのは、完全に管理物理演算エンジンがのWindows環境(パフォーマンスの期間中)に(例えば、tao.ODE用)P /呼び出されたものと比較される方法ですか?

つまり、実際のプロジェクトでODEやPhysXのような管理されていないエンジンのオーバーヘッド、完全管理コードまたはP/Invoke Wrapperを作成する方法はありますか?

+0

敬具、..あなたのために見つけるための唯一の方法は、コードにあります両方のエンジンで実行されているユースケース... – Yahia

+0

実際に実行しているP/Invoke呼び出しの量と、各呼び出しが行っている作業量によって異なります。 –

答えて

5

特定の物理エンジンにコメントすることはできませんが、高性能コード(管理されていないものと管理されたものの両方)を作成する際にいくつかの経験を提供することができます。

数年前、私はデルファイで書かれたシミュレーションソフトウェアを開発し、.NETに移植しました(到着前に)。これは純粋な管理コードであり、質量分析計シミュレーションのための計算されたイオン軌道であった。コードには数値積分、微分、N体静電荷計算が含まれていたので、確かにCPUをテストしていました。

シミュレーションルーチンのいくつかのC++バージョンがうまく最適化されたC#コードで打ち負かされる可能性がある最高のパフォーマンスを見出そうと、さまざまな実験を行った。よく私は、新しい演算子(オブジェクトの再利用)、キャッシング、オブジェクトプーリング、可能、移動方法はstatic/sealed可能な場合に呼び出し可能な場合、最小化方法は、呼び出し構造体の使用の減少を意味最適化することにより

、数を最小限に抑えますメソッドに渡されるパラメータのうち、デバッガから切り離されたリリースでコンパイルされるものx64私がこれをやった後、実際にC++を使ってCLRを打つために、私はSSE/SSE2やインラインアセンブラのような低レベルの手法に頼らざるを得ませんでした。

確かに、経験豊富なC++コードではC#とマネージ言語が一致しませんが、どちらのプラットフォームでも最適化されていないコードがあります。 C#コードが遅いが、開発者がnew演算子を使用しているときは、GCが非常に頻繁に実行されると驚くほど奇妙なことがわかります。 C++のnewdeleteもパフォーマンスの低下を招くので、C++のコンパイルでは処理が速くなるとは思っていません。

特定のエンジンに戻る - もちろん、テストとパフォーマンスの分析を自分で行う必要があります。プラットフォームの呼び出しに関しては、ポインタと構造体がマネージド/アンマネージド境界を超えてマーシャリングされるときに、サンクと呼ばれるパフォーマンスが低下します。純粋なマネージドコードはこれを持っていないだけでなく、低レベルのメモリコピー、SSE/SSE2拡張などの最適化が欠落します。これはC++でコード化することができます。

最後に、非常に強力で高速なmanaged-> Platform invokeライブラリの例では、SlimDXを見てください。さて、ネイティブコードとDirectX(一部の情報源は〜5%と言われています)よりもパフォーマンスが上がりますが、C#で開発することによる生産性の利点については、その価値はあると思います!それは単にあなたが何の一般的な答えは存在しないために...それぞれのエンジンを使用して正確に何に依存しているため、比較のその種が難しいです

1

は、しかし、私が知りたいのは、完全に管理物理演算エンジンは、/ Pと比較して、1つのWindows環境での( たとえばtao.ODE用)(パフォーマンスの用語で)呼び出される方法ですか?

の両方が吸う - このごろ本当に高いパフォーマンスを得るための唯一の方法は、「グラフィックスカード上で実行されている」のように「プロセッサ・コード」のような「非管理」ではなく「管理対象外」ではありません。

関連する問題