You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
739 B
27 lines
739 B
13 years ago
|
void sample_qsort(float* begin, float* end) { ... }
|
||
|
|
||
|
void sample_qsort_serial(float* begin, float* end) { ... }
|
||
|
|
||
|
void sample_qsort_adaptive(float* begin, float* end, const long nthreshold)
|
||
|
{
|
||
|
if (begin != end) {
|
||
|
// parition ...
|
||
|
if (end - begin + 1 <= nthreshold) {
|
||
|
sample_qsort_serial(begin, middle);
|
||
|
sample_qsort_serial(++middle, ++end);
|
||
|
} else {
|
||
|
#pragma omp task
|
||
|
sample_qsort_adaptive(begin, middle, nthreshold);
|
||
|
#pragma omp task
|
||
|
sample_qsort_adaptive(++middle, ++end, nthreshold);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sample_qsort_adaptive(float* begin, float* end)
|
||
|
{
|
||
|
long nthreshold = ceil(sqrt(end - begin + 1)) / 2;
|
||
|
#pragma omp parallel
|
||
|
#pragma omp single nowait
|
||
|
sample_qsort_adaptive(begin, end, nthreshold);
|
||
|
}
|