インテル® DAAL for Linux* 入門ガイド

インテル® oneDALインテル® Parallel Studio XE

この記事は、インテル® デベロッパー・ゾーンに公開されている「Getting Started with Intel® Data Analytics Acceleration Library for Linux*」(https://software.intel.com/en-us/get-started-with-daal-for-linux/) の日本語参考訳です。


インテル® Data Analytics Acceleration Library (インテル® DAAL) は、データ分析のすべてのステージをカバーするインテル® アーキテクチャーに最適化されたビルディング・ブロックです: データソースからのデータ収集、前処理、変換、データマイニング、モデル化、検証および意思決定。

インテル® DAAL はスタンドアロンまたは以下のスイートの一部としてインストールされます。

必要条件

システム要件

システムにインテル® DAAL をインストールする

インテル® DAAL は、<install dir>/daal ディレクトリーにインストールされます。

デフォルトの <install dir> は、/opt/intel/compilers_and_libraries_2016.x.xxx/linux です。

インストールの詳細については、https://software.intel.com/en-us/articles/intel-daal-2016-install-guide をご覧ください。

環境変数の設定

  1. ターゲット・アーキテクチャーを設定するため、<install dir>/daal/bin/daalvars.sh スクリプトを実行します。
    • IA-32 アーキテクチャー:
      daalvars.sh ia32
    • インテル® 64 アーキテクチャー:
      daalvars.sh intel64

  2. オプション: デフォルトとは異なる Java* コンパイラーを指定:
    export JAVA_HOME=$PATH_TO_JAVA_SDK
    export PATH=$JAVA_HOME/bin:$PATH

C++ 言語

ステップ 1: アプリケーションとインテル® DAAL を自動リンクするためコンパイラー・オプションを選択

インテル® C++ コンパイラー 16.0 の -daal オプションを指定するか、IDE でプロジェクトを設定します。

コンパイラー・オプション IDE オプション
-daal または -daal=parallel インテル® DAAL のスレッドバージョンとリンク Eclipse*:
  1. [Project] > [Properties] > [C/C++ Build] > [Settings] > [Intel C++ Compiler] > [Performance Library Build Components] > [Use Intel(R) Data Analytics Acceleration Library] に移動します。
  2. [Use threaded Intel DAAL (-daal=parallel)] または [Use non-threaded Intel DAAL (-daal=sequential)] を選択します。
-daal=sequential インテル® DAAL のシーケンシャル・バージョンとリンク

-daal コンパイラー・オプションの詳細は、『インテル® コンパイラー・ユーザー・リファレンス・ガイド』を参照してください (デフォルトの場所は、/opt/intel/documentation_2016/ja/compiler_c/common/core/index.htm です)。

ステップ 2: インテル® DAAL を使用した最初のアプリケーションを作成および実行

このサンプル・アプリケーションは、インテル® DAAL によるコレスキー分解を計算します。

/****************************************************************************
!  Copyright(C) 2014-2015 Intel Corporation. All Rights Reserved.
!
!  The source code, information and material ("Material") contained herein is
!  owned by Intel Corporation or its suppliers or licensors, and title to 
!  such Material remains with Intel Corporation or its suppliers or 
!  licensors. The Material contains proprietary information of Intel or its 
!  suppliers and licensors. The Material is protected by worldwide copyright 
!  laws and treaty provisions. No part of the Material may be used, copied, 
!  reproduced, modified, published, uploaded, posted, transmitted, 
!  distributed or disclosed in any way without Intel's prior express written 
!  permission. No license under any patent, copyright or other intellectual 
!  property rights in the Material is granted to or conferred upon you, 
!  either expressly, by implication, inducement, estoppel or otherwise. Any 
!  license under such intellectual property rights must be express and 
!  approved by Intel in writing.
!
!  *Third Party trademarks are the property of their respective owners.
!
!  Unless otherwise agreed by Intel in writing, you may not remove or alter
!  this notice or any other notice embedded in Materials by Intel or Intel's
!  suppliers or licensors in any way.
!
!****************************************************************************
!  内容:
!    コレスキー分解サンプルプログラム
!***************************************************************************/

#include "daal.h"
#include <iostream>

using namespace daal;
using namespace daal::algorithms;
using namespace daal::data_management;
using namespace daal::services;

const size_t dimension = 3;
double inputArray[dimension *dimension] =
{
    1.0,  2.0,  4.0,
    2.0, 13.0, 23.0,
    4.0, 23.0, 77.0
};

int main(int argc, char *argv[])
{
    /* 配列から入力数値テーブルを作成 */
    SharedPtr<NumericTable> inputData = 
        SharedPtr<NumericTable>(new Matrix<double>(dimension, 
        dimension, inputArray));

    /* デフォルトメソッドを使用して、コレスキー分解を計算するアルゴリズム・
    オブジェクトを作成 */
    cholesky::Batch<> algorithm;

    /* アルゴリズムの入力をセット */
    algorithm.input.set(cholesky::data, inputData);

    /* コレスキー分解を計算 */
    algorithm.compute();

    /* コレスキー因子へのポインターを取得 */
    SharedPtr<Matrix<double> > factor = 
        staticPointerCast<Matrix<double>, NumericTable>(
        algorithm.getResult()->get(cholesky::choleskyFactor));

    /* コレスキー因子の最初の要素をプリント */
    std::cout << "The first element of the Cholesky factor: " << 
        (*factor)[0][0];

    return 0;
}
  1. サンプルコードをコピーして、エディターにペーストします。
  2. my_first_daal_program.cpp としてファイルにセーブします。
  3. 次のコマンドのように -daal コンパイラー・オプションを指定してコンパイルします (例えば -daal=parallel):
    icc my_first_daal_program.cpp -daal=parallel -o my_first_daal_program
  4. アプリケーションを実行します。

ステップ 3 (オプション): 異なるコンパイラーを使用してアプリケーションをビルド

インテル® DAAL スレッドモデルとリンクモデルに応じて、プロジェクトに次のライブラリーを追加します。

  シングルスレッド
(スレッド化されていない)
インテル® DAAL
マルチスレッド
(内部でスレッド化された)
インテル® DAAL
スタティック・リンク libdaal_core.a
libdaal_sequential.a
libdaal_core.a
libdaal_thread.a

ダイナミック・リンク

libdaal_core.so
libdaal_sequential.so
libdaal_core.so
libdaal_thread.so

これらのライブラリーは、<install dir>/daal/lib/{ia32|intel64}_lin のアーキテクチャー固有ディレクトリーに配置されています。アーキテクチャー・パラメーター ia32intel64 は、環境変数の設定daalvar.sh に指定したものと同じパラメーターでなければいけません。

重要:
リンク行で上記のライブラリーのリスト順を変更しないでください。

リンク方法にかかわらず、プロジェクトにインテル® DAAL に関連するライブラリーを追加します。

  • インテル® コンパイラーの OpenMP* ランタイム・ライブラリー libiomp5.so
  • インテル® コンパイラーのインテル® スレッディング・ビルディング・ブロックのランタイム・ライブラリー libtbb.so

マルチスレッド版のインテル® DAAL とインテル® 64 アーキテクチャー向けのアプリケーションをスタティック・リンクするには次のコマンドを使用します。

icc my_first_daal_program.cpp -o my_first_daal_program
$DAALROOT/lib/intel64_lin/libdaal_core.a $DAALROOT/lib/intel64_lin/libdaal_thread.a -liomp5 -ltbb -lpthread -ldl

ステップ 4: インテル® DAAL サンプルコードをビルドして実行

  1. サンプルのビルド:

    C++ の examples ディレクトリーに移動し、make コマンドを実行します。

    cd <install_dir>/daal/examples/cpp
    make {libia32|soia32|libintel64|sointel64}
            example=<example_name>
            compiler={intel|gnu}
            mode=build

    {libia32|soia32|libintel64|sointel64} パラメーターから、daalvars.sh スクリプトに指定したアーキテクチャー・パラメーターとビルドしたい実行可能ファイルの型プリフィックスと一致するパラメーターを選択します: スタティックには lib、ダイナミックには so

    Examples の名前は、daal.lst ファイルに格納されています。

    コマンドは、選択されたコンパイラー、アーキテクチャーおよびライブラリー拡張 (.a.so) 向けのディレクトリーを作成します。次に例を示します。
    _results/intel_intel64_a

  2. サンプルを実行:

    C++ の examples ディレクトリーに移動し、make コマンドを run モードで実行します。例えば、intel64 ターゲットで daalvars.sh を実行する場合:

    cd <install_dir>/daal/examples/cpp
    make libintel64 example=cholesky_batch.cpp mode=run

    make コマンドは、デフォルトでインテル® コンパイラーを使用してインテル® 64 アーキテクチャー向けのスタティック・ライブラリーと cholesky_batch.cpp サンプルをビルドし、実行可能バイナリーを実行します。

Java* 言語

インテル® DAAL サンプルコードをビルドして実行

Java* サンプルコードをビルドおよび実行するには、環境変数の設定daalvars.bat で指定したアーキテクチャー・パラメーターに該当する Java* Virtual Machine を使用します。

  1. サンプルのビルド:

    Java* の examples ディレクトリーに移動し、launcher コマンドを build パラメーターで実行します。

    cd <install_dir>/daal/examples/java
    launcher.sh build $PATH_TO_JAVAC

    コマンドは、<install dir>/daal/examples/java/com/intel/daal/examples/<example 名> ディレクトリー下に、実行可能 *.class (例えば CholeskyBatch.class) をビルドします。

  2. サンプルを実行:

    Java* の examples ディレクトリーに移動し、launcher コマンドを run パラメーターで実行します。

    cd <install_dir>/daal/examples/java
    launcher.sh {ia32|intel64} run $PATH_TO_JAVAC

    daalvars.sh スクリプトと同じアーキテクチャー・パラメーターを指定します。

    各 example では、結果は ./_results/ia32 または ./_results/intel64 (指定されたアーキテクチャーに依存) ディレクトリー下に <example name>.res ファイルとして格納されます。

ドキュメントとリソース

ドキュメント 説明
インテル® DAAL プログラミング・ガイド:
  • HTML
  • https://software.intel.com/en-us/daal-programming-guide-pdf
このドキュメントは、パフォーマンスのヒントを含むインテル® DAAL を使用したプログラミングに関する推奨事項が含まれます。
インテル® DAAL ユーザー・リファレンス・ガイド (英語) ドキュメントには以下が含まれます。
  • プログラミング・ガイド
  • C++ アプリケーション・プログラミング・インターフェイス (API) リファレンス
  • Java* API リファレンス
インテル® DAAL インストールガイド
https://software.intel.com/en-us/articles/intel-daal-2016-install-guide
製品で利用可能なインストールのオプションを説明し、インストール手順を示します。
インテル® DAAL リリースノート
https://software.intel.com/en-us/articles/intel-daal-2016-release-notes
インテル® DAAL の使い方を示すドキュメントが用意されています。
  • 製品の新機能
  • ディレクトリー構造
  • ハードウェアとソフトウェア要件へのリンク
<install dir>/daal/examples フォルダー インテル® DAAL アプリケーション・プログラミング・インターフェイスの使い方を示すプログラム集。
/opt/intel/samples_2016/en/daal フォルダー (デフォルトのインストール・パスを想定) プログラムにインクルードでき、Hadoop*、Spark*、メッセージ・パッシング・インターフェイス (MPI) または MySQL* をすぐに利用できる各種アルゴリズム向けのサンプルコード集。
ウェブリソース

著作権と商標について

Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。

* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

Java は、Oracle および / または関連会社の登録商標です。

© 2016 Intel Corporation. 無断での引用、転載を禁じます。

最適化に関する注意事項
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。

注意事項の改訂 #20110804

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください

タイトルとURLをコピーしました