Я реализую проблему префиксных сумм в OpenMP, и, похоже, я не получаю ускорения. На самом деле параллельная реализация занимает больше времени, чем последовательная.Префикс суммы слишком долго 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
для параллельной реализации (5 повторно запускается на 4 ядра):
0.025851
0.005493
0.006327
0.007092
0.030720
Может ли кто-нибудь объяснить мне, в чем проблема? Реализация дает правильный результат, но почему это так долго?
спасибо.
но не должен ли я заметить хотя бы одно и то же время выполнения? – pixie
У вас есть дополнительные накладные расходы на синхронизацию потоков и т. Д. Честно говоря, я не знаю, что OpenMP так не может быть более конкретным, я просто говорю об общей теории параллелизма здесь :) –
Я подумал об этом, но не сделал учтите, что может быть такая огромная разница. – pixie