インテル® マス・カーネル・ライブラリー 9.0 Linux* 版入門ガイド 

資料番号: 310704-003J

目次

概要
はじめに
    ディレクトリー構造の概要
    ディレクトリー構造の詳細
インテル MKL の構成
アプリケーションとインテル MKL のリンク
スレッド化
著作権と商標について

 

概要

本ガイドは、インストール後に実行する必要のある手順や簡単な使用例など、インテル® マス・カーネル・ライブラリー (インテル® MKL) Linux* 版の習得に役立つ情報を提供します。アプリケーションのライブラリーへのリンク方法、ライブラリーの構成方法、その他の基本的な手順について説明します。

本ガイドは、インテル MKL が既にマシンにインストールされていることを前提として説明しています。

製品をまだインストールしていない場合は、「インストール・ガイド」 (Install.txt ファイル) を参照してください。

 

はじめに

インテル MKL のインストール後、インストールとライブラリーの構成が適切に行われたかどうかを次の手順で確認すると良いでしょう。 

  1. 指定したインストール・ディレクトリーが作成されたか確認します。デフォルトは、/opt/intel/mkl/9.0 です。
  2. 複数のバージョンのインテル MKL をマシンにインストールしている場合は、ビルドスクリプトを更新して、使用するバージョンのインテル MKL を指定します。
  3. 次の 3 ファイルが tools/environment ディレクトリーに配置されていることを確認します。
    mklvars32.sh
    mklvarsem64t.sh
    mklvars64.sh

    これらのファイルを使用して、ユーザーシェルで環境変数 INCLUDE および LD_LIBRARY_PATH を設定することができます。

 

ディレクトリー構造の概要

インストール後のインテル MKL のディレクトリー構造を以下に示します。

mkl/9.0 メイン・ディレクトリー
mkl/9.0/doc ドキュメント・ディレクトリー
  mklEULA.txt インテル MKL ライセンス
  Doc_Index.htm インテル MKL ドキュメント・インデックス
  fftw2xmkl_notes.htm FFTW 2.x インターフェイス・サポート・テクニカル・ユーザー・ノート
  fftw3xmkl_notes.htm FFTW 3.x インターフェイス・サポート・テクニカル・ユーザー・ノート
  fft2dfti.pdf インテル MKL FFT から DFTI ラッパー・テクニカル・ユーザー・ノート
  Getting_Started.htm インテル MKL 入門ガイド (本ガイド)
  Install.txt インストール・ガイド
  mklman.pdf インテル MKL リファレンス・マニュアル
  mklman80_j.pdf インテル MKL リファレンス・マニュアル (日本語)
  mklqref/index.htm インテル MKL クイック・リファレンス
  mklsupport.txt サポート用のパッケージ ID 情報
  mkluse.htm インテル MKL テクニカル・ユーザー・ノート
  Readme.txt 製品に関する基本情報
  redist.txt 再配布可能なファイルの一覧
  Release_Notes.htm リリースノート
  Release_Notes.txt リリースノート (テキスト形式)
  userguide.pdf ユーザーズガイド
  vmlnotes.htm VML の概要
  vslnotes.pdf VSL の概要
