質問

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

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

または直接:

f = a + b

またはIntel MKL VMLを使用してください:

vdadd(n、a、b、f)

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

VML 0.9 Sec Direct 0.4ループ0.4

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

サブルーチンは下にあります http://paste.ideaslabs.com/show/l6dvldaoif通りました

program test

  use vmltests
  implicit none

  call vmlTest()

end program
役に立ちましたか?

解決

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

Intel®最適化通知:

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

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

Intelは、コンパイラとライブラリがIntel®および非Intelマイクロプロセッサで最高のパフォーマンスを取得するのを支援するための優れた選択肢であると考えていますが、Intelは、他のコンパイラとライブラリを評価して、要件を最適に満たすものを決定することをお勧めします。コンパイラやライブラリの最高のパフォーマンスを提供するよう努めて、あなたのビジネスを獲得したいと考えています。私たちがそうしないことがわかった場合はお知らせください

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top