我正在尝试使用 OpenMP 并行化代码,我只是使用了两个简化,我不明白为什么我的 OpenMP 代码比顺序代码慢。它只是处理器之间阵列的拆分。有谁知道为什么会这样?
float visibleLength;
float *k = (float *)malloc(N * sizeof(float));
int visibleLines = 0;
k[0] = data.y[0] / data.x[0];
visibleLength = data.y[0];
omp_set_num_threads(12);
#pragma omp parallel for reduction(+:visibleLines,visibleLength)
for (int i = 1; i<N; i++) {
k[i] = fmax(k[i - 1], data.y[i] / data.x[i]);
if (k[i] > k[i - 1]) {
visibleLines = visibleLines + 1;
visibleLength = visibleLength + data.y[i] - k[i - 1] * data.x[i];
}
}
您的算法似乎是顺序的,因为您使用的是上一次迭代的结果 k[i-1]
。我也不认为ordered
条款会解决这个问题。您应该更改算法。
当您尝试并行运行时,您确定您的结果是正确的吗?如果他们是,我会感到惊讶。