< 目次

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

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

注意

C/C++ から BLAS 95/LAPACK 95 を呼び出さないでください。このような呼び出しには、Fortran 90 タイプである遅延形状配列の記述子を操作するスキルが必要です。さらに、BLAS95/LAPACK95 ルーチンには Fortran RTL へのリンクが含まれています。

LAPACK と BLAS

LAPACK および BLAS ルーチンは Fortran スタイルであるため、C 言語プログラムから呼び出すには、Fortran スタイルの呼び出し規則に従います。

C で採用されている行優先順序では、配列が格納されているメモリーセグメントを走査するときに、最後の配列インデックスが最も速く変化し、最初の配列インデックスが最も遅く変化します。Fortran スタイルの列優先順序では、最後のインデックスは最もゆっくりと変化し、最初のインデックスが最も速く変化します (下の 2 次元配列の図で示されているように)。

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

A[i][j] = B[i*n+j]C では (i=0, ... , m, j=0, ... , -1 ) となります

A(i,j)  = B((j-1)*m+i)Fortran では (i=1, ... , m, j=1, ... , n ) となります。

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

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

LAPACK 関数用 C インターフェイスの説明は、『インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) デベロッパー・リファレンス』を参照してください。

CBLAS

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

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

LAPACK 用 C インターフェイス

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

LAPACK への C インターフェイスは、LAPACK ルーチンへの C スタイルのインターフェイスです。このインターフェイスは、行優先および列優先順序の行列をサポートしており、これは関数の最初の引数 matrix_order で定義できます。LAPACK への C インターフェイスを含む mkl.h ヘッダーファイルを使用します。mkl.h は、すべての関数の列挙値とプロトタイプを指定する mkl_lapacke.h ヘッダーファイルをインクルードしています。また、プログラムが C++ コンパイラーでコンパイルされているかが判断されます。C++ でコンパイルされている場合、インクルード・ファイルは C++ コンパイル用に設定されます。LAPACK 用 C インターフェイスの例は、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) のインストール・ディレクトリー examples\lapacke サブディレクトリーにあります。