双嵌套OpenMP

时间:2012-05-01 02:11:12

标签: c++ visual-studio-2010 openmp

关于OpenMP的快速问题:

我不确定如何使用open MP在并行中实现嵌套的double 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;
}

非常感谢所有回答的人。

1 个答案:

答案 0 :(得分:0)

这是关于该主题的一个很好的教程:

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

我建议

#pragma omp parallel for

对于最外部的循环,然后

#pragma omp for

用于嵌套循环。

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