Что такое OpenMP?
Автор: d.koshyl • Октябрь 31, 2023 • Реферат • 1,861 Слов (8 Страниц) • 136 Просмотры
Что такое OpenMP?
OpenMP (Open Multi-Processing) — открытый стандарт для распараллеливания программ на языках Си, Си++ и Фортран. Даёт описание совокупности директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с общей памятью.
OPEN MP (Open Multi-Processing) – Интерфейс для создания параллельных программ, разработанных организацией OPEN MP ARB (Architecture Board). Параллельный вариант программы создается по с помощью директив #pragma. Если режим не включен, получаем последовательную программу. Очень прост в использовании, но имеет ограниченные возможности. Фактически использует пул потоков, создаваемый соответственно целевой операционной системы.
Интерфейс OpenMP задуман как стандарт для программирования на масштабируемых SMP-системах (SSMP,ccNUMA, etc.) в модели общей памяти (shared memory model). В стандарт OpenMP входят спецификации набора директив компилятора, процедур и переменных среды.
Примерами систем с общей памятью, масштабируемых до большого числа процессоров, могут служить суперкомпьютеры Cray Origin2000 (до 128 процессоров), HP 9000 V-class (до 32 процессоров в одном узле, а в конфигурации из 4 узлов - до 128 процессоров), Sun Starfire (до 64 процессоров).
Принцип использования состоит в том, что в программу добавляются специальные директивы. Эти директивы игнорируются, если компилятор не поддерживает работу с OPEN MP, или не задан необходимый ключ и обрабатываются, если поддерживает и ключ задан. Директива #pragma языка C++ обрабатывается именно так, поэтому используется для этих целей. В начале выполнения программы, как обычно, создается первичный поток, который в рамках данной технологии называется master – потоком. Если задана директива начала параллельной секции, то создается необходимое количество дополнительных потоков, чтобы обеспечить возможность параллельного выполнения секции необходимое количество раз. Для создания этих потоков компилятор формирует требуемый код. Потоковая функция для этих потоков включает в себя операторы между директивой начала и конца параллельного участка. Компилятор автоматически добавляет функции синхронизации завершения потоков в точке выхода из параллельной секции, код для уничтожения потоков. После завершения параллельного региона выполняется только master поток.
Как включается режим использования Open MP?
Можно включить через Debug - Lab4 Debug Properties - C/C++ - Language - Open MP
Project-><Имя проекта>Properties->Command Line в окне Additional Options добавить ключ трансляции /openmp или в Project-><Имя проекта>Properties->Language установить флажок OpenMP Support і нажать кнопку Применить, а потом ОК. (для VS2013)
Как исполняются директивы Open MP, если режим Open MP не включен?
Программа не будет выдавать ошибок, а просто будет работать в последовательном режиме.
#pragma omp используется для указания директив и предложений. Если параметр /openmp не указан при компиляции, компилятор игнорирует предложения и директивы OpenMP. Вызовы функций OpenMP обрабатываются компилятором, даже если /openmp не указаны.
Функции для определения времени
Для оценки производительности различных вариантов функций нужно уметь определять временные свойства. Для измерения времени библиотека OPEN MP содержит функцию omp_get_wtime(), что аналогично функции time возвращает время в секундах, прошедшем с определенного момента времени, но в отличие от time возвращает не целое число секунд, а данное типа double. Фактически разница исходит из той же точности, что и точность измерения времени с помощью функции QueryPerformanceCounter. Для определения продолжительности одного такта в секундах используется функция omp_get_wtick().
...