Intel Threading Building BlocksをCMakeプロジェクトに統合





ハブラハブの読者の皆さん、こんにちは。 このブログでは、CMakeプロジェクトでIntel Threading Building Blocks(Intel TBB)をダウンロード、アセンブル、および簡単に使用できるCMakeモジュールを発表しました。 モジュールは、Intel TBB 2017 Update 7のリリース以降、 GitHubのIntel TBBプロジェクトリポジトリ 、およびLinux * OS、Windows * OSおよびmacOS *のバイナリパッケージで利用できます。



Intel TBB CMakeモジュールの使用



新しいモジュールにより、インテルTBBバイナリパッケージをプロジェクトに簡単に統合できるだけでなく、GitHubから特定のバージョンをダウンロードし、ソースコードからライブラリを構築するより複雑なオプションも利用できます。 モジュールの詳細な技術的説明は、 ドキュメントに記載されています



プロジェクトでのライブラリ統合



TBBConfig.cmakeおよびTBBConfigVersion.cmake構成ファイルは、Intel TBBを使用するために必要な変数とインポートされたターゲットを提供します。 ファイルは、Intel TBB 2017 Update 7のリリース以降、Linux * OS、Windows * OSまたはmacOS *のバイナリパッケージの<tbb_root> / cmakeフォルダーにあります。



アルゴリズム:



  1. バイナリパッケージをダウンロードして解凍します。
  2. 接続されたライブラリのルートフォルダの場所を変数CMAKE_PREFIX_PATHに追加するか、構成ファイルへのパスを変数TBB_DIRに追加します。
  3. find_package (TBB)関数を呼び出し、必要に応じて必要なパラメーターを追加します。
  4. 結果の変数および/またはインポートされたターゲットを使用します。


必要なライブラリコンポーネントは、 find_package関数を呼び出すときにCOMPONENTSまたはREQUIREDキーワードの後に​​リストできます。たとえば、tbb、tbbmalloc、tbb_previewなどです。 デフォルトでは、tbb、tbbmalloc、およびtbbmalloc_proxyコンポーネントが使用可能です。 TBB :: <component>形式のインポートされたターゲットは、コンポーネントごとに作成されます。



以下の変数が定義されています:

TBB_FOUND

Intel TBB検索成功フラグ

TBB_ <コンポーネント> _FOUND

単一コンポーネント検索成功フラグ

TBB_IMPORTED_TARGETS

作成されたすべてのインポートされた目標

TBB_VERSION

Intel TBBバージョン(形式:<メジャー>。<マイナー>)

TBB_INTERFACE_VERSION

Intel TBBインターフェイスバージョン



現時点では、ライブラリの目的のバージョンを指定する場合、制限があります。<major>。<minor>形式自体のバージョンの互換性のみが自動的にチェックされますが、同じバージョン内のさまざまな更新の互換性はチェックされません。 インターフェイスのバージョンは、変数TBB_INTERFACE_VERSIONを使用して確認できます。



TBBBuildを使用してソースからIntel TBBをビルドします



TBBBuild.cmakeモジュールはtbb_build関数を提供します。これにより、ネイティブライブラリインフラストラクチャ(Makefile)を使用してソースコードからライブラリをコンパイルできます。 Linux * OSおよびmacOS *でビルドするには、makeユーティリティが必要で、Windows * OSではgmakeが必要です。 アセンブリ自体の後、必要な構成ファイルが<tbb_root> / cmakeフォルダーに作成されます。



tbb_build関数は、次のパラメーターを受け入れます。

TBB_ROOT <変数>

収集するライブラリのルートフォルダーへのパス

CONFIG_DIR <変数>

構成ファイルが作成されたフォルダーへのフルパスが書き込まれる変数。

<変数>-ビルドエラーの場合、NOTFOUND値が返されます

MAKE_ARGS <custom_make_arguments>

makeコマンドのカスタム引数。

