既知の問題#
ここでは、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 置換が使用されていることを通知します。