mkl/9.0/man/man3 インテル MKL BLAS、スパース BLAS、および LAPACK (補助なし) 関数の man ページ
mkl/9.0/examples ソースおよびデータ例
mkl/9.0/include ライブラリー・ルーチンの INCLUDE ファイル、テストの INCLUDE ファイル、プログラム例
mkl/9.0/interfaces/blas95 BLAS 用の f95 ラッパーとライブラリーのビルド用 makefile
mkl/9.0/interfaces/lapack95 LAPACK 用の f95 ラッパーとライブラリーのビルド用 makefile
mkl/9.0/interfaces/fftw2xc インテル MKL DFTI を呼び出す FFTW バージョン 2.x 用のラッパー (C インターフェイス)
mkl/9.0/interfaces/fftw2xf インテル MKL DFTI を呼び出す FFTW バージョン 2.x 用のラッパー (Fortran インターフェイス)
mkl/9.0/interfaces/fftw3xc インテル MKL DFTI を呼び出す FFTW バージョン 3.x 用のラッパー (C インターフェイス)
mkl/9.0/interfaces/fftw3xf インテル MKL DFTI を呼び出す FFTW バージョン 3.x 用のラッパー (Fortran インターフェイス)
mkl/9.0/interfaces/fftc インテル MKL DFTI を呼び出す FFT 用のラッパー (C インターフェイス)
mkl/9.0/interfaces/fftf インテル MKL DFTI を呼び出す FFT 用のラッパー (Fortran インターフェイス)
mkl/9.0/tests テストのソースおよびデータ
mkl/9.0/lib/32 IA-32 アプリケーション用スタティック・ライブラリーおよび共有オブジェクト
mkl/9.0/lib/em64t インテル® 64 プロセッサー上で実行されるアプリケーション用スタティック・ライブラリーおよび共有オブジェクト
mkl/9.0/lib/64 インテル® Itanium® 2 プロセッサー用スタティック・ライブラリーおよび共有オブジェクト
mkl/9.0/tools/builder 動的にリンク可能なカスタム・ライブラリーを作成するためのツール
mkl/9.0/tools/environment ユーザーシェルで環境変数を設定するシェルスクリプト
mkl/9.0/tools/support インテル® プレミアサポートへパッケージ ID とライセンスキー情報を報告するためのユーティリティー
mkl/9.0/tools/plugins/com.intel.mkl.help WebHelp 形式のインテル MKL リファレンス・マニュアルを含む Eclipse プラグイン。このプラグインについては、Doc_Index.htm を参照。

 

ディレクトリー構造の詳細

インテル MKL では、IA-32 プロセッサー用、インテル 64 プロセッサー用、およびインテル Itanium 2 プロセッサー用に、別々のライブラリーを用意しています。

インテル MKL は、次の 2 つで構成されています。

ハイレベルなライブラリーは、特定のプロセッサーを対象とせずに最適化されているため、インテル® Pentium® プロセッサーからインテル® Core™2 Extreme プロセッサー・ファミリーやインテル Itanium 2 プロセッサーまでのプロセッサーで効果的に使用することができます。BLAS、スパース BLAS、CBLAS、GMP、FFT、DFT、VML、VSL、および区間演算ルーチンを含むプロセッサー固有のカーネルは、それぞれのプロセッサー用に最適化されています。

また、スレッド化アプリケーションは次のように提供されます。

ライブラリーの詳細なディレクトリー構造を次に示します。

lib/32 32 ビット・アプリケーション用のすべてのライブラリー
  libmkl_ia32.a 32 ビット・アプリケーション用に最適化されたカーネル (BLAS、CBLAS、スパース BLAS、GMP、FFT、DFT、VML、VSL、区間演算)
  libmkl_lapack.a LAPACK ルーチンおよびドライバー
  libmkl_solver.a スパース・ソルバー・ルーチン
  libguide.a スタティック・リンク用スレッディング・ライブラリー
  libmkl.so プロセッサー固有のカーネルを動的にロードするためのライブラリー・ディスパッチャー
  libmkl_lapack32.so 単精度データ型 LAPACK ルーチンおよびドライバー
  libmkl_lapack64.so 倍精度データ型 LAPACK ルーチンおよびドライバー
  libmkl_def.so デフォルトカーネル (インテル Pentium プロセッサー、インテル Pentium Pro プロセッサー、およびインテル Pentium II プロセッサー)
  libmkl_p3.so インテル Pentium III プロセッサー・カーネル
  libmkl_p4.so インテル Pentium 4 プロセッサー・カーネル
  libmkl_p4p.so ストリーミング SIMD 拡張命令 3 (SSE3) 対応インテル Pentium 4 プロセッサー用カーネル
  libmkl_p4m.so インテル Core マイクロアーキテクチャー・ベースのプロセッサー用カーネル
  libvml.so プロセッサー固有の VML カーネルを動的にロードするためのライブラリー・ディスパッチャー
  libmkl_vml_def.so デフォルトカーネルの VML 部分 (インテル Pentium プロセッサー、インテル Pentium Pro プロセッサー、インテル Pentium II プロセッサー)
  libmkl_vml_p3.so インテル Pentium III プロセッサー用カーネルの VML 部分
  libmkl_vml_p4.so インテル Pentium 4 プロセッサー用カーネルの VML 部分
  libmkl_vml_p4p.so ストリーミング SIMD 拡張命令 3 (SSE3) 対応インテル Pentium 4 プロセッサー用 VML
  libmkl_vml_p4m.so インテル Core マイクロアーキテクチャー・ベースのプロセッサー用 VML
  libmkl_ias.so 区間演算ルーチン
  libguide.so ダイナミック・リンク用スレッディング・ライブラリー
 
  interfaces フォルダーにある makefile を処理すると、追加のインターフェイス・ライブラリーが生成されます。セクションの最後にあるリストを参照。
   
