TBB를 사용해보시면 아시겠지만..
람다식을 사용하지 않고 TBB를 사용하려면 매우 복잡하고 피곤합니다..
사용하는 함수마다 class를 생성해줘야 되니깐요..
기본적으로 람다식이 된다는 가정하에 설명을 드리겠습니다.
람다식이 가능하다 == vc++ 2010 이상인걸로 간주하고 auto 키워드도 사용된다는걸로 생각하겠습니다..
일단 기존에 사용하던 방법입니다..
그리고 람다식을 이용한 방법입니다..
class를 새로 만들어야되는게 없어서. 많이 편리합니다..
람다식을 사용하지 않고 TBB를 사용하려면 매우 복잡하고 피곤합니다..
사용하는 함수마다 class를 생성해줘야 되니깐요..
기본적으로 람다식이 된다는 가정하에 설명을 드리겠습니다.
람다식이 가능하다 == vc++ 2010 이상인걸로 간주하고 auto 키워드도 사용된다는걸로 생각하겠습니다..
일단 기존에 사용하던 방법입니다..
#include <stdio.h> #include <tbb/tbb.h> typedef tbb::concurrent_unordered_map<int,int> TBB_MAP; class TbbUnorderMap { public: void operator() (TBB_MAP::range_type& _range) const { for (TBB_MAP::iterator iter = _range.begin(); iter != _range.end(); ++iter) { printf("key : %d\t value : %d\n",iter->first,iter->second); } } }; int main(int argc, char* argv[]) { TBB_MAP mapTest; for(int i=0;i < 100;i++) { mapTest.insert(TBB_MAP::value_type(i,i*100)); } tbb::parallel_for(mapTest.range(),TbbUnorderMap(),tbb::auto_partitioner()); return 0; }
그리고 람다식을 이용한 방법입니다..
#include <stdio.h> #include <tbb/tbb.h> typedef tbb::concurrent_unordered_map<int,int> TBB_MAP; int main(int argc, char* argv[]) { TBB_MAP mapTest; for(int i=0;i < 100;i++) { mapTest.insert(TBB_MAP::value_type(i,i*100)); } tbb::parallel_for(mapTest.range(),[](const TBB_MAP::range_type& _range) { for(auto iter = _range.begin(); iter != _range.end(); iter++) { printf("key : %d\t value : %d\n",iter->first,iter->second); } },tbb::auto_partitioner()); return 0; }전체적인 코드 길이는 비슷하지만.
class를 새로 만들어야되는게 없어서. 많이 편리합니다..
'병렬프로그래밍' 카테고리의 다른 글
TBB & PPL의 task_group(task)를 사용해보자.. (2) | 2011.09.09 |
---|---|
tbb를 배워보자.. parallel_reduce 의 사용법.. 2 (0) | 2011.08.06 |
tbb를 배워보자.. parallel_for의 사용법.. 1 (0) | 2011.08.05 |
병렬 프로그래밍(PPL,openMP,TBB)의 for문 속도 비교..!! (2) | 2011.08.04 |