当我使用 OpenMP 时,代码速度较慢



我正在尝试使用 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条款会解决这个问题。您应该更改算法。

当您尝试并行运行时,您确定您的结果是正确的吗?如果他们是,我会感到惊讶。

最新更新