lib/em64t インテル 64 対応アプリケーション用のすべてのライブラリー
  libmkl_em64t.a インテル 64 プロセッサー用に最適化されたカーネル
  libmkl_lapack.a LAPACK ルーチンおよびドライバー
  libmkl_solver.a スパース・ソルバー・ルーチン
  libguide.a スタティック・リンク用スレッディング・ライブラリー
  libmkl.so プロセッサー固有のカーネルを動的にロードするためのライブラリー・ディスパッチャー
  libmkl_lapack32.so 単精度データ型 LAPACK ルーチンおよびドライバー
  libmkl_lapack64.so 倍精度データ型 LAPACK ルーチンおよびドライバー
  libmkl_def.so デフォルトのカーネル
  libmkl_p4n.so インテル 64 対応インテル® Xeon® プロセッサー用カーネル
  libmkl_mc.so インテル Core マイクロアーキテクチャー・ベースのプロセッサー用カーネル
  libvml.so プロセッサー固有の VML カーネルを動的にロードするためのライブラリー・ディスパッチャー
  libmkl_vml_def.so デフォルトカーネルの VML 部分
  libmkl_vml_p4n.so インテル 64 対応インテル Xeon プロセッサー用 VML
  libmkl_vml_mc.so インテル Core マイクロアーキテクチャー・ベースのプロセッサー用 VML
  libmkl_ias.so 区間演算ルーチン
  libguide.so ダイナミック・リンク用スレッディング・ライブラリー
 
  interfaces フォルダーにある makefile を処理すると、追加のインターフェイス・ライブラリーが生成されます。セクションの最後にあるリストを参照。
   
lib/64 Itanium 2 ベース・アプリケーション用のすべてのライブラリー
  libmkl_ipf.a インテル Itanium 2 プロセッサー用カーネル
  libmkl_lapack.a LAPACK ルーチンおよびドライバー
  libmkl_solver.a スパース・ソルバー・ルーチン
  libguide.a スタティック・リンク用スレッディング・ライブラリー
  libmkl_lapack32.so 単精度データ型 LAPACK ルーチンおよびドライバー
  libmkl_lapack64.so 倍精度データ型 LAPACK ルーチンおよびドライバー
  libguide.so ダイナミック・リンク用スレッディング・ライブラリー
  libmkl.so プロセッサー固有のカーネルを動的にロードするためのライブラリー・ディスパッチャー
  libmkl_i2p.so Itanium 2 プロセッサー用カーネル
  libmkl_vml_i2p.so Itanium 2 プロセッサー用 VML カーネル
  libmkl_ias.so 区間演算ルーチン
  libvml.so プロセッサー固有の VML カーネルを動的にロードするためのライブラリー・ディスパッチャー

以下のインターフェイス・ライブラリーとモジュールは、interfaces フォルダーにある makefile を処理すると生成されます。

