-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
37 lines (26 loc) · 1.39 KB
/
main.cpp
File metadata and controls
37 lines (26 loc) · 1.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include "parallel.hpp"
int main()
{
// print number in the range [1,9] in parallel
parallel::for_each( 1ul, 10ul, [] ( int i ) { std::cout << i << std::endl; } );
// fill vector with random numbers
std::vector< double > random( 100 );
auto generate_number = [] ( auto& element )
{
thread_local auto& generator = parallel::get_generator(); // use reference so that internal state of the generators changes!
element = generator.gaussian();
};
// do 100 calls, to trigger the self-optimization:
for ( int i = 0; i < 100; ++i )
parallel::for_each( random.begin(), random.end(), generate_number ); // this call self optimizies the number of threads used
// 100 random numbers => no parallel speedup
for ( size_t i = 0; i < random.size() / 10; ++i )
std::cout << random[ i ] << std::endl;
random.resize( 100'000 ); // use more numbers
parallel::get_optimizer( generate_number ).reset(); // reset the optimizer for generate number
for ( int i = 0; i < 100; ++i )
parallel::for_each( random.begin(), random.end(), generate_number );
// 100'000 random numbers => this will gain parallel speedup, but as now, no re-optimization is triggered
return 0;
}