Files
test/cpp/tbb/tbb_task_scheduler_init.cpp
2017-06-28 12:41:23 -04:00

55 lines
1.3 KiB
C++

/* Check cf5-opt.vim defs.
VIM: let b:lcppflags="-std=c++11 -O2 -pthread"
VIM: let b:cppflags=g:Iboost.g:Itbb
VIM: let b:ldflags=g:Lboost.g:Ltbb.g:tbbmalloc
VIM: let b:ldlibpath=g:Bboost.g:Btbb
*/
#include <tbb/enumerable_thread_specific.h>
#include <tbb/task_scheduler_init.h>
#include <tbb/parallel_for_each.h>
#include <iostream>
#include <exception>
#include <vector>
/*
* Conclusion:
* The first task_sheduler_init is configuring number of threads in
* the thread pool. If the task scheduler initialised implicitly then
* the number of threads is the number of cores. To ensure uncomment
* the commented line below.
*/
int main ( void )
{try{
std::vector<int> v(1024*1024);
//tbb::enumerable_thread_specific<int> count;
tbb::task_scheduler_init init3(5);
tbb::task_scheduler_init init(10);
tbb::task_scheduler_init init2(1);
tbb::enumerable_thread_specific<int> count;
tbb::parallel_for_each( v.begin(), v.end(), [&count](int& v){
++count.local();
});
int i = 0;
for ( int c : count )
{
std::cout << "Thread: " << ++i << " counted " << c << std::endl;
}
return 0;
}
catch ( const std::exception& e )
{
std::cerr << std::endl
<< "std::exception(\"" << e.what() << "\")." << std::endl;
return 2;
}
catch ( ... )
{
std::cerr << std::endl
<< "unknown exception." << std::endl;
return 1;
}}