libmkl_blas95.a BLAS 用の Fortran-95 ラッパー (BLAS95)
libmkl_lapack95.a LAPACK 用の Fortran-95 ラッパー (LAPACK95)
libfftw2xc_gnu.a インテル MKL DFTI を呼び出す FFTW バージョン 2.x 用のインターフェイス (GNU コンパイラー用 C インターフェイス)
libfftw2xc_intel.a インテル MKL DFTI を呼び出す FFTW バージョン 2.x 用のインターフェイス (インテル・コンパイラー用 C インターフェイス)
libfftw2xf_gnu.a インテル MKL DFTI を呼び出す FFTW バージョン 2.x 用のインターフェイス (GNU コンパイラー用 Fortran インターフェイス)
libfftw2xf_intel.a インテル MKL DFTI を呼び出す FFTW バージョン 2.x 用のインターフェイス (インテル・コンパイラー用 Fortran インターフェイス)
libfftw3xc_gnu.a インテル MKL DFTI を呼び出す FFTW バージョン 3.x 用のインターフェイス (GNU コンパイラー用 C インターフェイス)
libfftw3xc_intel.a インテル MKL DFTI を呼び出す FFTW バージョン 3.x 用のインターフェイス (インテル・コンパイラー用 Fortran インターフェイス)
libfftw3xf_gnu.a インテル MKL DFTI を呼び出す FFTW バージョン 3.x 用のインターフェイス (GNU コンパイラー用 Fortran インターフェイス)
libfftw3xf_intel.a インテル MKL DFTI を呼び出す FFTW バージョン 3.x 用のインターフェイス (インテル・コンパイラー用 Fortran インターフェイス)
mkl95_blas.mod BLAS 用の Fortran-95 インターフェイス・モジュール (BLAS95)
mkl95_lapack.mod LAPACK 用の Fortran-95 インターフェイス・モジュール (LAPACK95)
mkl95_precision.mod BLAS95 および LAPACK95 用精度パラメーターの Fortran-95 定義

 

インテル MKL の構成

インストール後、tools/environment ディレクトリーにあるファイル mklvars32.sh、mklvarsem64t.sh、mklvars64.sh を使用して、ユーザーシェルで環境変数 INCLUDELD_LIBRARY_PATH を設定できます。

インテル MKL の機能をさらにカスタマイズする場合は、構成ファイル mkl.cfg を使用します。このファイルには、変更可能な変数が含まれています。構成ファイルの使用に関する詳細は、「テクニカル・ユーザー・ノート 」を参照してください。

 

アプリケーションとインテル MKL のリンク

インテル MKL のライブラリーへリンクするための一般的な形式を次に示します。

<リンクするファイル>
-L<MKL パス>
[-lmkl_solver] [-lmkl_lapack95] [-lmkl_blas95]
{[-lmkl_lapack] -lmkl_{ia32, em64t, ipf},[-lmkl_lapack{32,64}] -lmkl, -lvml}
-lguide -lpthread

各ファイルには、次のものが含まれています。
libmkl_solver.a: スパースソルバー関数。
libmkl_lapack.alibmkl_lapack32.so および lib_mkl_lapack64.so: LAPACK 関数。
libmkl_ia32.a libmkl_em64t.a、および libmkl_ia64.a: IA-32 プロセッサー、インテル 64 プロセッサー、インテル Itanium プロセッサー用の BLAS、スパース BLAS、GMP、FFT/DFT、VML、VSL、および区間演算関数。
libmkl_lapack95.a libmkl_blas95.a: それぞれ LAPACK95 インターフェイスと BLAS95 インターフェイス。これらは、オリジナルのディストリビューションには含まれないため、インターフェイスを使用する前にビルドする必要があります (ライブラリーのビルドについての詳細は、次の「Fortran-95 インターフェイスおよび LAPACK と BLAS へのラッパーを使用する際の注意」を参照してください)。

libmkl.so: 動的にロードされるこれらのオブジェクト (ただし、 libvml.so に含まれる VML/VSL 用のオブジェクトは除く)。

すべての場合において、ランタイム時に適切なライブラリーがロードされます。IA-32 システム上でインテル・コンパイラーを使用してリンクする場合の例をいくつか以下に示します。

ifort myprog.f -L$MKLPATH -lmkl_lapack -lmkl_ia32 -lguide -lpthread
        ユーザーコード myprog.f、LAPACK、カーネルのスタティック・リンク。プロセッサー・ディスパッチャーにより、システムに対する適切なカーネルがランタイム時に呼び出されます。
ifort myprog.f -L$MKLPATH -lmkl_lapack95 -lmkl_lapack -lmkl_ia32 -lguide -lpthread
        ユーザーコード myprog.f、Fortran-95 LAPACK インターフェイス、カーネルのスタティック・リンク。プロセッサー・ディスパッチャーにより、システムに対する適切なカーネルがランタイム時に呼び出されます。
