5.1.18 OpenMP
OpenMP (Open Multi-Processing) — это интерфейс прикладного программирования (API), поддерживающий многопроцессорную обработку с общей памятью на нескольких платформах (включая Unix и Microsoft Windows) в C/C++ и Fortran. Он состоит из набора директив компилятора, библиотечных функций и переменных среды, которые влияют на поведение во время выполнения.
GNU Fortran стремится быть совместимым с Спецификацией интерфейса прикладного программирования OpenMP v4.5.
Для включения обработки директивы OpenMP !$omp в коде свободного формата; директив c$omp, *$omp и !$omp в формате фиксированной формы; условных директив компиляции !$ в свободном формате; и условных директив c$, *$ и !$ в формате фиксированной формы, необходимо вызвать gfortran с флагом -fopenmp. Это также обеспечивает автоматическую компоновку библиотеки GNU для offloading и многопроцессорной обработки libgomp.
Библиотечные функции OpenMP для Fortran предоставляются как в виде модуля 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-12.1.0/gfortran/OpenMP.html