Каковы различия между способами написания разделов OpenMP? - PullRequest
0 голосов
/ 09 ноября 2018

Какая (если есть) разница между использованием:

#pragma omp parallel
    {
#pragma omp for simd
        for (int i = 0; i < 100; ++i)
        {
            c[i] = a[i] ^ b[i];
        }
    }

и

#pragma omp parallel for simd
    for (int i = 0; i < 100; ++i)
    {
        c[i] = a[i] ^ b[i];
    }

Или компилятор (ICC) заботится?

Я знаю, что первый определяет параллельный раздел, а затем цикл for, который нужно разделить, и вы можете сделать несколько вещей после цикла. Пожалуйста, исправьте меня, если я ошибаюсь, все еще изучая способы openmp ..

Но когда бы вы воспользовались тем или иным способом?

1 Ответ

0 голосов
/ 09 ноября 2018

Проще говоря, если у вас есть только один цикл for, который вы хотите распараллелить, используйте #pragma omp parallel for simd.

Если вы хотите распараллелить несколько циклов for или добавить любые другие параллельные подпрограммы до или после текущего цикла for, используйте:

#pragma omp parallel
{
    // Other parallel code

    #pragma omp for simd
        for (int i = 0; i < 100; ++i)
        {
            c[i] = a[i] ^ b[i];
        }

    // Other parallel code
}

Таким образом, вам не нужно повторно открывать параллельный раздел при добавлении большего количества параллельных подпрограмм, что сокращает время загрузки.

...