インテル® マス・カーネル・ライブラリー (インテル® MKL) には以下のディレクトリーにさまざまな Java のサンプルが含まれています。
<mkl ディレクトリー>/examples/java.
以下のインテル® MKL 関数用のサンプルが提供されています。
サンプルのソースは以下のディレクトリーにあります。
<mkl ディレクトリー>/examples/java/examples.
サンプルは Java で記述されています。サンプルでは、以下の種類のデータを使用しています。
ただし、サンプルで使用されているラッパーは以下のことを行いません。
サンプルは、Java Native Interface (JNI* 開発者フレームワーク) を使用してインテル® MKL とバインドしています。JNI のドキュメントは、
http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/jni/ から入手できます。
Java のサンプルには、バインドを行う JNI ラッパーも含まれています。ラッパーはサンプルに依存しません。独自の Java アプリケーションで使用することもできます。CBLAS、FFT、VML、VSL RNG、および ESSL 形式の畳み込み/相関関数のラッパーは互いに依存しません。
ラッパーをビルドするには、サンプルを実行してください。メイクファイルを実行すると、ラッパーのバイナリーがビルドされます。メイクファイルを実行した後、サンプルを実行して、ラッパーが正しくビルドされたかどうかを確認できます。サンプルを実行すると、<mkl ディレクトリー>/examples/java に以下のディレクトリーが作成されます。
docs、include、classes、および bin ディレクトリーには、ラッパーのバイナリーとドキュメントが含まれます。_results ディレクトリーには、テスト結果が含まれます。
Java プログラマーにとっては、ラッパーは以下の Java クラスです。
特定のラッパーとサンプルのクラスのドキュメントは、サンプルのビルドおよび実行中に Java ソースから生成されます。ドキュメントを参照するには、(ビルドスクリプトを実行すると作成される) docs ディレクトリーにある次のファイルを開いてください。
<mkl ディレクトリー>/examples/java/docs/index.html
CBLAS、VML、VSL RNG、および FFT 用の Java ラッパーは、基本となるネイティブ関数に直接対応するインターフェイスを確立します。機能とパラメーターについては、『インテル® MKL リファレンス・マニュアル』を参照してください。ESSL 形式の関数用のインターフェイスは、com.intel.mkl.ESSL クラス用に生成されたドキュメントで説明されています。
各ラッパーは、Java のインターフェイス部分と C で記述された JNI スタブで構成されています。ソースは以下のディレクトリーにあります。
<mkl ディレクトリー>/examples/java/wrappers
CBLAS と VML 用のラッパーの Java と C 部分はどちらも標準的なアプローチを採用しているため、追加の CBLAS 関数をカバーするために使用できます。
FFT 用のラッパーは、FFT ディスクリプター・オブジェクトのライフサイクルをサポートする必要があるため、より複雑です。単一フーリエ変換を計算するには、アプリケーションはネイティブ FFT ディスクリプターの同じコピーを使用して FFT ソフトウェアを複数回呼び出す必要があります。ラッパーは、仮想マシンが Java バイトコードを実行する間、ネイティブ・ディスクリプターを保持するハンドラークラスを提供します。
VSL RNG 用のラッパーは、FFT 用のラッパーと似ています。ラッパーは、ストリームステートのネイティブ・ディスクリプターを保持するハンドラークラスを提供します。
畳み込み/相関関数用のラッパーは、"タスク・ディスクリプター" と同様のライフサイクルを仮定し、VSL インターフェイスの難易度を緩和します。ラッパーは、1 次元でより単純な、これらの関数の ESSL 形式の関数を使用します。JNI スタブは、C で記述された ESSL 形式のラッパーにインテル® MKL 関数をラップし、ネイティブメソッドへの単一呼び出しにタスク・ディスクリプターのライフサイクルを "パック" します。
ラッパーは、JNI 仕様 1.1 および 5.0 を満たしているため、新しい Java のすべての実装で動作します。
サンプルとラッパーの Java 部分は、「The Java Language Specification (First Edition)」で説明されている Java 言語用に記述され、1990 年代後半に登場したインナークラスの機能が拡張されています。この言語バージョンのレベルは、Sun の JDK (Java 開発キット) のすべてのバージョンと、バージョン 1.1.5 以降の互換性のある実装をサポートしています。
C 言語レベルは、インテル® MKL インターフェイスと JNI ヘッダーファイルで必要な、整数と浮動小数点データ型に関する追加の仮定を含む "標準 C" (C89) です。つまり、ネイティブ float および double データ型は、JNI jfloat および jdouble データ型とそれぞれ同じである必要があります。また、ネイティブ int データ型は、4 バイト長でなければなりません。
1. IBM Engineering Scientific Subroutine Library (ESSL*)。
© 2006 - 2010 Intel Corporation. 無断での引用、転載を禁じます。