インテル® MKL 2017 デベロッパー・ガイド
インテル® MKL には、アプリケーションからライブラリー関数を呼び出したときに浮動小数点の演算結果で条件付き数値再現性 (CNR) が得られるように支援する関数と環境変数が用意されています。これらの新しいコントロールを使用すると、次の条件の下で関数がビット単位で数値再現性のある浮動小数点結果を返す場合、インテル® MKL を特別なモードで実行することができます。
一般的な単精度および倍精度 IEEE 浮動小数点数では、結合則が常に満たされるとは限らない、つまり (a+b)+c = a +(b+c) が成り立たない場合があることは有名です。特定の例について考えてみます。無限の精度では、数学的には 2-63 + 1 + -1 = 2-63 となります。この同じ計算を倍精度浮動小数点数を使用するコンピューターで実行する場合、丸め誤差が発生するため、演算の順序が重要になります。
(2-63 + 1) + (-1) ≃ 1 + (-1) = 0
vs
2-63 + (1 + (-1)) ≃ 2-63 + 0 = 2-63
新しい機能は、この演算の順序によって結果が一貫しない問題に対応しています。
単一実行ファイル内の浮動小数点演算の順序に影響するアプリケーション関連の要因には、ランライム・プロセッサー・ディスパッチに基づくコードパスの選択、データ配列のアライメント、スレッド数における変化、マルチスレッド・アルゴリズム、内部浮動小数点の制御設定が含まれます。スレッド数と浮動小数点の設定を制御し、メモリーを割り当てるときにアライメントすることで、ほとんどの要因を制御することができます (詳細は、ナレッジベースの記事『インテル® MKL を使用して一貫した演算結果を得る』 (英語) を参照してください)。ただし、ランタイム・ディスパッチと特定のマルチスレッド・アルゴリズムでは、ユーザーが実行ごとに演算の順序が同じになるように変更することはできません。
インテル® MKL は、アプリケーションに呼び出されたインテル® MKL 関数で走査する適切な内部コードパスを特定するために、ランタイム・プロセッサー・ディスパッチを行います。選択されるコードパスは、インテル® プロセッサーおよび互換プロセッサーの種類によって異なり、さまざまなレベルのパフォーマンスが提供されます。例えば、インテル® MKL 関数をインテル® Pentium® 4 プロセッサーで実行した場合に選択されるコードパスと、最新のインテル® Xeon® プロセッサーで実行した場合に選択されるコードパスは異なります。この違いは、各コードパスが実行しているプロセッサーで利用可能な機能を活用するように最適化されているためです。プロセッサーの新しい機能をプログラマーが区別する主要な方法として、命令セット・アーキテクチャー (ISA) によるものがあります。インテル® MKL のコード分岐は、最適化に使用する ISA によって、インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) からインテル®アドバンスト・ベクトル・エクステンション 2 (インテル® AVX2) までのいずれかで指定されます。機能ベースのアプローチには課題もあります。内部浮動小数点演算が異なる順序で行われたり、関連付けが変更されると、計算結果は異なります。
コードを実行しているプロセッサーの機能に基づいて最適化されたコードパスをディスパッチすることが、インテル® MKL で使用される最適化アプローチのメインです。一貫した結果を得るには、パフォーマンスの低下は避けられません。特定のコードパスに制限される場合、状況によってはインテル® MKL のパフォーマンスが大幅に低下することがあります。例えば、インテル® AVX2 命令をサポートする新しいプロセッサーでは、行列乗算のパフォーマンスがほぼ 2 倍になることに注意してください。コード分岐が制限されない場合でも、新しい機能では演算の順序を維持するためにアルゴリズムが制限されるため、パフォーマンスは 10-20% 低下します。
最適化に関する注意事項 |
---|
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。 注意事項の改訂 #20110804 |