4

インテルマスカーネルライブラリ http://software.intel.com/en-us/intel-mkl/を使用した人はいますか

極端なパフォーマンス(1日あたり1.6兆個の乱数)が必要なため、これをC#アプリケーションからの乱数生成に使用することを考えています。

また、私のc#モンテカルロシミュレーションでこのc++コードから関数を消費するオーバーヘッドを最小限に抑えるためのアドバイスもあります。

  • サイト以上からEvalをダウンロードし、これを私のc#アプリからベンチマークしてみてください。

ありがとう

4

7 に答える 7

1

私はこのライブラリについてあまり/何も知りません。ただし、それが本当にC ++コードである場合は、C#から直接呼び出すことはできません。C#は、3つの方法のいずれかでのみC++と対話できます。

  1. C++libの上にあるCラッパーにPInvokeします
  2. COM相互運用
  3. PInvokeを逆にします(ラッパー関数を挿入するには、上記の1または2が必要です)

大規模なC++コードベースの場合は、ライブラリと対話するための薄いC ++/CLIラッパーを作成するのが最適な場合があります。次に、C#から呼び出します。

于 2009-07-27T16:03:06.580 に答える
1

MKLとIntelコンパイラを利用したモンテカルロ/確率的ソフトウェアを開発しました。一般に、乱数生成をc++dllでラップする必要があります。名前のマングリングと呼び出し規約を制御できるため、これが最も簡単です。オーバーヘッドを最小限に抑えるための最善の方法は、シミュレーションコードを完全にc ++に保持し、おそらくそれが属している可能性があり、更新を取得するためにC#レイヤーのみを呼び出すことです。相互運用性のペナルティを最小限に抑える唯一の方法は、電話をかける回数を減らすことです。他のアドバイス(/安全でないなど)は、パフォーマンスの観点からは役に立たないことがわかりました。このタイプのプログラムの相互作用と構造の例は、私のプロジェクトのリポジトリであるStochfitで見ることができます。

于 2009-07-27T16:22:11.410 に答える
0

関数呼び出しを「静的」として宣言し(これが違いを生むかどうかはわかりませんが)、ベンチマークでDLL呼び出しを組み込みのC#ランダムクラスと比較していることを確認してください。Intelコードがはるかに高速になるかどうかはわかりませんが、誰が知っていますか?

于 2009-07-27T16:04:47.047 に答える
0

1)リンクには「MicrosoftVisualStudioとの統合の改善が含まれています」と書かれています

2)評価版があります

だから、やってみませんか?Intelがすでに必要なバインディングを提供している可能性があります。か否か。少なくとも、無駄なソフトウェアにお金を浪費することはありません。

于 2009-07-27T16:46:56.197 に答える
0

これは、C#の高品質で効率的な乱数ジェネレーターです。このコードは、C++を呼び出す方が効率的です。C ++コードがゼロ時間で実行されたとしても、マネージコードからアンマネージコードに移動したり、元に戻したりするオーバーヘッドがあります。

于 2009-07-27T18:30:00.653 に答える
0

明らかな場合とそうでない場合があります。マネージドコードとアンマネージドコードの境界を越えた呼び出しは遅いため、このルートを使用する場合は、呼び出し時間を償却するために、乱数のブロックを大量に取得する必要があります。

于 2009-07-27T18:51:33.637 に答える
0

Intelには、C# http: //software.intel.com/en-us/articles/using-intel-mkl-in-your-c-programからMKLを呼び出す方法を示す一連の例があります。

于 2009-10-30T19:38:51.087 に答える