Код медленнее, когда я использую 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];
}
}
1 ответ
Ваш алгоритм выглядит последовательным, потому что вы используете результат предыдущей итерации k[i-1]
, Я также не думаю, что ordered
оговорка исправит это. Вы должны изменить алгоритм.
Вы уверены, что ваши результаты были правильными, когда вы пробовали параллельный прогон? Я был бы удивлен, если бы они были.