OpenMP включает лишь два базовых типа конструкций: директивы pragma и функции исполняющей среды OpenMP.
Директивы pragma, как правило, указывают компилятору реализовать параллельное выполнение блоков кода. Все эти директивы начинаются с #pragma omp. Как и любые другие директивы pragma, они игнорируются компилятором, не поддерживающим конкретную технологию — в данном случае OpenMP.
Функции OpenMP служат в основном для изменения и получения параметров среды. Кроме того, OpenMP включает API-функции для поддержки некоторых типов синхронизации. Чтобы задействовать эти функции библиотеки OpenMP периода выполнения (исполняющей среды), в программу нужно включить заголовочный файл omp.h. Если вы используете в приложении только OpenMP-директивы pragma, включать этот файл не требуется.
Директивы OpenMP
Общий формат директив OpenMP (C / C++):
#pragma omp | directive-name | [clause,...] | newline |
Required for all OpenMP C/C++ directives. | A valid OpenMP directive. Must appear after the pragma and before any clauses. | Optional. Clauses can be in any order, and repeated as necessary unless otherwise restricted. | Required. Precedes the structured block which is enclosed by this directive. |
OpenMP поддерживает директивы parallel, for, parallel for, section, sections, single, master, critical, flush, ordered и atomic, которые определяют или механизмы разделения работы или конструкции синхронизации.
|
|
Раздел (clause) — это необязательный модификатор директивы, влияющий на ее поведение. Списки разделов, поддерживаемые каждой директивой, различаются, а пять директив (master, critical, flush, ordered и atomic) вообще не поддерживают разделы.
Example:
#pragma omp parallel default(shared) private(beta,pi) |
Общие правила:
- Зависимость от регистра (case sensitive)
- Директивы применяются как минимум к одному структурированному блоку.
- Для переноса составных директив используется символ "\".