タスクがループ反復であり、反復の値の範囲がループを開始する前に判明してしている場合、ループはイン® oneAPI スレッディング・ビルディング・ブロック (インテル® oneTBB) で容易に表現できます。
次のシリアルコードのループに並列処理を実装することを考えてみます。
ANNOTATE_SITE_BEGIN(sitename);
for (int i = lo; i < hi; ++i) {
ANNOTATE__ITERATION_TASK(taskname);
ステートメント;
ANNOTATE_SITE_END();インテル® Advisor のアノテーションを削除して、oneTBB を使用するように変更したシリアルコードの例を示します。
#include <tbb/tbb.h>
...
tbb::parallel_for( lo, hi,
[&](int i) {statement;}
);
最初の 2 つのパラメーターがループ境界です。通常の C++ プログラミング (特に STL) において、下限は包括的で上限は排他的です。3 番目のパラメーターはループ本体であり、ラムダ式で囲まれています。ループ本体は、oneTBB で生成されるスレッドから並列に呼び出されます。「ラムダ式の代わりに C++ 構文を使用してタスクを生成する」の説明で示したように、ラムダ式は明示的に定義されたクラス・オブジェクトのインスタンスと置き換えることができます。