ifort myprog.f -L$MKLPATH -lmkl_blas95 -lmkl_lapack -lmkl_ia32 -lguide -lpthread
        ユーザーコード myprog.f、Fortran-95 BLAS インターフェイス、カーネルのスタティック・リンク。プロセッサー・ディスパッチャーにより、システムに対する適切なカーネルがランタイム時に呼び出されます。
icc myprog.c -L$MKLPATH -lmkl_ia32 -lguide -lpthread -lm
        ユーザーコード myprog.c、BLAS、スパース BLAS、GMP、VML/VSL、区間演算、および FFT/DFT のスタティック・リンク。プロセッサー・ディスパッチャーにより、システムに対する適切なカーネルがランタイム時に呼び出されます。
ifort myprog.f -L$MKLPATH -lmkl_solver -lmkl_lapack -lmkl_ia32 -lguide -lpthread
        ユーザーコード myprog.f、スパースソルバーおよび (スパースソルバーをサポートするのに必要なカーネルを含む) インテル MKL のその他のルーチンのスタティック・リンク。
icc myprog.c -L$MKLPATH -lmkl -lguide -lpthread
        ユーザーコード myprog.c、インテル MKL の BLAS または FFT のスタティック・リンク。

注意: libguide を静的にリンクする場合 (非推奨)

インテル MKL に動的にリンクする場合 (libguide.so) (推奨)、LD_LIBRARY_PATH が定義されていることを確認し、正確にこのバージョンの libguide が検出され、ランタイム時に使用されるようにしてください。

インテル MKL を使用したリンクおよびアプリケーションの実行に関する詳細は、「テクニカル・ユーザー・ノート」 (mkluse.htm) を参照してください。

リンク例は、インテル MKL サポート Web サイトよりご覧いただけます。 http://support.intel.com/support/jp/performancetools/index.htm

 

Fortran-95 インターフェイスおよび LAPACK と BLAS へのラッパーを使用する際の注意

Fortran-95 インターフェイスは、純粋なプロシージャーのために、ラッパーとともにソースとして提供されます。これらを使用する最も簡単な方法は、対応するライブラリーをビルドし、ユーザー・ライブラリーとしてリンクする方法です。この方法では、ユーザーは管理者権限を保持していることが前提です。製品ディレクトリーに書き込み権限があれば、手順は簡単です。mkl/9.0/interfaces/blas95 または mkl/9.0/interfaces/lapack95 に移動し、次のコマンドを入力します。

make PLAT=lnx32 lib       - IA32 の場合
make PLAT=lnx32e lib     - インテル 64 の場合
make PLAT=lnx64 lib       - インテル Itanium 2 プロセッサー・プラットフォームの場合

この結果、必要なライブラリーと .mod ファイルがビルドされ、リリースの標準カタログにインストールされます。.mod ファイルは、ifort -c mkl_lapack.f90 インターフェイスまたは ifort -c mkl_blas.f90 インターフェイスのファイルからも入手できます。ファイルは include ディレクトリーに保存されています。
管理者権限がない場合は、次の操作を行ってください。

  1. ディレクトリー全体 (mkl/9.0/interfaces/blas95 または mkl/9.0/interfaces/lapack95) をユーザー定義のディレクトリー <user_dir> にコピーします。
  2. 対応するファイル (mkl_blas.f90 または mkl_lapack.f90) を mkl/9.0/include からユーザー定義のディレクトリー <user_dir>/blas95 または <user_dir>/lapack95 にそれぞれコピーします。
  3. <user_dir>/blas95 または <user_dir>/lapack95 で環境変数を追加し、上記コマンドを実行します。例を以下に示します。
    make PLAT=lnx32 INTERFACE=mkl_blas.f90 lib
    make PLAT=lnx32 INTERFACE=mkl_lapack.f90 lib.

これで、必要なライブラリーと .mod ファイルがビルドされ、それぞれ <user_dir>/blas95 ディレクトリーまたは <user_dir>/lapack95 ディレクトリーにインストールされます。

