Spec-Zone.ru › GNU Fortran 9

6.1.16 OpenMP

OpenMP (Open Multi-Processing) — это интерфейс прикладного программирования (API), который поддерживает многоплатформенное программирование с общей памятью для многопроцессорных систем на C/C++ и Fortran на многих архитектурах, включая Unix и Microsoft Windows. Он состоит из набора директив компилятора, библиотечных функций и переменных среды, которые влияют на поведение во время выполнения.

GNU Fortran стремится к совместимости с OpenMP Application Program Interface v4.5.

Для включения обработки директивы OpenMP !$omp в исходном коде в свободном формате; директивы c$omp, *$omp и !$omp в фиксированном формате; условные компиляционные маяки !$ в свободном формате; и маяки c$, *$ и !$ в фиксированном формате, необходимо вызвать gfortran с опцией -fopenmp. Это также организует автоматическую компоновку библиотеки GNU Offloading и Multi Processing Runtime Library libgomp в GNU Offloading и Multi Processing Runtime Library.

Библиотечные функции OpenMP Fortran Runtime Library предоставляются как в виде модуля Fortran 90 с именем omp_lib , так и в виде файла Fortran include с именем omp_lib.h.

Пример паралелизованного цикла взят из Приложения A.1 спецификации OpenMP Application Program Interface v2.5:

SUBROUTINE A1(N, A, B)
  INTEGER I, N
  REAL B(N), A(N)
!$OMP PARALLEL DO !I is private by default
  DO I=2,N
    B(I) = (A(I) + A(I-1)) / 2.0
  ENDDO
!$OMP END PARALLEL DO
END SUBROUTINE A1

Обратите внимание:

  • -fopenmp подразумевает -frecursive, т.е., все локальные массивы будут выделены в стеке. При переносе существующего кода на OpenMP это может привести к неожиданным результатам, особенно к ошибкам сегментации, если размер стека ограничен.
  • На системах, основанных на glibc, приложения с включенным OpenMP не могут быть статически скомпонованы из-за ограничений в реализации pthreads. Возможно получение работоспособного решения, если -Wl,--whole-archive -lpthread -Wl,--no-whole-archive добавлено в командную строку. Однако это не поддерживается gcc и поэтому не рекомендуется.

Далее: OpenACC, Предыдущее: CONVERT specifier, Вверх: Реализованные расширения в GNU Fortran [Содержание][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-9.3.0/gfortran/OpenMP.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API