Поддержка OpenMP

  1. Поддержка:

    • Стандарт OpenMP 4.0

    • Языки C, C++, Fortran

  2. Ограничения:

    • Nested параллелизм не поддержан. Если при исполнении уже распараллеленного цикла встречаются циклы, которые нужно распараллелить, то эти (вложенные) циклы будут исполняться последовательно

    • Не поддержан clause collapse

    • Для C/C++ после директивы #pragma omp всегда должен следовать statement языка. Проблемы могут возникнуть для #pragma omp barrier и #pragma omp flush, если за ними нет statement’а. Для обхода проблемы рекомендуется в следующей строке поставить пустой statement, например “0;” или “;”

    • Переменные, перечисленные в clause’ах private, lastprivate, firstprivate и threadprivate должны иметь скалярный базовый тип или массив скалярного базового типа. В противном случае результат программы неопределен

    • Директива #pragma omp for не поддержана для итераторов C++

    • Для C/C++ выражения в параметрах clause if, num_threads, num_teams, thread_limit, priority, schedule, dist_schedule и final могут содержать только следующие операторы: арифметические, логические, сравнения, побитового сдвига, разыменование указателя (*a), обращение к полю структуры (a.b)

    • Не поддержаны (игнорируются) target-конструкции.

    • Не поддерживается (приводит к ошибке исполнения программы) использование OpenMP из дочернего потока, созданного не конструкцией OpenMP