最終更新:
mikk_ni3_92 2008年06月11日(水) 14:11:49履歴
現在地 >> メニュー >> TBB >> TBB::多重ループ
#include <iostream>
#include <cmath>
#include <tbb/task_scheduler_init.h>
#include <tbb/blocked_range2d.h>
#include <tbb/parallel_for.h>
using namespace std;
using namespace tbb;
const int MAT_M = 9; //行(縦)
const int MAT_N = 9; //列(横)
class C_9x9
{
private:
int (*data)[MAT_N]; //MAT_N(横)だけ要素を持つ配列へのポインタ
public:
/******* コンストラクタ ***********/
C_9x9(int (*p)[MAT_N]):data(p){}
/******* オペレータ ***************/
void operator()(const blocked_range2d<int,int>& range)const
{
for(int m = range.rows().begin(); m != range.rows().end();++m)
{
for(int n = range.cols().begin(); n != range.cols().end();++n)
{
data[m][n] += 1000;
}
}
}
};
/**************** ここからメイン関数 ********************/
int a[MAT_M][MAT_N];
int main()
{
for(int m = 0; m < MAT_M; ++m)
{
for(int n =0; n < MAT_N ; ++n)
{
a[m][n] = (m+1)*(n+1);
cout << a[m][n] << " ";
}
cout << "\n";
}
cout << "------------ [after] ------------------\n";
tbb::task_scheduler_init Tbb_Init;
parallel_for( blocked_range2d<int,int>(0,MAT_M,0,MAT_N), C_9x9(&a[0]),auto_partitioner());
Tbb_Init.terminate();
for(int m = 0; m < MAT_M; ++m)
{
for(int n =0; n < MAT_N ; ++n)
{
cout << a[m][n] << " ";
}
cout << "\n";
}
return 0;
}
#include <iostream>
#include <cmath>
#include <tbb/task_scheduler_init.h>
#include <tbb/blocked_range2d.h>
#include <tbb/parallel_for.h>
using namespace std;
using namespace tbb;
const int MAT_M = 9; //行(縦)
const int MAT_N = 9; //列(横)
class C_9x9
{
private:
int (*data)[MAT_N]; //MAT_N(横)だけ要素を持つ配列へのポインタ
public:
/******* コンストラクタ ***********/
C_9x9(int (*p)[MAT_N]):data(p){}
/******* オペレータ ***************/
void operator()(const blocked_range2d<int,int>& range)const
{
for(int m = range.rows().begin(); m != range.rows().end();++m)
{
for(int n = range.cols().begin(); n != range.cols().end();++n)
{
data[m][n] += 1000;
}
}
}
};
/**************** ここからメイン関数 ********************/
int a[MAT_M][MAT_N];
int main()
{
for(int m = 0; m < MAT_M; ++m)
{
for(int n =0; n < MAT_N ; ++n)
{
a[m][n] = (m+1)*(n+1);
cout << a[m][n] << " ";
}
cout << "\n";
}
cout << "------------ [after] ------------------\n";
tbb::task_scheduler_init Tbb_Init;
parallel_for( blocked_range2d<int,int>(0,MAT_M,0,MAT_N), C_9x9(&a[0]),auto_partitioner());
Tbb_Init.terminate();
for(int m = 0; m < MAT_M; ++m)
{
for(int n =0; n < MAT_N ; ++n)
{
cout << a[m][n] << " ";
}
cout << "\n";
}
return 0;
}