关于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;
}
非常感谢所有回答的人。
答案 0 :(得分:0)
这是关于该主题的一个很好的教程:
http://msdn.microsoft.com/en-us/magazine/cc163717.aspx
我建议
#pragma omp parallel for
对于最外部的循环,然后
#pragma omp for
用于嵌套循环。
但是,我现在没有要测试的OpenMP设置。