他の代替手段 (例: C++ 11x 同時実行機能) と比較するために、TBB (Threading Building Blocks) の目的を明確にすることは価値があります。TBB は移植可能でスケーラブルなライブラリ (コンパイラ拡張ではありません) であり、TBB が利用可能な CPU リソースで可能な限り高速に実行するようにスケジュールする軽量タスクの形式でコードを記述できます。他の目的 (プリエンプションなど) のスレッド化をサポートするようには設計されていません。
TBB を使用して、画像スキャン ライン上の for ループの既存の画像処理を parallel_for ループ (「粒度」サイズとして最低 2 ~ 4 スキャン ライン) に高速化しました。これは非常に成功しています。各ループ本体が順次処理されると仮定するのではなく、任意のインデックスを処理するようにループ本体を (再) 書き込む必要があります (たとえば、各ループ反復間でインクリメントされるポインター)。
更新する共有ストレージがなかったので、これはかなり些細なケースでした。より強力な機能 (パイプラインなど) を使用するには、既存のコードを大幅に再考したり書き直したりする必要があるため、おそらく新しいコードに適しています。
この TBB ベースのコードが移植性を維持し、他のスレッド戦略を同時に使用している同じプロセス内の他の場所にある他のコードに干渉しないように思われ、後で上位または下位レベルでマルチプロセッシング戦略と組み合わせることができることは強力な利点です (例: TBB parallel_forコードは、TBB マルチプロセッシング パイプラインのフィルターから呼び出すことができます)。