次の引数は、<custom_make_arguments>でオーバーライドされない場合に自動的に決定され、渡されます。

  • コンパイラー= <コンパイラー>
  • tbb_build_dir = <tbb_build_dir>
  • tbb_build_prefix = <tbb_build_prefix>
  • -j <n>




モジュールの使用例:



include(<path-to-tbb-cmake-modules>/TBBBuild.cmake) tbb_build(TBB_ROOT <tbb_root> CONFIG_DIR TBB_DIR) find_package(TBB <options>)
      
      





TBBGetを搭載したIntel TBBをダウンロードする



TBBGet.cmakeモジュールはtbb_get関数を提供します。これにより、GitHubから公式のインテルTBBリリース用のバイナリパッケージとソースパッケージをダウンロードして解凍できます。 Intel TBB 2017 Update 7より古いバイナリパッケージの場合、構成ファイルは<tbb_root> / cmakeフォルダーに自動的に作成されます。



tbb_get関数は、次のパラメーターを受け入れます。

TBB_ROOT <変数>

ダウンロードおよび解凍されたパッケージのルートフォルダーへのフルパスが書き込まれる変数。

<変数>-ダウンロード中にエラーが発生した場合、NOTFOUND値が返されます

RELEASE_TAG <release_tag> |最新

ダウンロード用のリリースタグ。

デフォルト値はLATESTです

SAVE_TO <パス>

ダウンロードしたパッケージを解凍するパス。

デフォルトは$ { CMAKE_CURRENT_BINARY_DIR } / tbb_downloadedです

SYSTEM_NAME Linux | Windows |ダーウィン

バイナリパッケージをダウンロードする必要があるOS。

デフォルト値は変数CMAKE_SYSTEM_NAMEです

CONFIG_DIR <変数>

構成ファイルへのフルパスが書き込まれる変数。

フラグSOURCE_CODEが指定されている場合、パラメーターは無視されます

SOURCE_CODE

バイナリパッケージの代わりにソースコードを含むパッケージをダウンロードする必要があることを示すフラグ



モジュールの使用例:



  1. 現在のOSの最新のバイナリパッケージをダウンロードして接続する



     include(<path-to-tbb-cmake-modules>/TBBGet.cmake) tbb_get(TBB_ROOT tbb_root CONFIG_DIR TBB_DIR) find_package(TBB <options>)
          
          





  2. 最新のソースパッケージのダウンロード、ビルド、接続



     include(<path-to-tbb-cmake-modules>/TBBGet.cmake) include(<path-to-tbb-cmake-modules>/TBBBuild.cmake) tbb_get(TBB_ROOT tbb_root SOURCE_CODE) tbb_build(TBB_ROOT ${tbb_root} CONFIG_DIR TBB_DIR) find_package(TBB <options>)
          
          





Intel TBB接続を使用したサンプルのGettingStarted / sub_string_finderに基づくデモプロジェクト



Windows * OSでのバイナリパッケージの接続
この例では、Intel TBBバイナリパッケージを有効にして、GettingStarted / sub_string_finderに基づくCMakeプロジェクトを作成します。 この例はWindows * OS(Microsoft * Visual Studio)用に作成されていますが、わずかな変更を加えて他のOSでも使用できます。

キーワード<version>および<date>は、ダウンロードしたパッケージの実際の値に置き換える必要があります。



最小要件:



  • CMake 3.0.0
  • Microsoft * Visual Studio 11(Intel TBB 2017 Update 7用)
  • Intel TBB 2017 Update 7


