インテル® MKL 2017 デベロッパー・ガイド
インテル® Xeon Phi™ コプロセッサーでインテル® MKL のパフォーマンスを向上させるには、以下のインテル® MIC アーキテクチャー固有の設定を行います。「コーディング手法」で説明されている一般的なパフォーマンス向上の推奨事項も使用できます。
詳細は、ナレッジベースの記事 (http://software.intel.com/en-us/articles/performance-tips-of-using-intel-mkl-on-intel-xeon-phi-coprocessor (英語)) を参照してください。
多くのインテル® MKL ルーチンは、2MB ページで割り当てられたメモリーで入出力データを処理すると、より少ないページ数でより多くのメモリーへのアドレスが可能になり、デフォルトのページサイズ (4K) でメモリーを割り当てた場合よりも仮想メモリーアドレスと物理メモリーアドレスの変換に伴うオーバーヘッドが減少するため、パフォーマンスが向上します。詳細は、『Intel® 64 and IA-32 Architectures Optimization Reference Manual』(英語) および『Intel® 64 and IA-32 Architectures Software Developer's Manual』(英語) を参照してください (http://www.intel.com/ の Find Content ボックスにドキュメントの名前を入力)。
メモリーを 2MB ページで割り当てるには、MAP_HUGETLB フラグを付けて mmap システムコールを使用します。または、libhugetlbfs ライブラリーを使用することもできます。詳細は、ホワイトペーパー (http://software.intel.com/sites/default/files/Large_pages_mic_0.pdf) を参照してください。
サイズが 2MB を超え、offload プラグマで転送するデータに対して 2MB ページのメモリー割り当てを可能にするには、MIC_USE_2MB_BUFFERS 環境変数を適切な値に設定します。これにより、ランタイムの長さがこの環境変数の値を超えるポインターベースの変数はすべて、2MB ページに割り当てられます。例えば、MIC_USE_2MB_BUFFERS=64K に設定すると、ランタイムの長さが 64KB を超えるポインターベースの変数は、2MB ページに割り当てられます。詳細は、インテル® ソフトウェア・ドキュメント・ライブラリー (英語) にある『Intel® Compiler User and Reference Guides』を参照してください。
自動オフロード計算に使用できる最大コプロセッサー・メモリーを指定すると、インテル® MKL は自動オフロード計算中にコプロセッサーのメモリーを予約して確保するため、パフォーマンスが向上します。最大メモリーを指定するには、MKL_MIC_MAX_MEMORY 環境変数に値を設定します。
インテル® MKL FFT 関数のパフォーマンスを向上させるには、以下の推奨事項に従ってください。
入力データの最初の要素を 64 バイト境界でアライメントします。
2 次元以上の単精度変換では、8 で割り切れ、16 で割り切れないリーディング・ディメンジョン (ストライド) を使用します。
2 次元以上の倍精度変換では、4 で割り切れ、8 で割り切れないリーディング・ディメンジョン (ストライド) を使用します。
ほかのインテル® MKL 関数ドメインについては、一般的な「コーディング手法」を使用します。
FFT では、変換操作の入出力データの合計サイズに応じて適切なスレッド数を使用します。
合計サイズが Number-of-Phi-Cores*0.5MB より小さい場合は 2 の累乗
合計サイズが Number-of-Phi-Cores*0.5MB より大きい場合は 4*Number-of-Phi-Cores
Number-of-Cores は、システムのインテル® Xeon Phi™ コプロセッサーの数です。
詳細は、「スレッド化を使用してパフォーマンスを向上する」および「コプロセッサーの OpenMP* スレッド数の設定決定」を参照してください。
インテル® MKL ルーチンのパフォーマンスを向上するには、すべての関数ドメインに対し KMP_AFFINITY=balanced を設定します。
インテル® MKL ルーチンのパフォーマンスを向上するには、tbb::affinity_partitioner クラスを使用します。
スレッド数を調整するには (例えば、 FFT のスレッド数など)、tbb::task_scheduler_init クラスを使用します。
詳細は、インテル® TBB ドキュメント (https://www.threadingbuildingblocks.org/documentation) を参照してください。
最適化に関する注意事項 |
---|
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。 注意事項の改訂 #20110804 |