# Поддержка OpenMP

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

   - Стандарт OpenMP 3.1

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

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

   - Для e2k не поддержано в режиме `-mptr128`

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