0

単純なベクトル数学関数を比較するこの小さなサブルーチンを作成し、ループで実行します。

f(i) = a(i) + b(i)

または直接:

f = a + b

またはインテル® MKL VML を使用:

vdAdd(n、a、b、f)

n=50000000 のタイミング結果は次のとおりです。

VML 0.9 秒 ダイレクト 0.4 ループ 0.4

そして、なぜ VML が他の方法の 2 倍の時間がかかるのか理解できません! (ループは直接よりも速い場合があります)

サブルーチンはhttp://paste.ideaslabs.com/show/L6dVLdAOIfの下に あり、経由で呼び出すことができます

program test

  use vmltests
  implicit none

  call vmlTest()

end program
4

1 に答える 1

1

サンプル コードには潜在的な L2 キャッシュの問題があります。ブロッキング最適化で解決できます。詳細については、インテル® ソフトウェア ネットワーク フォーラムの回答を参照してください: http://software.intel.com/en-us/forums/showthread.php?t=80041

インテル® 最適化に関する通知:

インテル® コンパイラー、関連ライブラリー、および関連開発ツールには、インテル® マイクロプロセッサーとインテル以外のマイクロプロセッサーの両方で使用可能な命令セット (SIMD 命令セットなど) を最適化するオプションが含まれているか利用されている場合がありますが、インテル以外のマイクロプロセッサーに対しては等しく最適化されていません。 . さらに、Intel コンパイラの特定のコンパイラ オプション (Intel マイクロアーキテクチャに固有ではないものを含む) は、Intel マイクロプロセッサ用に予約されています。インテル® コンパイラー・オプションの詳細な説明 (命令セットや特定のマイクロプロセッサーを含む) については、「インテル® コンパイラー・ユーザーおよびリファレンス・ガイド」の「コンパイラー・オプション」を参照してください。インテル® コンパイラー製品の一部である多くのライブラリー・ルーチンは、他のマイクロプロセッサーよりもインテルのマイクロプロセッサー向けに高度に最適化されています。インテル® コンパイラー製品のコンパイラーとライブラリーは、インテルとインテル互換のマイクロプロセッサーの両方に最適化を提供しますが、選択したオプション、コード、およびその他の要因に応じて、インテルのマイクロプロセッサーでさらなるパフォーマンスが得られる可能性があります。

インテル® コンパイラー、関連ライブラリー、および関連開発ツールは、インテル製マイクロプロセッサーに固有ではない最適化のために、インテル製以外のマイクロプロセッサーに対して同程度に最適化される場合とされない場合があります。これらの最適化には、インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2)、インテル® ストリーミング SIMD 拡張命令 3 (インテル® SSE3)、サプリメンタル ストリーミング SIMD 拡張命令 3 (インテル® SSSE3) 命令セットおよびその他の最適化が含まれます。インテルは、インテル製以外のマイクロプロセッサーでの最適化の可用性、機能、または有効性を保証しません。この製品のマイクロプロセッサ依存の最適化は、Intel マイクロプロセッサでの使用を目的としています。

インテルは、インテルのコンパイラーとライブラリーが、インテル® およびインテル以外のマイクロプロセッサーで最高のパフォーマンスを得るのに役立つ優れた選択肢であると考えていますが、他のコンパイラーとライブラリーを評価して、要件を最も満たすものを決定することをお勧めします。あらゆるコンパイラまたはライブラリの最高のパフォーマンスを提供するよう努めることで、お客様のビジネスを獲得したいと考えています。見つからない場合はお知らせください

于 2011-01-18T08:39:20.807 に答える