0

OpenMP に関する簡単な質問:

オープン MP を使用してネストされた double for ループを並列に実装する方法がわかりません。たとえば、より大きな for ループ内に 2 つの for ループがあります。このようなループを使用するアルゴリズムは、「両端選択ソート」です。

void project::parallelDeSelectionSort()
{
  //Printarr(arr,size);
  int comparisons = 0;
  int j = 0;
  int k = 0;


  #pragma omp parallel for private (j, k)
  for(int i = 0;  i < arrSize; i++)
  {
      int min = i;
      int max = ((arrSize-1) - i);
      int maxtemp = max;
      int mintemp = min;


  for(j = min;  j < arrSize;  j++)
  {
       if(data[min] > data[j])
       {
           min = j;
       }
       comparisons++;
       //Printarr(data,arrSize);
  }//end for


  for(k = max; k > 0; k--)
  {
       if(data[max] < data[k])
       {
           max = k;
       }
       comparisons++;
       //Printarr(data,arrSize);
  }//end for

  if(min > mintemp)
  {
      swap(data[min], data[mintemp]);
  }
  comparisons++;

  if(max < maxtemp)
  {
      swap(data[max], data[maxtemp]);
  }
  comparisons++;

  //Printarr(data,arrSize);
  }//end outer for

  //cout<<GetCounter()<<endl;
  cout<<"number of comparisons in parallel DE selection sort: "<< comparisons<<endl;
}

答えてくれたすべての人に感謝します。

4

1 に答える 1

0

これは、そのトピックに関する優れたチュートリアルです。

http://msdn.microsoft.com/en-us/magazine/cc163717.aspx

私は提案します

#pragma omp parallel for

最も外側のループの場合、

#pragma omp for

ネストされたループの場合。

ただし、テストする OpenMP セットアップがありません。

于 2012-05-01T07:05:16.740 に答える