簡體   English   中英

並行遞歸Bitonic排序比串行(OpenMP)慢

[英]Parallel Recursive Bitonic Sort slower than Serial (OpenMP)

我的OpenMP(C)並行代碼比串行雙音排序代碼慢,盡管我已經完成了所有可能的組合,但是我找不到問題所在。

這是代碼的一部分:

void recBitonicSortOpenMP( int lo, int cnt, int dir ) {
   if (  cnt >  1 ) {
         int k = cnt / 2;
         #pragma omp parallel sections 
         {

         #pragma omp section 
         recBitonicSortOpenMP( lo,     k, ASCENDING );

         #pragma omp section    
         recBitonicSortOpenMP( lo + k, k, DESCENDING );

         }
         bitonicMergeOpenMP( lo, cnt, dir );

   }

}

它是Bitonic Sort的實現。

對於此類遞歸問題,請使用OpenMP任務,而不是嵌套的並行性和節。 http://cs.umw.edu/~finlayson/class/fall16/cpsc425/notes/24-sorting.html為您提供了一個很好的示例,可以遵循...

您應該嘗試並行化該命令式的命令式版本。 我認為遞歸版本是一個固有的串行問題。

有許多實用程序可用於並行化“ For”循環。

http://www.openmp.org/specifications/

算法的兩個版本:

https://www.cs.duke.edu/courses/fall08/cps196.1/Pthreads/bitonic.c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM