간단한 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;
}
#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 |