Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VOPROSY_Kolesnikov.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
613.39 Кб
Скачать

Синхронизация типа atomic

Этот тип синхронизации определяет переменную в левой части оператора присваивания, которая должна корректно обновляться несколькими нитями. В этом случае происходит предотвращение прерывания доступа, чтения и записи данных, находящихся в общей памяти, со стороны других потоков.

Для задания этого типа синхронизации в OpenMP в программах, написанных на языке C/C++, используется прагма

#pragma omp atomic

<операторы программы>

Синхронизация типа critical

Этот тип синхронизации используется для описания структурных блоков, выполняющихся только в одном потоке из всего набора параллельных потоков.

Для задания синхронизации типа critical в OpenMP в программах, написанных на языке C/C++, используется прагма

#pragma omp critical [ name ]

<структурный блок программы>

Синхронизация типа barrier

Синхронизация типа barrier устанавливает режим ожидания завершения работы всех запущенных в программе параллельных потоков при достижении точки barrier.

Для задания синхронизации типа barrier в OpenMP в программах, написанных на языке C/C++, используется прагма

#pragma omp barrier

Синхронизация типа master

Синхронизация типа master используется для определения структурного блока программы, который будет выполняться исключительно в главном потоке (параллельном потоке с нулевым номером) из всего набора параллельных потоков. Этот структурный блок следует за директивой

#pragma omp master

в программах, написанных на языке C/C++.

  1. Ініціалізація паралельної частини mpi програми

MPI_INIT(IERR) INTEGER IERR

Инициализация параллельной части программы. Все другие процедуры MPI могут быть вызваны только после вызова MPI_INIT. Инициализация параллельной части для каждого приложения должна выполняться только один раз. В языке Си функции MPI_Init передаются указатели на аргументы командной строки программы argc иargv, из которых системой могут извлекаться и передаваться в параллельные процессы некоторые параметры запуска программы.

int MPI_Init( int* argc, char*** argv)

MPI_Init - инициализация параллельной части приложения. Реальная инициализация для каждого приложения выполняется не более одного раза, а если MPI уже был инициализирован, то никакие действия не выполняются и происходит немедленный возврат из подпрограммы. Все оставшиеся MPI-процедуры могут быть вызваны только после вызова MPI_Init.

Возвращает: в случае успешного выполнения - MPI_SUCCESS, иначе - код ошибки. (То же самое возвращают и все остальные функции, рассматриваемые в данном руководстве.)

В зависимости от реализации MPI строчки 'Before MPI_INIT' И 'After MPI_FINALIZE' может печатать либо один выделенный процесс, либо все запущенные процессы приложения. Строчку 'Parallel section' должны напечатать все процессы. Порядок вывода строк с разных процессов может быть произвольным.

Общая схема MPI-программы на языке Си выглядит примерно следующим образом:

#include "mpi.h"

main(int argc, char **argv)

MPI_Init(&argc, &argv); MPI_Finalize() ;

  1. Директива #pragma omp barrier. Призначення, опції, приклади застосування

Самый распространенный способ синхронизации в OpenMP – барьер. Он оформляется с помощью директивы barrier.

Си:

#pragma omp barrier

Фортран:

!$omp barrier

Нити, выполняющие текущую параллельную область, дойдя до этой директивы, останавливаются и ждут, пока все нити не дойдут до этой точки программы, после чего разблокируются и продолжают работать дальше. Кроме того, для разблокировки необходимо, чтобы все синхронизируемые нити завершили все порождённые ими задачи (task).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]