既知の問題#

ここでは、oneTBB の既知の制限事項について説明し、その機能について理解を深める情報を提供します。

SYCL プログラムで TBB をデバッグ#

制限事項: インテル® oneAPI DPC++/C++ コンパイラーでコンパイルされた SYCL プログラムで oneTBB のデバッグ バージョンを使用すると、アプリケーションがクラッシュする可能性があります。これは、tbb (リリースバージョン) ライブラリーと tbb_debug (デバッグ バージョン) ライブラリーの両方が同時に読み込まれ、競合が発生することが原因です。

解決方法: 次のいずれかを行います。

  • アプリケーションを tbb_debug ではなく、リリースバージョンの tbb にリンクします。

  • インテル® oneAPI DPC++/C++ コンパイラーが提供する qtbb フラグを使用します。

独立コンパイルモード#

制限事項: oneTBB は、独立コンパイルモードをサポートしていません。

リスク: インテル® oneAPI DPC++/C++ コンパイラーを使用して、oneTBB ヘッダーを利用するアプリケーションをコンパイルする際に、/Qfreestanding コンパイラー・オプションを使用すると、Windows* でエラーが発生する可能性があります。

静的アサート#

制限事項: 次の条件が満たされた場合、静的アサートによって oneTBB ヘッダーでコンパイルエラーが発生します。

  • Clang 12.0.0 以降のバージョンでコンパイルされている。

  • LLVM 標準ライブラリーが使用され、-ffreestanding フラグと C++11/14 コンパイラー・オプションが併用されている。

リスク: コンパイルに失敗します。

インターフェイスの非互換性: TBB と oneTBB#

制限事項: libstdc++ バージョン 9 および 10 の Parallel STL アルゴリズムを使用するアプリケーションでは、以前のバージョンのスレッディング・ビルディング・ブロック (TBB) と oneAPI スレッディング・ビルディング・ブロック (oneTBB) 間のインターフェイスに互換性がないため、コンパイルに失敗する可能性があります。

解決方法: 各コンパイル単位の最初の標準ヘッダーファイルをインクルードする前に、PSTL_USE_PARALLEL_POLICIES (libstdc++ 9 の場合) または _GLIBCXX_USE_TBB_PAR_BACKEND (libstdc++ 10 の場合) マクロを 0 に定義して、Parallel STL アルゴリズムのサポートを無効にします。

不適切なインストール場所#

制限事項: Linux* では、oneAPI スレッディング・ビルディング・ブロック (oneTBB) またはスレッディング・ビルディング・ブロック (TBB) が /usr/lib64 などのシステムフォルダーにインストールされている場合、リンカーがライブラリーを検索する順序が原因でアプリケーションのリンクに失敗することがあります。

リスク: この問題はプログラムの実行には影響しません。

解決方法: -L リンカーオプションを使用して、oneTBB ライブラリーの正しい場所を指定します。

fork() のサポート#

制限事項: oneTBB は fork() をサポートしていません。

解決方法: この問題を回避するには、fork() を使用する前に task_scheduler_handle を使用して、oneTBB ワーカースレッドに参加することを検討してください。

動的 malloc の置換とトポロジー API の非互換性#

制限事項: Linux* では、tbb::info および tbb::task_arena::constraints API で動的 malloc 置換を使用すると、実行時エラーが発生する可能性があります。

解決方法: TBB_ENABLE_SANITIZERS=1 環境変数を設定します。これは、動的な malloc 置換が使用されていることを通知します。