最終更新:
mikk_ni3_92 2008年06月05日(木) 14:49:19履歴
現在地 >> メニュー >> TBB >> TBB::parallel_for
//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; }