간단한 TBB  parallel_for  예제  

여기서는 람다를 사용을 하고 있지만...

아직 C++0x가 적용 안된 컴파일러 (Windows의 경우 visual studio 2008 이하) 는 람다 함수를 사용 할 수가 없다.

람다 함수를 사용하는 대신에 functor를 이용 해야 한다.

[-] Collapse  

#include <stdio.h>
#include <tchar.h>
#include <tbb/task_scheduler_init.h>
#include <tbb/parallel_for.h>
#include <tbb/blocked_range.h>
#include <tbb/atomic.h> // atomic
#include <tbb/mutex.h> // 뮤텍스



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



using namespace tbb ;

int main(int argc, _TCHAR* argv[])
{
    task_scheduler_init init ;

    //int nOut = 0 ;
    atomic<int> nOut ;
    nOut  = 0 ;


    parallel_for(blocked_range<int>(0, 100000),
        [&nOut](const blocked_range<int>& iter)
    {
        for (int n = iter.begin() ; n != iter.end() ; ++n)
        {
            nOut += 1 ;
        }
    }
    ,  auto_partitioner()) ;

    printf("Result %d\n", nOut) ;



    // 다른 락거는 방법

    tbb::mutex _lock;
    int   _sum = 0;
    parallel_for(blocked_range<int>(0, 100000),
        [&_lock, &_sum](const blocked_range<int>& iter)
    {
        int sum = 0;
        for (int n = iter.begin() ; n != iter.end() ; ++n)
        {
            sum += 1 ;
        }

        _lock.lock() ;
        _sum += sum ;
        _lock.unlock() ;
    },  auto_partitioner()) ;

    printf("Result2 : %d\n", _sum) ;

    getchar() ;
    return 0;
}

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

간단한 TBB parallel_reduce 예제  (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