私たちのプロジェクトでは、「Enable Enhanced Instruction Set」フラグが設定されていないままになっていることに気付きました。おそらく単なる見落としです。
フラグを有効にする前に、それを有効にした実際のパフォーマンスの改善を見た人がいるかどうか尋ねたいですか?
私たちのアプリケーションが常に浮動小数点ベースの計算を行ういくつかの改善が見られると思いますが、それは主要な部分ではありません.
私たちのプロジェクトでは、「Enable Enhanced Instruction Set」フラグが設定されていないままになっていることに気付きました。おそらく単なる見落としです。
フラグを有効にする前に、それを有効にした実際のパフォーマンスの改善を見た人がいるかどうか尋ねたいですか?
私たちのアプリケーションが常に浮動小数点ベースの計算を行ういくつかの改善が見られると思いますが、それは主要な部分ではありません.
つまり、簡単に言うと、この設定では、SSE命令に直接マッピングされる特定の組み込み関数のみが有効になります。通常のC++プログラムでは、これらの組み込み関数を使用しないため、この設定によってパフォーマンスが向上することはありません。
より高いパフォーマンスが必要な場合は、SSE命令を使用するようにコードを書き換えるコンパイラーを探すことができます(Intelはコンパイラーが使用できると主張しています)が、マルチコア(openMPまたは.net 4.0を使用)を使用するか、GPUを使用する方がおそらく賢明です、SSEよりも高速で柔軟性があります。
パフォーマンスの利点は、プロジェクトで集中的な数学的計算を使用するかどうかによって異なります。多くのタスク (ネットワーキング、テキスト処理、データ管理) では、浮動小数点演算が使用されていない (またはほとんど使用されていない) ため、これは当てはまりません。したがって、パフォーマンスの向上はまったくありません。
コンパイラによって生成された SSE/SSE2 命令を使用しても、最高のパフォーマンスは得られません。まず、実際のコード生成を制御することはできません。古いシステムでレガシー (x87) コードを使用し、新しいシステムで SSE/SSE2 対応コードを使用する必要があるシナリオがあります。また、ほとんどの最新システムで SSE3 を利用することもできます。そのためには、cpuid
命令を使用してプロセッサの種類を確認し、プロセッサの機能を最大限に活用できる実装に切り替えることをお勧めします。その後、SSE/SSE2 をターゲットとする実装でコンパイラ組み込み関数を使用できます。SSE3 をターゲットにするには、インターネット上で見つけようとしている専用のライブラリが必要です。
プロセッサの機能を分析し、最適なコードの切り替えを可能にするライブラリが存在するに違いないと私は信じています。私もネットで調べるのに少し時間が必要です。