Код медленнее, когда я использую 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 оговорка исправит это. Вы должны изменить алгоритм.

Вы уверены, что ваши результаты были правильными, когда вы пробовали параллельный прогон? Я был бы удивлен, если бы они были.

Другие вопросы по тегам