デフォルトでは、ifort コンパイラーが使用されると想定されています。make FC=<compiler> のパラメーターでこれを変更することができます。例を以下に示します。
make PLAT=lnx64 FC=<compiler> lib

上級ユーザーの場合は、ライブラリーをビルドしなくてもインターフェイスを使用することができます。

ビルド・ディレクトリーからライブラリーを削除するには、次のコマンドを使用します。
make PLAT=lnx32 clean       - IA32 の場合
make PLAT=lnx32e clean     - インテル 64 の場合
make PLAT=lnx64 clean       - インテル Itanium 2 プロセッサー・プラットフォームの場合

 

スレッド化

インテル MKL は、多くの個所でスレッド化されています。また、OpenMP* ソフトウェアを使用しています。

OpenMP ソフトウェアは、使用するスレッド数を設定する OMP_NUM_THREADS 環境変数を基にスレッド化を実行します。スレッド数は、プログラムを実行するシェルで設定することができます。

変数 OMP_NUM_THREADS が設定されていない場合、インテル MKL はスレッド数を 1 として実行します (ただし、スパースソルバーの場合は、デフォルトのスレッド数であるシステムのプロセッサー数が使用されます)。OMP_NUM_THREADS は、常にアプリケーションで使用するプロセッサー数に設定しておくことを推奨します。

1D FFT における 2 の累乗データについては、インテル MKL はインテル Itanium プロセッサー用にのみ並列化を行うことに注意してください。

スレッド数を変更するには、プログラムを実行するコマンドライン・シェルで次のように入力します。

export OMP_NUM_THREADS=<使用するスレッド数>


インテル MKL のテクニカル情報に関する詳細は、「テクニカル・ユーザー・ノート 」 (mkluse.htm) を参照してください。


 

著作権と商標について

本資料に掲載されている情報は、インテル製品の概要説明を目的としたものです。本資料は、明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず、いかなる知的財産権のライセンスを許諾するためのものではありません。製品に付属の売買契約書『Intel's Terms and Conditions of Sale』に規定されている場合を除き、インテルはいかなる責を負うものではなく、またインテル製品の販売や使用に関する明示または黙示の保証 (特定目的への適合性、商品性に関する保証、第三者の特許権、著作権、その他、知的所有権を侵害していないことへの保証を含む) にも一切応じないものとします。インテル製品は、医療、救命、延命措置、重要な制御または安全システム、核施設などの目的に使用することを前提としたものではありません。
インテル製品は、予告なく仕様や説明が変更される場合があります。

本資料で説明されているソフトウェアには、不具合が含まれている可能性があり、公開されている仕様とは異なる動作をする場合があります。現在までに判明している不具合の情報については、インテルのサポートサイトをご覧ください。

本資料およびこれに記載されているソフトウェアはライセンス契約に基づいて提供されるものであり、その使用および複製はライセンス契約で定められた条件下でのみ許可されます。本資料で提供される情報は、情報供与のみを目的としたものであり、予告なく変更されることがあります。また、本資料で提供される情報は、インテルによる確約と解釈されるべきものではありません。インテルは本資料の内容およびこれに関連して提供されるソフトウェアにエラー、誤り、不正確な点が含まれていたとしても一切責任を負わないものとします。

ライセンス契約で許可されている場合を除き、インテルからの文書による承諾なく、本書のいかなる部分も複製したり、検索システムに保持したり、他の形式や媒体によって転送したりすることは禁じられています。

機能または命令の一覧で「留保」または「未定義」と記されているものがありますが、その「機能が存在しない」あるいは「性質が留保付である」という状態を開発の前提にしないでください。留保または未定義の機能を不適当な方法で使用すると、開発したソフトウェア・コードをインテル・プロセッサー上で実行する際に、予測不可能な動作や障害が発生するおそれがあります。これらの機能や命令は、インテルが将来のために留保しているものです。不正な使用により、衝突が生じたり互換性が失われたりしても、インテルは一切責任を負いません。

Intel、インテル、Intel ロゴ、Intel Core、Itanium、Pentium、Xeon は、米国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。

* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

© 2005-2006 Intel Corporation.