OpenMP 的双重嵌套

Double nested for OpenMP

本文关键字:嵌套 OpenMP      更新时间:2023-10-16

关于OpenMP的快速问题:

我不确定如何使用开放式 MP.As in 并行实现嵌套的双 for 循环,在较大的 for 循环内有两个 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;
}

非常感谢所有回答的人。

这是

关于该主题的好教程:

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

我会建议一个

#pragma omp parallel for

对于最外部的环路,则

#pragma omp for

对于嵌套循环。

但是,我现在没有要测试的 OpenMP 设置。