Intel Math Kernel Library Version 11.1 (Windows 版 ) ~ 活 用 ガイド~ 2014 年 8 月 8 日 作 成 版
インテル MKL について 最 適 化 各 世 代 のインテル プロセッサーがサポートする 拡 張 命 令 セット(SSE また はインテル AVX など)の 使 用 キャッシュメモリの 活 用 など 実 行 環 境 に 応 じて 適 切 なコードを 選 択 ( 自 動 ディスパッチャー) 並 列 化 OpenMP による 共 有 メモリ 環 境 での 並 列 化 (マルチスレッド) MPIによる 分 散 メモリ 環 境 での 並 列 化 (マルチプロセス) C/C++ 言 語 および Fortran 言 語 から 利 用 可 能 動 的 リンクまたは 静 的 リンクを 選 択 可 能 シングルスレッド/マルチスレッドバージョンを 選 択 可 能 実 行 および 再 配 布 におけるロイヤリティーフリー ( 詳 細 や 制 限 については 使 用 許 諾 をご 確 認 ください) Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 2
利 用 可 能 な 関 数 ( 演 算 処 理 機 能 ) BLAS, Sparse BLAS( 基 本 線 形 代 数 演 算 ) LAPACK( 連 立 1 次 方 程 式 固 有 値 および 最 小 二 乗 問 題 ) スパース ソルバー PARDISO および DSS インターフェイスルーチン( 直 接 法 ソルバー) RCI(Reverse Communication Interface)による 反 復 法 ソルバー 数 学 関 数 :VML(Vector Math Library) 統 計 関 数 :VSL(Vector Statistical Library) RNG( 乱 数 発 生 器 ) 相 関 および 畳 み 込 み 演 算 サマリー 統 計 ライブラリー FFT( 高 速 フーリエ 変 換 ) FFTW インターフェイスを 含 む 偏 微 分 方 程 式 (PDE)のサポート TT(sin/cos 変 換 など), Laplace / Poisson / Helmholtz ソルバー 非 線 形 最 適 化 問 題 (TR: 信 頼 領 域 法 ) データフィッティング(スプライン 補 間 ) クラスター 対 応 ルーチン:PBLAS, ScaLAPACK, BLACS, クラスター FFT Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 3
MKL 開 発 環 境 Windows* Linux* OS X* コンパイラー Intel CVF Microsoft Intel GNU Intel GNU ライブラリー.lib.dll.a.so.a.dylib ドメイン Fortran 77 Fortran 90/95 C/C++ BLAS CBLAS 経 由 Sparse BLAS Level 1 CBLAS 経 由 Sparse BLAS Level 2&3 LAPACK ScaLAPACK PARDISO DSS & ISS VML / VSL FFT / Cluster FFT PDEs Optimization (TR) Solvers SSL Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 4
ビルド 環 境 (コマンドライン) Windows の [スタート] メニューからインテル コンパイラー 専 用 コマンドプロンプトを 起 動 ( 必 要 な 環 境 変 数 が 自 動 で 設 定 される) Windows 8 Windows 7 例 ) インテル 64 Visual Studio 2013 モード を 選 択 した 場 合 Composer XE 2013 SP1 bin ipsxe-comp-vars.bat intel64 (スクリプトコール) Inspector XE 2013 inspxe-vars.bat VTune Amplifier XE 2013 amplxe-vars.bat compilervars.bat intel64 vs2013 (スクリプトコール) tbb bin tbbvars.bat intel64 vs2013 mkl bin mklvars.bat intel64 vs2013 MKLROOT= Composer XE 2013 SP1 mkl PATH= Composer XE 2013 SP1 redist intel64 mkl Composer XE 2013 SP1 redist intel64 compiler LIB= Intel Composer XE 2013 SP1 mkl lib intel64 Intel Composer XE 2013 SP1 compiler lib intel64 INCLUDE= Intel Composer XE 2013 SP1 mkl include ipp bin ippvars.bat intel64 vs2013 compilervars_arch.bat intel64 vs2013 Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 5
Fortran 95 モジュールの 環 境 設 定 以 下 の 環 境 変 数 設 定 ファイルに mod 引 数 を 指 定 して 手 動 で 環 境 設 定 する <インストールディレクトリ> mkl bin mklvars.bat mklvars.bat ia32 mod INCLUDE= Intel Composer XE 2013 SP1 mkl include Intel Composer XE 2013 SP1 mkl include ia32 mklvars.bat intel64 mod lp64 INCLUDE= Intel Composer XE 2013 SP1 mkl include Intel Composer XE 2013 SP1 mkl include intel64 lp64 mklvars.bat intel64 mod ilp64 INCLUDE= Intel Composer XE 2013 SP1 mkl include Intel Composer XE 2013 SP1 mkl include intel64 ilp64 <インストールディレクトリ>(デフォルト) C: Program Files (x86) Intel C: Program Files Intel (x64システム) (x86システム) Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 6
リンク アドバイザー ツールのご 利 用 http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor または <インストール フォルダー> Documentation en_us mkl mkl_link_line_advisor.htm 1 各 種 項 目 を 選 択 項 目 内 容 バージョン OS コプロセッサーの 利 用 使 用 コンパイラー アーキテクチャー リンク 方 法 Integer のビット 幅 シングル/マルチスレッド OpenMPライブラリーの 使 用 クラスターライブラリーの 使 用 MPIの 選 択 Fortranでの 使 用 設 定 動 的 リンクライブラリーの 明 記 2 必 要 なリンク 情 報 と コンパイルオプションが 表 示 される Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 7
リンクモデル 静 的 リンク 動 的 リンク カスタム 動 的 リンク 動 的 リンク(Single Dynamic Library (SDL) interface の 利 用 ) 静 的 リンク 動 的 リンク カスタム 動 的 リンク 動 的 リンク(SDL) CPU ディスパッチ 自 動 自 動 再 コンパイル 自 動 最 適 化 全 CPU 全 CPU 全 CPU 全 CPU ビルド 方 法 呼 出 関 数 名 トータル バイナ リー サイズ アプリケーション サイズ 静 的 リンク ラ イブラリーの リンク 通 常 の 関 数 名 インポート ライ ブラリーのリン ク カスタムビルドしたイン ポート ライブラリーの リンク mkl_rt.lib ライブラ リーのリンク 通 常 の 関 数 名 通 常 の 関 数 名 通 常 の 関 数 名 小 さい 大 きい 小 さい 非 常 に 大 きい 小 さい 非 常 に 小 さい 非 常 に 小 さい 非 常 に 小 さい マルチスレッド 可 能 可 能 可 能 可 能 Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 8
リンク レイヤー モデル 1 インターフェイス レイヤー 呼 出 規 約 (cdecl / stdcall) Integer タイプ(LP64 / ILP64) 2 スレッドレイヤー シーケンシャル バージョン(Sequential) マルチスレッド バージョン(Thread) 3 計 算 レイヤー 計 算 コア ライブラリー 4 ランタイム レイヤー インテル 提 供 OpenMP ランタイム ライブラリー MKL 関 数 (ソースコード) インターフェイス スレッド 計 算 ランタイム 例 )Windows インターフェイス(.lib) スレッド(.lib) 計 算 (.lib) ランタイム (.lib) IA-32 静 的 リンク mkl_intel_c mkl_sequential mkl_core IA-32 動 的 リンク mkl_intel_c_dll mkl_intel_thread_dll mkl_core_dll libiomp5md Intel64 静 的 リンク mkl_intel_lp64 mkl_intel_thread mkl_core libiomp5md Intel64 動 的 リンク mkl_intel_ilp64_dll mkl_sequential_dll mkl_core_dll IA-32 / Intel64 動 的 リンク(SDL) mkl_rt Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 9
代 表 的 な MKL ライブラリー IA-32/ 静 的 IA-32/ 動 的 Intel64 / 静 的 Intel64 / 動 的 インターフェイス レイヤー mkl_intel_c.lib (cdecl) mkl_intel_c_dll.lib (cdecl) mkl_intel_lp64.lib (LP64) mkl_intel_lp64_dll.lib (LP64) mkl_intel_s.lib (stdcall) mkl_intel_s_dll.lib (stdcall) mkl_intel_ilp64.lib (ILP64) mkl_intel_ilp64_dll.lib (ILP64) mkl_rt.lib(sdl) mkl_rt.lib(sdl) スレッドレイヤー mkl_intel_thread.lib (マルチスレッド) mkl_intel_thread_dll.lib (マルチスレッド) mkl_intel_thread.lib (マルチスレッド) mkl_intel_thread_dll.lib (マルチスレッド) mkl_sequential.lib (シングルスレッド) mkl_sequential_dll.lib (シングルスレッド) mkl_sequential.lib (シングルスレッド) mkl_sequential_dll.lib (シングルスレッド) 計 算 レイヤー mkl_core.lib mkl_core_dll.lib mkl_core.lib mkl_core_dll.lib RTL レイヤー libiomp5md.lib libiomp5md.lib libiomp5md.lib libiomp5md.lib 詳 細 は 製 品 の MKL ユーザーズガイドの 付 録 C: 詳 細 なディレクトリー 構 造 を 参 照 Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 10
コマンド 例 例 1)Windows/IA-32 対 応 インテル コンパイラー/ 静 的 リンク/シングルスレッド > icl myprog.c mkl_intel_c.lib mkl_sequential.lib mkl_core.lib > ifort myprog.f mkl_intel_c.lib mkl_sequential.lib mkl_core.lib 例 2)Windows/Intel64 対 応 インテル コンパイラー/ 動 的 リンク/マルチスレッド > icl myprog.c mkl_intel_lp64_dll.lib mkl_intel_thread_dll.lib mkl_core_dll.lib libiomp5md.lib > ifort myprog.f mkl_intel_lp64_dll.lib mkl_intel_thread_dll.lib mkl_core_dll.lib libiomp5md.lib 例 3)Windows/インテル コンパイラー/ 動 的 リンク(SDL 利 用 ) > icc myprog.c mkl_rt.lib > ifort myprog.f mkl_rt.lib 例 4)Windows/インテル コンパイラー/ 静 的 リンク/マルチスレッド > icc myprog.c /Qmkl:parallel /MT > ifort myprog.f /Qmkl:parallel /MT Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 11
Visual Studio からのリンク(Visual C++ 使 用 ) プロジェクトの [プロパティページ] からそれぞれの 内 容 を 設 定 する MKL インクルード ファイルへ のディレクトリー 追 加 MKL ライブラリーの 追 加 MKL ライブラリーへのディレクトリー 追 加 Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 12
Visual Studio からのリンク(Intel Compiler 使 用 ) Visual Studio 2013 でインテル C++ Composer XE 製 品 をご 使 用 の 場 合 は プロジェクトの [プロパティ ページ] の インテル(R) パフォーマンス ライブラリー から MKL のビルド 環 境 設 定 が 可 能 静 的 / 動 的 リンクの 指 定 は プロジェクトの [プロパティ ページ] の [C/C++] [コード 生 成 ] [ランタイム ライブラリ] の 設 定 内 容 (/MT /MD など)で 決 定 される Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 13
VSからのリンク(インテル Visual Fortran Composer XE) インテル Visual Fortran Composer XE 製 品 をご 使 用 の 場 合 は プロジェクト の[プロパティ ページ] の インテル(R) マス カーネル ライブラリーの 使 用 から MKL のビルド 環 境 設 定 が 可 能 静 的 / 動 的 リンクの 指 定 は プロジェクトの [プロパティ ページ] の [Fortran] [ライブラリー] [ランタイム ライブラリー] の 設 定 内 容 で 決 定 される Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 14
MKL ランタイム ライブラリー 実 行 環 境 で 必 要 となる MKL ランタイム ライブラリー <インストール ディレクトリー> redist ia32 mkl *.dll <インストール ディレクトリー> redist intel64 mkl *.dll 例 )C: Program Files (x86) Intel Composer XE 2013 SP1 redist intel64 mkl 再 配 布 可 能 ファイル 一 覧 は 以 下 のファイルを 参 照 <インストール ディレクトリー> Documentation ja_jp mkl redist.txt Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 15
MKL ランタイム ライブラリー( 続 き) インテル OpenMP ランタイム ライブラリー(libiomp5md.dll) マルチスレッド( 並 列 ) 用 の MKL ライブラリーをリンクした 場 合 は 実 行 環 境 に libiomp5md.dll ランタイム ライブラリーが 必 要 となります <インストール ディレクトリー> redist ia32 compiler libiomp5md.dll <インストール ディレクトリー> redist intel64 compiler libiomp5md.dll または 以 下 のURL からランタイム 環 境 構 築 のパッケージをインストールします http://software.intel.com/en-us/articles/redistributable-libraries-for-theintel-c-and-visual-fortran-composer-xe-for-windows/ Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 16
マルチスレッド 対 応 多 数 の MKL 関 数 がマルチスレッド 化 されている 詳 細 は 製 品 の MKL ユーザーズガイドの [パフォーマンスとメモリーの 管 理 ] [ 並 列 処 理 の 使 用 ] [スレッド 化 される 関 数 とスレッド 化 される 問 題 ] を 参 照 MKL のマルチスレッドは OpenMP で 実 装 されている MKL は スレッドセーフに 作 成 されているので 複 数 のスレッドから 同 時 に 呼 び 出 し 安 全 に 使 用 することができる MKL 関 数 は 並 列 実 行 領 域 内 からコールされる 場 合 それを 検 知 してシングルス レッドで 動 作 する マルチスレッド MKL 関 数 を 使 用 する 場 合 は プログラムを /MT オプションでビル ドしたほうが 効 果 的 MKL_DYNAMIC=TRUE がデフォルト 設 定 で スレッド 数 は 物 理 コア 数 となる また MKL_DYNAMIC=FALSE とした 場 合 でも データ 量 が 少 ない 場 合 は マルチスレッドしない 場 合 がある mkl_set_dynamic() 関 数 でも 設 定 可 能 Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 17
スレッド 数 の 制 御 方 法 環 境 変 数 : OMP_NUM_THREADS MKL_NUM_THREADS MKL_DOMAIN_NUM_THREADS 関 数 : omp_set_num_threads() ; mkl_set_num_threads() ; mkl_domain_set_num_threads() ; 環 境 変 数 を 使 用 する 場 合 は プログラムの 実 行 中 で 設 定 を 変 更 することはできない 優 先 順 位 の 基 準 : MKL > OpenMP mkl_domain_set_... > mkl_set_... 関 数 > 環 境 変 数 1. mkl_domain_set_num_threads(); 2. MKL_DOMAIN_NUM_THREADS 3. mkl_set_num_threads(); 4. MKL_NUM_THREADS 5. omp_set_num_threads(); 6. OMP_NUM_THREADS 設 定 例 :(Windows) mkl_domain_set_num_threads ( 2, MKL_BLAS ); MKL_DOMAIN_NUM_THREADS="MKL_ALL=1, MKL_BLAS=4" mkl_set_num_threads(2); MKL_NUM_THREADS=4 omp_set_num_threads(2); OMP_NUM_THREADS=4 Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 18
パフォーマンス Tips データ アライメントは16バイト 境 界 が 効 果 的 mkl_malloc 関 数 が 利 用 できる 例 ) メモリー 取 得 :mkl_malloc( sizeof(double)*workspace, 16 ); メモリー 解 放 :mkl_free( darray ); HT テクノロジーの 無 効 化 スレッド 間 で 同 様 な 計 算 が 実 施 されるので HT テクノロジーを 有 効 利 用 で きない 可 能 性 が 高 い アフィニティー マスクの 利 用 スレッドを 特 定 のコアに 常 に 割 り 当 てたほうが 効 果 的 例 )set KMP_AFFINITY=granularity=fine,compact,1,0 /FTZ /DAZ の 有 効 化 デノーマル 浮 動 小 数 点 演 算 の 回 避 Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 19
MKL メモリー 管 理 機 能 MKL 関 数 によって 暗 黙 的 に 取 得 利 用 されるメモリー 領 域 は 再 利 用 の 目 的 で アプリケーションが 終 了 するまで 解 放 されない このために メモリーリークと 判 断 される 場 合 がある mkl_mem_stat() 関 数 で そのメモリー 量 を 取 得 できる mkl_free_buffers() 関 数 で そのメモリー 領 域 を 解 放 できる MKL_DISABLE_FAST_MM 環 境 変 数 または mkl_disable_fast_mm() 関 数 で メモリー 管 理 機 能 を 無 効 化 すること ができる Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 20
MKL サンプルコード サンプルコード 配 置 場 所 <インストール ディレクトリー> mkl examples 演 算 処 理 機 能 ごとに C Fortran 言 語 の2 種 類 が 用 意 されている ドメイン/ 言 語 別 の MKL 関 数 の 利 用 方 法 が 分 かる 各 フォルダーに 含 まれる Make ファイルより リンクライブラリーが 分 かる Copyright 1998-2014 XLsoft Corporation. All Rights Reserved. 21