我正在尝试使用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];
}
}
答案 0 :(得分:1)
您的算法似乎是顺序的,因为您使用的是上一次迭代的结果config.force_ssl = false
。我也不认为k[i-1]
条款会解决它。你应该改变算法。
在尝试并行运行时,您确定结果是否正确吗?如果有的话,我会感到惊讶。