指示:



  1. Intel TBB for Windows * OSをダウンロードし、Cに解凍します:\ demo_tbb_cmake
  2. C:\ demo_tbb_cmake \ tbb <version> _ <date> oss \ examples \ GettingStarted \ sub_string_finderフォルダーで、次の内容のCMakeLists.txtファイルを作成します。



     cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR) project(sub_string_finder CXX) add_executable(sub_string_finder sub_string_finder.cpp) #  find_package  TBBConfig,   # CMAKE_PREFIX_PATH  TBB_DIR. find_package(TBB REQUIRED tbb) # "TBB::tbb"    "${TBB_IMPORTED_TARGETS}" target_link_libraries(sub_string_finder ${TBB_IMPORTED_TARGETS})
          
          



  3. CMake GUIを起動し、

    • フィールドに入力します(「ソースの参照...」ボタンと「ビルドの参照...」ボタンを使用できます)。

      「ソースコードはどこにありますか」:

      C:/ demo_tbb_cmake / tbb <バージョン> _ <日付> oss / examples / GettingStarted / sub_string_finder

      「バイナリをビルドする場所」:

      C:/ demo_tbb_cmake / tbb <バージョン> _ <日付> oss / examples / GettingStarted / sub_string_finder / build
    • [エントリの追加]ボタンを使用して、キャッシュに新しい変数を追加します。

      名前:CMAKE_PREFIX_PATH

      タイプ:PATH

      値:C:/ demo_tbb_cmake / tbb <バージョン> _ <日付> oss
    • [生成]ボタンをクリックして、Microsoft * Visual Studioプロジェクトを作成します。
  4. これで、結果のプロジェクトをMicrosoft Visual Studioで開き(たとえば、CMake GUIの[プロジェクトを開く]ボタンをクリックして)、ビルドできます。 生成されたプロジェクトへのパス:

    C:\ demo_tbb_cmake \ tbb <バージョン> _ <日付> oss \ examples \ GettingStarted \ sub_string_finder \ build \ sub_string_finder.sln。



    プロジェクト生成後のCMake GUIウィンドウ:







ソースコードからライブラリを構築し、プロジェクトに接続する
この例では、GettingStarted / sub_string_finderに基づいてCMakeプロジェクトを作成します。このプロジェクトでは、 コミュニティプレビュー機能(CPF)を有効にしてIntel TBBを構築して接続します 。 この例はLinux * OS向けに書かれていますが、わずかな変更を加えて他のOSでも使用できます。



最小要件:



  • CMake 3.0.0


指示:



  1. Intel TBBリポジトリを〜/ demo_tbb_cmakeフォルダーに複製します。

     mkdir ~/demo_tbb_cmake cd ~/demo_tbb_cmake git clone https://github.com/01org/tbb.git
          
          





  2. 〜/ demo_tbb_cmake / tbb / examples / GettingStarted / sub_string_finderフォルダーで、次の内容のCMakeLists.txtファイルを作成します。

     cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR) project(sub_string_finder CXX) add_executable(sub_string_finder sub_string_finder.cpp) include(${TBB_ROOT}/cmake/TBBBuild.cmake) #  Intel TBB   Community Preview Features (CPF). tbb_build(TBB_ROOT ${TBB_ROOT} CONFIG_DIR TBB_DIR MAKE_ARGS tbb_cpf=1) find_package(TBB REQUIRED tbb_preview) # "TBB::tbb_preview"    "${TBB_IMPORTED_TARGETS}". target_link_libraries(sub_string_finder ${TBB_IMPORTED_TARGETS})
          
          





  3. プロジェクトをビルドするフォルダーを作成してそこに移動します。



     mkdir ~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder/build cd ~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder/build
          
          



  4. Intel TBBライブラリのルートフォルダーを指定してCMakeを起動します。

     cmake -DTBB_ROOT=${HOME}/demo_tbb_cmake/tbb ..
          
          



  5. プロジェクトをビルドして実行します。

     make ./sub_string_finder
          
          







おわりに



インテルTBBチームは、ライブラリをカスタムCMakeプロジェクトに便利に統合することに関心があります。 この問題を解決するためだけに、新しいモジュールが作成されます。 これらは、多くのユースケースでシンプルで柔軟なインターフェースを提供します。 これらのモジュールをお試しいただき、フィードバックをお待ちしています。



リンクと連絡先:





*他の名前およびブランドは、他者の知的財産として宣言される場合があります。



All Articles