使用OpenMP时代码较慢

时间:2016-02-01 19:19:42

标签: openmp pragma reduction

我正在尝试使用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];
    }
}

1 个答案:

答案 0 :(得分:1)

您的算法似乎是顺序的,因为您使用的是上一次迭代的结果config.force_ssl = false。我也不认为k[i-1]条款会解决它。你应该改变算法。

在尝试并行运行时,您确定结果是否正确吗?如果有的话,我会感到惊讶。