インテル® DAAL プログラミング・ガイド

計算モード

ライブラリーのアルゴリズムは、次の計算モードをサポートしています。

アルゴリズムの初期化中に計算モードを選択できます。

各計算モードの特定のアルゴリズムの計算パラメーター、入力タイプ、出力結果は、各アルゴリズムの説明を参照してください。

バッチ処理

インテル® DAAL のアルゴリズムはすべて、少なくとも 1 つのバッチ処理計算モードをサポートしています。バッチ処理モードでは、特定のアルゴリズム・クラスの compute メソッドのみ使用されます。

オンライン処理

インテル® DAAL の一部のアルゴリズムは、ブロックでデータセットを処理できます。オンライン処理モードでは、特定のアルゴリズム・クラスの compute() メソッドと finalizeCompute() メソッドが使用されます。この計算モードは、データがブロック i = 1, 2, 3, … nblocks で到着すると仮定します。新しい入力が利用可能になると compute() メソッドを呼び出します。データの最後のブロックが到着したら、finalizeCompute() メソッドを呼び出して最終結果を生成します。入力データが非同期モードで到着した場合、指定されたデータソースに getStatus() メソッドを使用して、データの新しいブロックがロード可能かどうかを確認します。

次の図は、オンライン処理の計算スキーマを示しています。

Online Processing Workflow Step 1

異なるデータブロックの観測数 (ni) は異なることがありますが、特徴ベクトル (p) の数は同じです。

Online Processing Workflow Step 3

Online Processing Workflow Step 4

分散処理

インテル® DAAL の一部のアルゴリズムは、複数のデバイスに分散されたデータセットを処理できます。分散処理モードでは、特定のアルゴリズム・クラスの compute() メソッドと finalizeCompute() メソッドが使用されます。この計算モードは、データセットが計算ノードの nblocks ブロックに分割されていると仮定します。

計算は複数のステップで行われます。アルゴリズムの初期化中にコンストラクターに computeStep 値を提供することにより、アルゴリズムの計算ステップを定義する必要があります。各計算ノードで compute() メソッドを使用して、部分結果を計算します。マスターノードで input.add() メソッドを使用して、各計算ノードで処理した部分結果のポインターを追加します。最後の部分結果が到着したら、compute() メソッドの後に finalizeCompute() メソッドを呼び出して最終結果を生成します。入力データが非同期モードで到着した場合、指定されたデータソースに getStatus() メソッドを使用して、データの新しいブロックがロード可能かどうかを確認します。

計算スキーマはアルゴリズム固有です。次の図は、分散処理の一般的な計算スキーマを示しています。

Distributed Processing Worflow Step 2

アルゴリズム固有の計算スキーマについては、各アルゴリズムの説明の「分散処理」セクションを参照してください。

インテル® DAAL の分散処理アルゴリズムは、根本的なクロスデバイス・コミュニケーション・テクノロジーから抽出されているため、さまざまなマルチデバイス・コンピューティングやデータ転送シナリオでライブラリーを使用することができます。MPI* ベースのクラスター環境、Hadoop*/Spark* ベースのクラスター環境、低水準のデータ交換プロトコルなどが含まれますが、これらに制限されているわけではありません。

MPI*、Hadoop*、Spark* の一般的なユースケースは、インテル® DAAL パッケージの各 samples フォルダーに含まれているサンプルを参照してください。