WiscSort / wiscSort / RSW / msort.cc
msort.cc
Raw
#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);
    }
}