본문 바로가기

tbb

tbb Visual studio 2012에서 빌드하기.. vs2010까지는 바이너리만 받아서 사용해도 됬었는데..TBB최신버전.. 2012/06/28일자 tbb 4.0 update 5 버전에는 vs2012에서 컴파일된 버전이 제공되지 않습니다...그래서 결국 직접 컴파일을 해야되는데...소스 받아서 직접 컴파일하면... OTL... 에러 발생!! 일단 std::copy_exception 관련 에러가 발생되는데 수정하는데 2가지 방법이 있습니다.. 가장 쉬운건..std::copy_exception 부분을 std::make_exception_ptr 이걸로 수정하는 방법과..프로젝트 속성 -> C/C++ -> 명령줄 -> 추가옵션 부분에 /DTBB_USE_CAPTURED_EXCEPTION=1 이걸 추가 하는방법... 둘중 아무거나 하신후 컴파일을 다시 실행하면..... 더보기
람다식을 이용한 TBB의 parallel_for parallel_for_each 에서 tbb::concurrent_unordered_map 을 사용해보자. TBB를 사용해보시면 아시겠지만.. 람다식을 사용하지 않고 TBB를 사용하려면 매우 복잡하고 피곤합니다.. 사용하는 함수마다 class를 생성해줘야 되니깐요.. 기본적으로 람다식이 된다는 가정하에 설명을 드리겠습니다. 람다식이 가능하다 == vc++ 2010 이상인걸로 간주하고 auto 키워드도 사용된다는걸로 생각하겠습니다.. 일단 기존에 사용하던 방법입니다.. #include #include typedef tbb::concurrent_unordered_map TBB_MAP; class TbbUnorderMap { public: void operator() (TBB_MAP::range_type& _range) const { for (TBB_MAP::iterator iter = _range.begin();.. 더보기
TBB & PPL의 task_group(task)를 사용해보자.. 기존에 쓰래드 생성시 사용했었던 CreateThread와 _BeginThread도 있지만.. 병렬프로그래밍에서는 task라는게 새로 생겼습니다.. 코드부터.. #include #include #include #include #include #include #include #include #include using namespace std; const int MAX_LOOP = 10000000; const int THREAD_COUNT = 4; queue queTest; tbb::concurrent_queue queParallelTest1; tbb::concurrent_bounded_queue queParallelTest2; Concurrency::concurrent_queue queParallelTest.. 더보기
tbb를 배워보자.. parallel_reduce 의 사용법.. 2 parallel_reduce는 ..... 일단 코드부터 -_- #include #include #include #include #include #include using namespace tbb; using namespace std; class TbbTest { std::vector* m_vecTest; public: void operator() (const tbb::blocked_range&r) { std::vector* vecTemp = m_vecTest; for(int i = r.begin(); i != r.end(); i++) { m_fSum += (*vecTemp)[i]; } } void join(const TbbTest &y) { m_fSum += y.m_fSum; } TbbTest(TbbTe.. 더보기
tbb를 배워보자.. parallel_for의 사용법.. 1 OpenMP, PPL, TBB 이 3개중 한개만이라도 일단 배워보자 하는 마음에. 어제 속도 테스트에 혹해서 TBB에 대해서 본격적으로 배워보기로 했습니다.. 먼저 TBB의 parallel_for에 대해서 알아보겠습니다.. #include #include #include #include #include using namespace std; class TbbTest { std::vector* const m_vecTest; public: void operator() (tbb::blocked_range&r) const { std::vector* vecTemp = m_vecTest; for(int i = r.begin(); i != r.end(); i++) { (*vecTemp)[i]=i; } } TbbTest.. 더보기
병렬 프로그래밍(PPL,openMP,TBB)의 for문 속도 비교..!! openMP와 TBB를 공부하던 도중 얼마나 빨라지는지 한번 비교를 해보았습니다.. 비교하는김에 PPL까지 포함해서 3가지 다 비교해보았고. 비교의 대상은 가장 기초적이고 책의 첫부분에 나오는 for문... 일단 코드부터.. #include #include #include #include #include #include #include #pragma comment(lib,"d3dx9.lib") using namespace std; int _tmain(int argc, _TCHAR* argv[]) { D3DXMATRIX mat; clock_t start, stop; start = clock(); #pragma omp parallel for { for( int i = 0; i < 100000000; ++i .. 더보기