parallel_for문과는 달리  합산 및 정산을 할때 동기화 이슈가 없다.

각각 쓰레드 별로  body 객체가 생성이 되고  연산후

join문에서 합산되기때문이다.

 

 

[-] Collapse
#include <stdio.h>
#include <tchar.h>
#include <tbb/tbb.h>


#ifdef _DEBUG
#pragma  comment(lib, "tbb_debug.lib")
#else
#pragma  comment(lib, "tbb.lib")
#endif // _DEBUG

using namespace tbb;

class CSumBody
{
public:
    CSumBody()
    {
        sum_ = 0 ;
    }

    CSumBody(CSumBody &body, split)
    {
        sum_ = 0 ;
    }

    void operator()(const tbb::blocked_range<__int64> &iter)
    {
        for (__int64 n = iter.begin() ; n != iter.end() ; ++n)
        {
            sum_ += 1 ;
        }
    }

    void join(const CSumBody &body)
    {
        sum_ += body.sum_ ;
    }
public:
    __int64 sum_ ;
};



int _tmain(int argc, _TCHAR* argv[])
{

    tick_count start,stop;
    __int64 sum = 0 ;
    task_scheduler_init  init ;


    start = tick_count::now();

    CSumBody body ;
    parallel_reduce(blocked_range<__int64>(0, 1000000000), body, auto_partitioner()) ;


    stop = tick_count::now();
    printf("Result %d  \t시간 %f\n", body.sum_, (stop - start).seconds()) ;

    getchar() ;
    return 0;
}






'C++ > Intell C++' 카테고리의 다른 글

간단한 TBB parallel_for 예제  (0) 2014.09.16
간단한 TBB parallel_while 예제  (0) 2014.09.16
간단한 TBB parallel_sort 예제  (0) 2014.09.16
간단한 TBB parallel_invoke 예제  (1) 2014.09.16

+ Recent posts