最終更新:
mikk_ni3_92 2008年07月07日(月) 12:28:04履歴
現在地 >> メニュー >> TBB >> TBB::Vector
関連 >> TBB::基本編06::Vector
0〜500までの要素をgrainsize 50で並列化した。
(※grainsizeが500より大きいならたぶんstd::vectorでもエラーにならないはず。CPU1つで処理すると思う)
なお、結果の出力は
関連 >> TBB::基本編06::Vector
#include <iostream> #include <algorithm> #include <vector> #include <tbb/task_scheduler_init.h> #include <tbb/blocked_range.h> #include <tbb/parallel_for.h> #include <tbb/concurrent_vector.h> typedef tbb::concurrent_vector<int> iTbb_Vec; //長いので省略化 iTbb_Vec TbbVec; //並列処理用vector class PrimePush { public: /*** オペレータ ***/ void operator()(const tbb::blocked_range<int>& range)const { for(int n = range.begin(); n != range.end();++n) { TbbVec.push_back(n); } } }; /**************** ここからメイン関数 ********************/ const int NUM = 500; //要素数 int main() { tbb::task_scheduler_init TbbInit; parallel_for(tbb::blocked_range<int>(0,NUM,50),PrimePush()); //grainsize 50 TbbInit.terminate(); std::copy(TbbVec.begin(),TbbVec.end(),std::ostream_iterator<int>(std::cout,"\n")); return EXIT_SUCCESS; }
0〜500までの要素をgrainsize 50で並列化した。
(※grainsizeが500より大きいならたぶんstd::vectorでもエラーにならないはず。CPU1つで処理すると思う)
なお、結果の出力は
tbb::concurrent_vector<int>::iterator start; tbb::concurrent_vector<int>::iterator end = TbbVec.end(); for(start = TbbVec.begin();start != end;++start) { std::cout << *start << "\n"; }のようにしてもOK。