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

    • Переменная окружения GOMP_CPU_AFFINITY не поддерживается

    • Для С/С++ не желательно использование вызова функции в качестве верхней границы цикла, стоящего под директивой #pragma omp for. В некоторых случаях это может приводить к ошибке распознавания переменной цикла

    • Clause default(none) игнорируется

    • Для Fortran не поддерживаются массивы в clause reduction