我的快速排序工作正常,输出正确,但并行版本执行速度不比非并行版本快。我还能做些什么才能让它跑得更快?
void quickSort(int arr[], int low, int high)
{
int pi;
if (low < high)
{
//pi is partitioning index, arr[p] is now at right place
pi = partition(arr, low, high);
// Separately sort elements before partition and after partition
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
void quickSort_parallel_omp(int arr[], int low, int high)
{
int pi;
if (low < high)
{
pi = partition(arr, low, high);
omp_set_nested(1);
#pragma omp parallel sections num_threads(Nthreads)
{ //Nthreads is declared in the main as int Nthreads = 4
#pragma omp section
quickSort_parallel_omp(arr, low, pi - 1);
#pragma omp section
quickSort_parallel_omp(arr, pi + 1, high);
}
}
}
答案 0 :(得分:1)
由于并行化代码,将数据分配到多个并行处理单元并将结果再次组合回来的开销可能超过了性能增益。 我建议您增加输入大小以获得可观的性能提升。
答案 1 :(得分:0)
在您的情况下,创建线程,通过O / S为每个线程分配内存和时间片的时间比缩短数据所花费的时间要多。
只有在处理大量数据时才能看到并行处理的性能。除了许多其他因素外,还需要考虑多处理或并行处理,如处理器的系统内存数等。您可以获得大量关于此主题的在线文档。