1

C# と Visual Basic と .NET CLR は、ユーザー インターフェイスや基幹業務アプリケーションなどの優れた開発環境です。

ただし、実行タイミングが前後するコードをたくさん書いておりO(n^3): n > 1000、いくつかの場所ではそれよりも高くなっています。基本的に、これらのループは 1 つの大きな配列から読み取り、簡単な計算を行い、5 つまたは 6 つのテストを行い、結果を同じサイズの 2 つ目の配列に書き込みます。

そのほとんどは、Intel Fortran プログラムを 64 ビットの世界に持ち込むために移植されたコードです。そのコードの自動ベクトル化を行わないと、実行時間が大幅に遅くなることに注意してください。.NET は、現在販売されているすべての Intel プロセッサに見られる SIMD 操作の使用をサポートしていません。

熟練したプログラマーが移植できる厳密なアルゴリズムで関数が既に記述されているため、そのプログラマーにコードを C++ CLR ライブラリに移植するように依頼することもアプローチの 1 つかもしれないと考えました。

  • 自動ベクトル化され、C#/VB プログラムが呼び出すための CLR インターフェイスを提供する C++ ライブラリを取得することは可能ですか?
  • いいえの場合、回避策はありますか? COM インターフェイスはそのような回避策の 1 つですか?
  • はいの場合、それはどのような形を取る必要がありますか?
4

1 に答える 1

2

もちろん問題ありません。C++/CLI クラス ライブラリ プロジェクトは、ネイティブ C++ コードを直接呼び出すことができるマネージ ラッパー ( ref クラス) を作成する方法を提供します。このようなクラスは、マネージ コードで直接使用できます。

ネイティブ C++ コードで自動ベクトル化と自動並列化を行うには、VS2012 以降が必要です。マネージド コードからアンマネージド コードへの遷移とその逆の遷移の数が最小限になるように相互運用レイヤーを設計することが重要になる場合があります。つまり、一度に 1 つのdouble値をコピーしないでください。

于 2014-01-31T21:59:50.497 に答える