この記事は、インテル® デベロッパー・ゾーンに公開されている「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.so と libtbb.so へのパスを含んでいることを確認してください。 Windows* システムでは、環境変数 PATH に libiomp5md.dll と tbb.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 アーキテクチャー向け)
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。