インテル® MKL の Java* サンプル

インテル® マス・カーネル・ライブラリー (インテル® 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 に以下のディレクトリーが作成されます。

docsincludeclasses、および 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

IBM Engineering Scientific Subroutine Library (ESSL*)

関連情報


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