2011-02-11 6 views
0

私が理解するところでは、JITはMSILをx86上でMMX命令を利用するネイティブマシンコードにコンパイルしません。これが当てはまる場合(私はこの問題に関する最新の情報を見つけるのが苦労しているので)、自分のコードでMMXを利用する方法が必要です。私はほぼすべての単精度浮動小数点数の乗算(これは人工ニューラルネットワークです)を行うアプリケーションに取り組んでいます。私は基本的にこの問題についていくつか質問しています。マネージC++を使用したMMXの使用

私が最初に、同じプロジェクトで管理対象コードとアンマネージコードを混在させると、「It Just Works」のためMSILにコンパイルされませんか?管理されていないパーツをスタティックライブラリやダイナミックライブラリとして作成し、コンパイルして管理プロジェクトで使用すると、最高のパフォーマンスが得られますか?

OpenCL(またはCUDAではGPUを使用していましたが、ATIでは動作しませんでしたが、そうしたい場合はコンパイルされたGPUコードを呼び出さなくてはなりません管理されていないC++?

私は、管理されたGUIとマルチスレッドを使用することができ、MMXのような拡張機能を使用することができる最善の方法を探しています唯一のそのようなことをやって行くことがあるかもしれない最良の方法は何ですか。)CPUを使用したい?

感謝。

+0

あなたの質問に直接答えはありませんが、パフォーマンスを向上させるためにニューラルネットワークのアルゴリズムやその使い方を改善しないかもしれないのだろうか?あなたは非常によくスピードを必要とするかもしれませんが、多くのニューラルネットワークプロジェクトが、貧弱なニューラルアーキテクチャ、パラメータの過剰探査、弱いデータ設計などに苦しんでいることを見てきました。 – Predictor

答えて

3

MMXは整数命令セットであり、浮動小数点ではありません。 64ビットのパックドバイト、ワード、ダブルワードの整数のみをサポートしています。 SSEには浮動小数点サポートがあります。マシンコードとMSILの生成を切り替えるには、コードで#pragma managedを使用します。

0

をあなたがmを混在させることができますanagedコードとunmanagedコード。管理対象の人だけがMSILにコンパイルされます。残りはネイティブです。

管理対象と非管理対象の間にはコストがかかりますが、それほど悪くはありません。

私はすべての高性能のものをし、管理されたコードからそれを使用するネイティブライブラリを書くだろう。

0

私の最初は、私は同じプロジェクトでマネージコードとアンマネージコードを混在させる場合は、コンパイルされない場合は

番号を「それはちょうどワークス」ので、それはすべてのMSILにコンパイルされていない、あります/clr:pureとすると、ネイティブコードをネイティブにして、.NETコードと混在させることができます。これは混合モードアセンブリと呼ばれます。 (/clr:pureで、すべてがILに変わり、ネイティブコードはまったく使用できません。)ネイティブコードはネイティブコードのままです。

関連する問題