概要
はじめに
ディレクトリ構造の概要
ディレクトリ構造の詳細
インテル MKL の構成
インテル MKL へのアプリケーションのリンク
スレッド化
著作権/法律に基づく表示
本ガイドは、インストール後に実行する必要のある手順や簡単な使用例など、インテル® マス・カーネル・ライブラリ (インテル® MKL) Linux* 版の習得に役立つ情報を提供します。アプリケーションのライブラリへのリンク方法、ライブラリの構成方法、その他の基本的な手順について説明します。
本ガイドは、インテル MKL が既にマシンにインストールされていることを前提として説明しています。
製品をまだインストールしていない場合は、「インテル® MKL インストール・ガイド」 (Install.txt ファイル) を参照してください。
インテル MKL のインストール後、インストールとライブラリの構成が適切に行われたかどうかを次の手順で確認すると良いでしょう。
インストール後のインテル MKL のディレクトリ構造を以下に示します。ライブラリのインストール時に指定した、マシン上のインストール・ディレクトリ内に mkl\8.0 ディレクトリが作成されます。
mkl/8.0 | メイン・ディレクトリ | |
mkl/8.0/doc | ドキュメント・ディレクトリ | |
mklEULA.txt | インテル MKL ライセンス | |
Doc_Index.htm | インテル MKL ドキュメント・インデックス | |
Getting_Started.htm | インテル MKL 入門ガイド (本ガイド) | |
Install.txt | インストール・ガイド | |
Readme.txt | 製品に関する基本情報 | |
Release_Notes.htm | リリースノート | |
Release_Notes.txt | リリースノート (テキスト形式) | |
mklman.pdf | インテル MKL リファレンス・マニュアル (英語) | |
mklman61_j.pdf | インテル MKL リファレンス・マニュアル (日本語) | |
mklqref/index.htm | インテル MKL クイック・リファレンス | |
mklsupport.txt | サポート用のパッケージ ID 情報 | |
mkluse.htm | インテル MKL テクニカル・ユーザー・ノート | |
vmlnotes.htm | VML の概要 | |
vslnotes.pdf | VSL の概要 | |
mkl/8.0/examples | ソースおよびデータ例 | |
mkl/8.0/include | ライブラリ・ルーチンの INCLUDE ファイル、テストの INCLUDE ファイル、プログラム例 | |
mkl/8.0/tests | テストのソースおよびデータ | |
mkl/8.0/lib/32 | IA-32 アプリケーション用スタティック・ライブラリおよび共有オブジェクト | |
mkl/8.0/lib/em64t | インテル® エクステンデッド・メモリー 64 テクノロジー (インテル® EM64T) 対応プロセッサ上で実行されるアプリケーション用スタティック・ライブラリおよび共有オブジェクト | |
mkl/8.0/lib/64 | インテル® Itanium® 2 プロセッサ用スタティック・ライブラリおよび共有オブジェクト | |
mkl/8.0/tools/builder | 動的にリンク可能なカスタム・ライブラリを作成するためのツール | |
mkl/8.0/tools/environment | ユーザー・シェルで環境変数を設定するシェル・スクリプト | |
mkl/8.0/tools/support | インテル(R) プレミア・サポートへパッケージ ID とライセンス・キー情報を報告するためのユーティリティ |
インテル MKL では、IA-32 プロセッサ用、インテル EM64T 対応プロセッサ用、およびインテル Itanium 2 プロセッサ用に、別々のライブラリを用意しています。
インテル MKL は、次の 2 つで構成されています。
libmkl_ia32.a
、libmkl_em64t.a
、および libmkl_ipf.a
内のプロセッサ固有のカーネル
高度なライブラリはプロセッサに関係なく最適化されているため、インテル® Pentium® プロセッサから IA-32 アーキテクチャ採用の Pentium 4 プロセッサまで、さまざまなプロセッサ上で効果的に使用することができます。BLAS、CBLAS、スパース BLAS、FFT、DFT、VML、VSL、および区間演算ルーチンを含むプロセッサ固有のカーネルは、それぞれのプロセッサ用に最適化されています。
また、スレッド化アプリケーションは次のように提供されます。
libguide.a)
libguide40.dll
)
ライブラリの詳細なディレクトリ構造を次に示します。
lib/32 | 32 ビット・アプリケーション用のすべてのライブラリ | |||
libmkl_ia32.a | Pentium プロセッサ、Pentium III プロセッサ、Pentium 4 プロセッサ用に最適化されたカーネル | |||
libmkl_lapack.a | LAPACK ルーチンおよびドライバ | |||
libmkl_lapack95.a | LAPACK ルーチンおよびドライバに対する Fortran-95 インターフェイス | |||
libmkl_blas95.a | BLAS ルーチンおよびドライバに対する Fortran-95 インターフェイス | |||
libmkl_solver.a | スパース・ソルバ・ルーチン | |||
libguide.a | スタティック・リンク用スレッディング・ライブラリ | |||
libmkl.so | プロセッサ固有のカーネルを動的にロードするためのライブラリ・ディスパッチャ | |||
libmkl_lapack32.so | 単精度データ型 LAPACK ルーチンおよびドライバ | |||
libmkl_lapack64.so | 倍精度データ型 LAPACK ルーチンおよびドライバ | |||
libmkl_def.so | デフォルトのカーネル (Pentium プロセッサ、Pentium Pro プロセッサ、Pentium | libmkl_p3.so | Pentium III プロセッサ用カーネル | |
libmkl_p4.so | Pentium 4 プロセッサ用カーネル | |||
libmkl_p4p.so | ストリーミング SIMD 拡張命令 3 (SSE3) 対応インテル Pentium 4 プロセッサ用カーネル | |||
libvml.so | プロセッサ固有の VML カーネルを動的にロードするためのライブラリ・ディスパッチャ | |||
libmkl_vml_def.so | デフォルト・カーネルの VML 部分 (Pentium プロセッサ、Pentium Pro プロセッサ、Pentium | 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_ias.so | 区間演算ルーチン | |||
libguide.so | ダイナミック・リンク用スレッディング・ライブラリ | |||
lib/em64t | インテル EM64T 対応アプリケーション用のすべてのライブラリ | |||
libmkl_em64t.a | インテル EM64T 対応プロセッサ用に最適化されたカーネル | |||
libmkl_lapack.a | LAPACK ルーチンおよびドライバ | |||
libmkl_lapack95.a | LAPACK ルーチンおよびドライバに対する Fortran-95 インターフェイス | |||
libmkl_blas95.a | BLAS ルーチンおよびドライバに対する Fortran-95 インターフェイス | |||
libmkl_solver.a | スパース・ソルバ・ルーチン | |||
libguide.a | スタティック・リンク用スレッディング・ライブラリ | |||
libmkl.so | プロセッサ固有のカーネルを動的にロードするためのライブラリ・ディスパッチャ | |||
libmkl_lapack32.so | 単精度データ型 LAPACK ルーチンおよびドライバ | |||
libmkl_lapack64.so | 倍精度データ型 LAPACK ルーチンおよびドライバ | |||
libmkl_def.so | デフォルトのカーネル | |||
libmkl_p4n.so | インテル EM64T 対応インテル® Xeon (TM) プロセッサ用カーネル | |||
libvml.so | プロセッサ固有の VML カーネルを動的にロードするためのライブラリ・ディスパッチャ | |||
libmkl_vml_def.so | デフォルト・カーネルの VML 部分 | |||
libmkl_vml_p4n.so | インテル EM64T 対応インテル Xeon プロセッサ用 VML | |||
libmkl_ias.so | 区間演算ルーチン | |||
libguide.so | ダイナミック・リンク用スレッディング・ライブラリ | |||
lib/64 | Itanium 2 ベース・アプリケーション用のすべてのライブラリ | |||
libmkl_ipf.a | Itanium 2 プロセッサ用カーネル | |||
libmkl_lapack.a | LAPACK ルーチンおよびドライバ | |||
libmkl_lapack95.a | LAPACK ルーチンおよびドライバに対する Fortran-95 インターフェイス | |||
libmkl_blas95.a | BLAS ルーチンおよびドライバに対する Fortran-95 インターフェイス | |||
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 カーネルを動的にロードするためのライブラリ・ディスパッチャ |
インテル 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_lapack95.a
: LAPACK95 インターフェイス。
libmkl_blas95.a
: BLAS95 インターフェイス。
libmkl_lapack.a
、libmkl_lapack32.so、
および lib_mkl_lapack64.so
: LAPACK 関数。
libmkl_ia32.a、
libmkl_em64t.a、
および libmkl_ia64.a
: IA-32 プロセッサ、インテル EM64T 対応プロセッサ、Itanium プロセッサ用の BLAS、スパース BLAS、FFT/DFT、VML、VSL、および区間演算関数。
libmkl.so
: 動的にロードされるこれらのオブジェクト (ただし、libvml.so
に含まれる VML/VSL 用のオブジェクトは除く)。
すべての場合において、ランタイム時に適切なカーネルがロードされます。IA-32 システム上でインテル® コンパイラを使用してリンクする場合の例をいくつか以下に示します。
ifort myprog.f -L$MKLPATH -lmkl_lapack -lmkl_ia32 -lguide -lpthread
IA-32 アプリケーション用 LAPACK およびカーネルのスタティック・リンク。プロセッサ・ディスパッチャにより、システムに対する適切なカーネルがランタイム時に呼び出されます。
ifort myprog.f -L$MKLPATH -lmkl_lapack95 -lmkl_lapack -lmkl_ia32 -lguide -lpthread
IA-32 アプリケーション用 Fortran-95 LAPACK インターフェイスおよびカーネルのスタティック・リンク。プロセッサ・ディスパッチャにより、システムに対する適切なカーネルがランタイム時に呼び出されます。
icc myprog.c -L$MKLPATH -lmkl_ia32 -lguide -lpthread -lm
IA-32 アプリケーション用 BLAS、スパース BLAS、VML/VSL、区間演算、および FFT/DFT のスタティック・リンク。プロセッサ・ディスパッチャにより、システムに対する適切なカーネルがランタイム時に呼び出されます。
ifort myprog.f -L$MKLPATH -lmkl_solver -lmkl_lapack -lmkl_ia32 -lguide -lpthread
IA-32 アプリケーション用スパースソルバおよび (スパースソルバをサポートするのに必要なカーネルを含む) インテル MKL 内のその他のルーチンのスタティック・リンク。
icc myprog.c -L$MKLPATH -lmkl -lguide -lpthread
IA-32 アプリケーション用 BLAS またはインテル MKL 内の FFT のダイナミック・リンク。
注意: ランタイム時に適切なカーネルがロードされるように、LD_LIBRARY_PATH 環境変数を設定して、適切なライブラリのパスをインクルードする必要があります。
Libguide ライブラリは、スタティックな場合も、ダイナミックな場合も同じ名前です。上記の libguide の例では、共有オブジェクトを使用してリンクするダイナミックな場合について示しています。スタティック・リンクを実行する場合には、 –static フラグを使用するか、次のように明示的なスタティック形式を使用します。
ld myprog.o $MKLPATH/libmkl_lapack.a $MKLPATH/libmkl_ia32.a $MKLPATH/libguide.a -lpthread
IA-32 用スタティック・リンク、LAPACK ライブラリ、IA-32 プロセッサ用カーネル。プロセッサ・ディスパッチャにより、システムに対する適切なカーネルがランタイム時に呼び出されます。
ld myprog.o $MKLPATH/libmkl_lapack.a $MKLPATH/libmkl_ipf.a
$MKLPATH/libguide.a -lpthread
Itanium ベース・アプリケーション用 LAPACK およびカーネルのスタティック・リンク。プロセッサ・ディスパッチャにより、システムに対する適切なカーネルがランタイム時に呼び出されます。
インテル MKL を使用したリンクおよびアプリケーションの実行に関する詳細は、「インテル MKL テクニカル・ユーザー・ノート」を参照してください。
リンク例は、インテル MKL サポート Web サイトよりご覧いただけます。
http://www.intel.com/support/jp/performancetools/
インテル MKL は、多くの箇所でスレッド化されています。また、 OpenMP* を使用しています。
OpenMP ソフトウェアは、使用するスレッド数を設定する OMP_NUM_THREADS
環境変数を基にスレッド化を実行します。スレッド数は、プログラムを実行するシェルで設定することができます。
変数 OMP_NUM_THREADS
が設定されていないと、インテル MKL はスレッド数を 1 とみなして実行します (ただし、スパースソルバの場合はデフォルトのスレッド数である、システムのプロセッサ数が使用されます)。OMP_NUM_THREADS
はアプリケーションで使用するプロセッサ数に設定しておくことを推奨します。
スレッド数を変更するには、プログラムを実行するコマンドライン・シェルで次のように入力します。
export OMP_NUM_THREADS=
<使用するスレッド数>
インテル MKL のテクニカル情報に関する詳細は、「インテル MKL テクニカル・ユーザー・ノート 」 (mkluse.htm) を参照してください。
本資料に掲載されている情報は、インテル製品の概要説明を目的としたものです。本資料は、明示、黙示、禁反言またはその他の如何を問わず、いかなる知的財産権のライセンスを許諾するためのものではありません。製品に付属の売買契約書『Intel's Terms and conditions of Sales』に規定されている場合を除き、インテルはいかなる責を負うものではなく、またインテル製品の販売や使用に関する明示または黙示の保証(特定目的への適合性、商品性に関する保証、第三者の特許権、著作権、その他、知的所有権を侵害していないことへの保証を含む)に関しても一切責任を負わないものとします。インテル製品は、医療、救命、延命措置などの目的に使用することを前提としたものではありません。
本資料およびこれに記載されているソフトウェアはライセンス契約に基づいて提供されるものであり、その使用および複製はライセンス契約で定められた条件下でのみ許可されます。本資料で提供される情報は、情報供与のみを目的としたものであり、予告なしに変更されることがあります。また、本資料で提供される情報は、インテルによる確約と解釈されるべきものではありません。インテルは本資料の内容およびこれに関連して提供されるソフトウェアにエラー、誤り、不正確な点が含まれていたとしても一切の責任を負いません。
「未使用 (reserved)」、「未定義 (undefined)」と記述されている機能や命令に関しては、今後新たに定義づけが行われる可能性があるため、設計には利用しないようご注意ください。これらの機能や命令を設計に利用した場合、定義の追加によって機能性や互換性などの面でいかなる問題が生じてもインテルは一切その責を負いません。
本資料で説明されているソフトウェアは、設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みの不具合については、インテルまでお問い合わせください。
Intel、インテル、Itanium、Pentium、Xeon は、米国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
* その他の社名、製品名などは、一般に各社の商標または登録商標です。
(C) 2005, Intel Corporation.