C/C++ 言語環境からの LAPACK、BLAS、CBLAS ルーチンの呼び出し

すべてのインテル® マス・カーネル・ライブラリー (インテル® MKL) 関数ドメインで C と Fortran 環境の両方をサポートしているとは限りません。 インテル® MKL Fortran 形式の関数を C/C++ 環境で使用するには、この後で説明されている LAPACK と BLAS の特定の規則に従う必要があります。

Caution icon警告

BLAS 95/LAPACK 95 を C/C++ から呼び出さないでください。この呼び出しには、Fortran 90 型の遅延形状配列のディスクリプターを処理する機能が必要となります。また、BLAS95/LAPACK95 ルーチンには Fortran RTL へのリンクが含まれています。

LAPACK および BLAS

LAPACK と BLAS ルーチンは Fortran 形式のため、C 言語プログラムから呼び出す場合、以下の Fortran 形式の呼び出し規則に従う必要があります。

C で採用されている行優先で、配列が格納されているメモリーを全検索すると、最後の配列インデックスが最も速く変更され、最初の配列インデックスが最も遅く変更されます。Fortran 形式の列優先では、最後のインデックスが最も遅く変更され、最初のインデックスが最も速く変更されます (下記の図の 2 次元配列を参照)。

例えば、サイズ m x n の 2 次元行列 A が 1 次元配列 B に格納されている場合、行列の要素は以下のようにアクセスされます。

C の場合: A[i][j] = B[i*n+j] (i=0, ... , m-1, j=0, ... , -1)         

Fortran の場合: A(i,j) = B(j*m+i) (i=1, ... , m, j=1, ... , n)  

LAPACK または BLAS ルーチンを C から呼び出す場合、Fortran 言語は大文字と小文字を区別しないことに注意してください。LAPACK ルーチンの名前には大文字と小文字の両方を使用できます (末尾の下線の有無を含む)。例えば、以下の名前は等価です。

BLAS ルーチンの C からの呼び出しについては、「例 "複素レベル 1 BLAS 関数の C++ からの呼び出し"」を参照してください。

LAPACK 関数用 C インターフェイスの説明は、『インテル® MKL リファレンス・マニュアル』を参照してください。

CBLAS

BLAS ルーチンを C 言語プログラムから呼び出す代わりに、CBLAS インターフェイスを使用することができます。

CBLAS は、BLAS ルーチンの C 形式のインターフェイスです。通常の C 形式の呼び出しを使用して CBLAS ルーチンを呼び出すことができます。CBLAS インターフェイスでは mkl.h ヘッダーファイルを使用してください。 ヘッダーファイルには、すべての関数の列挙値とプロトタイプが指定されています。また、プログラムが C++ コンパイラーでコンパイルされているかどうかが判断されます。コンパイルされている場合、インクルード・ファイルは C++ コンパイル用に設定されます。 例 "BLAS を C から直接呼び出す代わりに CBLAS インターフェイスを使用" は、CBLAS インターフェイスの使用例です。

LAPACK 用 C インターフェイス

LAPACK ルーチンを C 言語プログラムから呼び出す代わりに、インテル® MKL により提供されている LAPACK 用 C インターフェイスを使用することができます。

LAPACK 用 C インターフェイスは、LAPACK ルーチン用の C 形式のインターフェイスです。このインターフェイスは、列優先と行優先の行列をサポートします。列優先と行優先の指定は、関数の最初の引数 matrix_order で定義します。LAPACK 用 C インターフェイスでは mkl_lapacke.h ヘッダーファイルを使用してください。 ヘッダーファイルには、すべての関数の定数とプロトタイプが指定されています。また、プログラムが C++ コンパイラーでコンパイルされているかどうかが判断されます。コンパイルされている場合、インクルード・ファイルは C++ コンパイル用に設定されます。 LAPACK 用 C インターフェイスの例は、インテル® MKL インストール・ディレクトリーの examples/lapacke サブディレクトリーにあります。


このヘルプトピックについてのフィードバックを送信

© 2006 - 2010 Intel Corporation. 無断での引用、転載を禁じます。