C++ アプリケーションとインテル® DAAL のリンク方法

インテル® DPC++/C++ コンパイラーインテル® oneDAL

この記事は、インテル® デベロッパー・ゾーンに公開されている「How to Link Your C++ Applications with Intel® DAAL?」(https://software.intel.com/en-us/articles/how-to-link-your-c-applications-with-intel-daal/) の日本語参考訳です。


インテル® Data Analytics Acceleration Library (インテル® DAAL) は、C++ アプリケーションとリンク可能なバイナリー・ライブラリーを提供しています。すべての C++ コンパイラーでリンクすることができます。この記事では、インテル® C/C++ コンパイラーと GCC を使用したリンクの例を紹介します。 Microsoft* Visual Studio* 環境でインテル® DAAL を使用する方法は、インテル® DAAL for Windows* 入門ガイドをご覧ください。

次の環境変数が設定されていることを前提とします。

DAALROOT=<インテル® DAAL のインストール先>
DAALINCLUDE=$DAALROOT/include
# インテル® 64 アーキテクチャー向け
DAALLIB=$DAALROOT/lib/intel64
# IA-32 アーキテクチャー向け
DAALLIB=$DAALROOT/lib/ia32

インテル® C++ コンパイラーでリンクする

ダイナミック・リンク

インテル® DAAL をリンクする最も簡単な方法は、インテル® コンパイラーの ‘-daal’ (Linux* と OS X*) もしくは ‘/Qdaal’ (Windows*) コンパイラー・オプションを使用することです。これは、デフォルトでスレッド化 (並列化) されたバージョンのインテル® DAAL を使用することをコンパイラーに通知します。’-daal=parallel’ (Linux* と OS X*) もしくは ‘/Qdaal=parallel’ (Windows*) と等価です。シーケンシャル (シングルスレッド) バージョンのインテル® DAAL を使用するには、’-daal=sequential’ (Linux* と OS X*) もしくは ‘/Qdaal=sequential’ (Windows*) を指定します。
例:

  • Linux* もしくは OS X*:

    icc -I$DAALINCLUDE daal_test.cpp -daal 
    icc -I$DAALINCLUDE daal_test.cpp -daal=parallel
    icc -I$DAALINCLUDE daal_test.cpp -daal=sequential
  • Windows*:

    icc /I%DAALINCLUDE% daal_test.cpp /Qdaal
    icc /I%DAALINCLUDE% daal_test.cpp /Qdaal=parallel
    icc /I%DAALINCLUDE% daal_test.cpp /Qdaal=sequential

スタティック・リンク

Linux* と OS X* 環境では、インテル® DAAL のスタティック・ライブラリーは、libdaal_core.a、libdaal_thread.a および libdaal_sequential.a に含まれています。Windows* 環境では、daal_core.lib、daal_thread.lib および daal_sequential.lib です。並列バージョンのインテル® DAAL とリンクする場合、OpenMP* (libiomp5) とインテル® スレッディング・ビルディング・ブロック (libtbb) ランタイム・ライブラリーが必要です。

  • Linux* もしくは OS X*:

    icc -I$DAALINCLUDE daal_test.cpp $DAALLIB/libdaal_core.a
    $DAALLIB/libdaal_thread.a -liomp5 -ltbb -lpthread -lm
    icc -I$DAALINCLUDE daal_test.cpp $DAALLIB/libdaal_core.a
    $DAALLIB/libdaal_sequential.a -lpthread -lm
  • Windows*:

    icc /I%DAALINCLUDE% daal_test.cpp /Qopenmp /Qtbb %DAALLIB%\daal_core.lib
    %DAALLIB%\daal_thread.lib 
    icc /I%DAALINCLUDE% daal_test.cpp %DAALLIB%\daal_core.lib
    %DAALLIB%\daal_sequential.lib

GCC でリンクする

ダイナミック・リンク

  • Linux* もしくは OS X*:

    g++ -I$DAALINCLUDE daal_test.cpp -L$DAALLIB -ldaal_core -ldaal_thread -liomp5
    -ltbb -lpthread -lm
    g++ -I$DAALINCLUDE daal_test.cpp -L$DAALLIB -ldaal_core -ldaal_sequential
    -lpthread -lm

スタティック・リンク

  • Linux* もしくは OS X*:

    g++ -I$DAALINCLUDE daal_test.cpp $DAALLIB/libdaal_core.a
    $DAALLIB/libdaal_thread.a -liomp5 -ltbb -lpthread -lm
    g++ -I$DAALINCLUDE daal_test.cpp $DAALLIB/libdaal_core.a
    $DAALLIB/libdaal_sequential.a -lpthread -lm

インテル® DAAL でビルドしたアプリケーションを実行する

リンクモデルにかかわりなく、インテル® DAAL とリンクしたアプリケーションの実行にはスレッド化ランタイム・ライブラリーが必要になります。Linux* と OS X* システムでは、環境変数 LD_LIBRARY_PATH が libiomp5.solibtbb.so へのパスを含んでいることを確認してください。 Windows* システムでは、環境変数 PATH に libiomp5md.dlltbb.dll へのパスが含まれていることを確認してください。

アプリケーションがインテル® DAAL のダイナミック・ライブラリーとリンクされている場合、LD_LIBRARY_PATH (Linux* と OS X*) および PATH (Windows*) には、アーキテクチャー固有のインテル® DAAL ランタイム・ライブラリーへのパスが設定されている必要があります。

実行環境を設定する最も簡単な方法は、インテル® DAAL で提供されるスクリプトを実行することです。

  • Linux* もしくは OS X*:

    source $DAALROOT/bin/daalvars.sh ia32 (IA-32 アーキテクチャー向け)
    source $DAALROOT/bin/daalvars.sh intel64 (インテル® 64 アーキテクチャー向け)
  • Windows*:
    %DAALROOT%\bin\daalvars.bat ia32 (IA-32 アーキテクチャー向け)
    %DAALROOT%\bin\daalvars.bat intel64 (インテル® 64 アーキテクチャー向け)

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

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