_.cpp is updated for more options. Also a test is done on implicite copy constructor generation for a derived class.
55 lines
1.3 KiB
C++
55 lines
1.3 KiB
C++
/* Check cf5-opt.vim defs.
|
|
VIM: let g:lcppflags="-std=c++11 -O2 -pthread"
|
|
VIM: let g:cppflags=g:Iboost.g:Itbb
|
|
VIM: let g:ldflags=g:Lboost.g:Ltbb.g:tbbmalloc
|
|
VIM: let g: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;
|
|
}}
|
|
|