Поддержка OpenMP
================

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

   * Стандарт OpenMP 3.1
   * Языки C, C++, Fortran

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

   * Для 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`` своими параметрами могут иметь только константы и переменные целого типа, выражения не допускаются
   * Переменная окружения ``GOMP_CPU_AFFINITY`` не поддерживается
   * Для С/С++ не желательно использование вызова функции в качестве верхней границы цикла, стоящего под директивой ``#pragma omp for``. В некоторых случаях это может приводить к ошибке распознавания переменной цикла
   * Clause ``default(none)`` игнорируется
   * Для Fortran не поддерживаются массивы в clause ``reduction``

