現在地 >> メニュー >> TBB >> TBB::parallel_for

問題


500個の要素を適当な値で初期化し、
並列処理で各要素に1000を加えよ。

TBB::parallel_for::その2

答え


//C++系
#include <iostream>
#include <vector>
#include <algorithm>
//TBB系
#include <tbb/task_scheduler_init.h>
#include <tbb/blocked_range.h>
#include <tbb/parallel_for.h>


//-----プロトタイプ宣言 -----//
void AddFunctiond(double &a,const double b);


//--------- TBB用のクラス ---------//
class TbbAddToAry //並列処理で加算する
{
private:
	double *Ary;
	const double data;
public:
	//コンストラクタ
	TbbAddToAry(double *InputAry,double inputdata = 0):Ary(InputAry),data(inputdata){}

	//オペレータ
	void operator()(const tbb::blocked_range<int> &range) const
	{
		for( int loop = range.begin(); loop != range.end() ; ++loop )
		{
			AddFunctiond(Ary[loop],data); //各配列にdataを加算する
		}
	}

};

void AddFunctiond(double &a,const double b)
{
	a += b;
}


//-------- ここからメイン関数 ---------//
int main(int argc,char **argv)
{

	std::vector<double> v(500);
	for(int loop = 0; loop < 500;++loop){
		v[loop] = loop; //初期化
	}


	tbb::task_scheduler_init Tbb_Init;//Tbb初期化
	
	tbb::parallel_for( tbb::blocked_range<int>(0,static_cast<int>( v.size() )),TbbAddToAry(&v[0],1000), tbb::auto_partitioner()); //並列化

	Tbb_Init.terminate();//Tbb終了

	std::copy(v.begin(),v.end(),std::ostream_iterator<double>(std::cout,"\n"));

	return EXIT_SUCCESS;
}

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

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