2017-11-27 17 views
-1

私のクイックソートは正常に出力されますが、パラレル・バージョンは非パラレル・バージョンより速く実行されません。それをもっと速く動かすために他に何ができますか?パラレル・クイック・ソートがシーケンシャル・クイック・ソートより速く実行されない

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); 
     } 
    } 
} 
+1

[多くのもの](https://stackoverflow.com/questions/3969813/which-parallel-sorting-algorithm-has-the-best-average-case-performance) – nwp

+2

配列の大きさはどれくらいですか?新しいスレッドを開始するには時間がかかるので、その時間を稼ぐには十分な作業が必要です。そしてその後、いくつかの。 –

+0

大きなものはありません20 – user6088127

答えて

1

データを複数の並列処理装置に分配し、結果を再び結合するためのオーバーヘッドが、コードを並列化することによるパフォーマンスの向上を超えている可能性があります。 私はあなたの入力サイズを大きくすることをお勧めします。

0

スレッドを作成する時間、各スレッドにO/Sでメモリとタイムスライスを割り当てる時間は、データを短くする時間よりも多くの時間がかかります。

並列処理のパフォーマンスは、大量のデータを処理する場合にのみ見られます。他にも、システムメモリのプロセッサ数など、マルチプロセッシングや並列処理で考慮する必要があります。このトピックに関するオンラインドキュメントはたくさんあります。

関連する問題