インテル® マス・カーネル・ライブラリー (インテル® MKL) には以下のディレクトリーにさまざまな 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 バイト長でなければなりません。
| インテル® コンパイラーは、互換マイクロプロセッサー向けには、インテル製マイクロプロセッサー向けと同等レベルの最適化が行われない可能性があります。これには、インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2)、インテル® ストリーミング SIMD 拡張命令 3 (インテル® SSE3)、ストリーミング SIMD 拡張命令 3 補足命令 (SSSE3) 命令セットに関連する最適化およびその他の最適化が含まれます。インテルでは、インテル製ではないマイクロプロセッサーに対して、最適化の提供、機能、効果を保証していません。本製品のマイクロプロセッサー固有の最適化は、インテル製マイクロプロセッサーでの使用を目的としています。インテル® マイクロアーキテクチャーに非固有の特定の最適化は、インテル製マイクロプロセッサー向けに予約されています。この注意事項の適用対象である特定の命令セットの詳細は、該当する製品のユーザー・リファレンス・ガイドを参照してください。
改訂 #20110804 |