Выгодно ли распараллеливать объявление переменных? - PullRequest
0 голосов
/ 22 ноября 2018

Интересно, полезно ли при написании параллельной программы вставлять объявления переменных в параллельный раздел?Поскольку закон Амдаля гласит, что если большая часть программы параллельна, то лучше, но я не вижу смысла распараллеливать объявление переменных и, например, операторы возврата, это обычный параллельный код:

#include <omp.h>

int main(void) {
    int a = 0;
    int b[5];

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

    return 0;
}

Будет ли полезно в отношении закона Амдала написать это (так что 100% программы идет параллельно):

#include <omp.h>

int main(void) {
    #pragma omp parallel
    {
        int a = 0;
        int b[5];
        #pragma omp for
        for (int i = 0; i < 5; ++i) {
            b[i] = a;
        }

        return 0;
    }        
}

1 Ответ

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

Эти коды не эквивалентны: в первом случае a и b являются общими переменными (так как shared является поведением переменных по умолчанию), во втором случае это переменные, относящиеся к частным потокам, которые не существуют вне области действияпараллельный регион.

Кроме того, оператор return в параллельном регионе во втором фрагменте кода недопустим и должен вызывать ошибку компиляции.

Как видно, например, в этом Справочная карта OpenMP 4.0

Исполняемая директива OpenMP применяется к последующему структурированному блоку или конструкции OpenMP.Каждая директива начинается с #pragma omp.Остальная часть директивы следует соглашениям стандартов C и C ++ для директив компилятора.Структурный блок - это отдельный оператор или составной оператор с одной записью вверху и одним выходом внизу.

Блок, содержащий оператор return, не является структурированнымблок, поскольку у него нет единственного выхода внизу (т. е. закрывающая скобка } - не единственный выход, поскольку return - еще один).Это не может юридически следовать директиве #pragma omp parallel.

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