【发布时间】:2014-02-16 15:16:09
【问题描述】:
我在 OpenMP 中实现前缀和问题,但我似乎没有得到任何加速。实际上,并行实现比顺序实现花费的时间更长。
这是我的前缀和代码:
for (k = 1; k < n; k = kk) {
kk = k << 1;
#pragma omp parallel for
for (i = kk - 1; i < n; i += kk) {
x[i] = x[i-k] + x[i];
}
}
for (k = k >> 1; k > 1; k = kk) {
kk = k >> 1;
#pragma omp parallel for
for (i = k - 1; i < n - kk; i += k) {
x[i + kk] = x[i] + x[i + kk];
}
}
我使用 gcc -fopenmp -O3 prefix_sums.c 编译了这个。我得到 1 000 000 个整数的结果是:
对于顺序实现(也使用 -O3 编译):
0.001132
0.000929
0.000872
0.000865
0.000842
对于并行实现(在 4 个内核上重新运行 5 次):
0.025851
0.005493
0.006327
0.007092
0.030720
有人可以解释一下问题可能是什么吗?实现给出了正确的输出,但为什么需要这么长时间?
谢谢。
【问题讨论】:
标签: parallel-processing openmp