現在地 >> メニュー >> TBB >> TBB::基本編05::多重ループ

blocked_range2d


多重ループの並列化の方法のひとつに「blocked_range2d」がある。

(リファレンスによると)これは、ループの最も外側の2つを並列化する。
[例]

for(... ...)   //ループA
{
    for(... ...)  //ループB
    {
        for(... ...)  //ループC
        {
              ... ...
        }
    }
}

この場合、「ループA」と「ループB」が並列になる。

※例えば、画像に対しループをかけ、各ピクセルでRGB値の合計を出す場合、
for(int y = 0; y < height; ++y)
{
    for(int x =0 ; x < width;++x)
    {
        for(int pixel = 0; pixel < 3; ++pixel )
        {
            SUM_RGB_FUNC( image[y][x][pixel] );
        }
    }
}
もし、「y = 0」と「y =1」の並列の時、
  • 「y = 0」の中で「x = 0」と「x = 1」で並列
  • 「y = 1」の中で「x = 0」と「x = 1」で並列
になる。
つまり、ピクセルで言うと
(x,y)=(0,0) , (0,1) , (1,0) , (1,1)
の4つが並列という事になる(っぽい)

使い方


blocked_range2d< mのの型 , nの型>(開始位置 m0, 終了位置m1 , 開始位置n0, 終了位置n1)
または、
blocked_range2d< mの型 , nの型>(開始位置 m0, 終了位置m1 ,mのgrainsize, 開始位置n0, 終了位置n1, nのgrainsize)

を記述する。

[例]
const int M = 256;
const int N = 256;
blocked_range2d<int,int>(0,M,0,N)


サンプル >> TBB::多重ループCV+TBB::2値化(多重ループ)

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます