#include "msort.h" #include <algorithm> #include <iostream> #include <vector> void msort_helper(record_t* arr, const std::size_t n, const std::size_t threshold) { if (n < threshold) { std::sort(arr, arr + n); return; } #pragma omp task firstprivate (arr, n, threshold) msort_helper(arr, n / 2, threshold); #pragma omp task firstprivate (arr, n, threshold) msort_helper(arr + (n / 2) , n - (n / 2), threshold); #pragma omp taskwait std::inplace_merge(arr, arr + n / 2, arr + n); } void msort(record_t* arr, const std::size_t n, const std::size_t threshold) { omp_set_num_threads(10); #pragma omp parallel { #pragma omp single msort_helper(arr, n, threshold); } }