sort_parallel.cpp (832B)
1 /* Requires Thread Building Blocks (libtbb-dev on Debian) */ 2 3 #include <algorithm> 4 #include <cstdlib> 5 #include <ctime> 6 #include <execution> 7 #include <iostream> 8 9 typedef struct { int a, b; } pair_t; 10 pair_t a[ARRAYSIZE]; 11 12 int main(void) { 13 srand(time(NULL)); 14 for (auto &x : a) { 15 x.a = rand() % 1000000; 16 x.b = rand() % 1000000; 17 } 18 19 struct timespec begin; 20 clock_gettime(CLOCK_MONOTONIC, &begin); 21 22 std::sort(std::execution::par, a, a+ARRAYSIZE, 23 [](const pair_t &x, const pair_t &y) { 24 int d = x.a - y.a; 25 return d < 0 || (d == 0 && x.b > y.b); 26 }); 27 28 struct timespec end; 29 clock_gettime(CLOCK_MONOTONIC, &end); 30 double time = end.tv_sec - begin.tv_sec + 31 (end.tv_nsec - begin.tv_nsec) / 1000000000.0; 32 33 std::cout << "(" << a[ARRAYSIZE/2].a << ") C++ time for " << ARRAYSIZE 34 << " pairs (parallel): " << time << "s\n"; 35 }