【发布时间】:2012-03-27 22:59:31
【问题描述】:
我有一个问题,我想用 openmp 并行化两个 for 循环。
如何使用 openmp 优化这个循环:
void test(float** m,tab* t,int n){
int i,j;
float gain;
for (i = 1; i < n; i++)
{
for (j = i + 1;] j < n; j++)
{
if (i != j)
{
gain=m[t[(i+n-1)%n]][t[j]] + m[t[i]][t[(j+1)%n]] - m[t[(i+n -1)%n]][t[i]] - m[t[j]][t[(j+1)%n]]
if (gain< 0)
{
swapTab(t,i,j);
}
}
}
}
}
谢谢。
【问题讨论】:
-
首先是删除
if (i != j)... -
只交换数组的 2 个元素:
-
void swapTab(int* tab,int i,int j){ int temp;临时 = 选项卡 [i];选项卡 [i] = 选项卡 [j];选项卡 [j] = 温度; }
-
那么并行化这将是困难的,因为您遍历元素的顺序很重要。
标签: c++ c optimization loops openmp