- •Гомогенні та гетерогенні обчислювальні системи
- •В яких спосіб реалізовано взаємодію процесів у mpi програмах?
- •Системи черг на обчислювальних кластерах
- •Доточкові передачі даних в mpi
- •Паралельні області та послідовні області у OpenMp програмі
- •Структура mpi програми
- •Проблеми організації паралельних обчислень
- •Механізми синхронізації у mpi програмах?
- •Мережі з’єднання у високопродуктивних обчислювальних системах
- •Редукційні операції у mpi програмах?
- •Показники ефективності паралельних алгоритмів
- •Передача даних на всі процеси даного комунікатора у mpi програмах?
- •Паралельні та розподілені обчислення
- •Збирання даних зі всіх процесів даного комунікатора у mpi програмах?
- •Функції для роботи з системним таймером в OpenMp
- •Директива #pragma omp parallel. Призначення, опції, приклади застосування Директива parallel
- •Відкладені операції прийому та передачі у mpi програмах? Отложенные запросы на взаимодействие
- •Директива #pragma omp single та #pragma omp master. Призначення, опції, приклади застосування Директива single
- •Директива master
- •Передача повідомлень без блокування у mpi програмах Передача/прием сообщений без блокировки
- •Змінні у OpenMp програмах Классы переменных
- •Передача повідомлень з блокуванням у mpi програмах Передача/прием сообщений с блокировкой
- •Функції omp_get_thread_num() та omp_get_num _thread(). Призначення, опції, приклади застосування
- •Колективні операції з взаємодії процесів у mpi програмах
- •Директива #pragma omp for. Призначення, опції, приклади застосування
- •Індивідуальні операції з взаємодії процесів у mpi програмах
- •Директива #pragma omp sections. Призначення, опції, приклади застосування
- •В яких спосіб реалізовано взаємодію процесів у mpi програмах?
- •Директива #pragma omp task. Призначення, опції, приклади застосування
- •Функції mpi_Wtime(). Призначення, опції, приклади застосування
- •Механізми синхронізації в OpenMp програмах
- •Синхронизация типа atomic
- •Синхронизация типа critical
- •Синхронизация типа barrier
- •Синхронизация типа master
- •Ініціалізація паралельної частини mpi програми
- •Директива #pragma omp barrier. Призначення, опції, приклади застосування
- •Спорідненість та відмінності технології OpenMp та mpi
- •Критичні секції в OpenMp програмах
- •Високопродуктивні обчислювальні системи
- •Взаємні блокування у паралельних програмах
- •Визначення загального числа паралельних процесів у групі та визначення номера процесу в групі у mpi програмах?
- •Моделі паралельних обчислень
- •Грід системи
- •Критичні секції в OpenMp програмах
- •В яких спосіб реалізовано взаємодію процесів у mpi програмах?
- •Механізми синхронізації в OpenMp програмах
- •Синхронизация типа atomic
- •Синхронизация типа critical
- •Синхронизация типа barrier
- •Синхронизация типа master
- •Спорідненість та відмінності технології OpenMp та mpi
- •Директива #pragma omp task. Призначення, опції, приклади застосування
- •Ініціалізація паралельної частини mpi програми
- •Директива #pragma omp for. Призначення, опції, приклади застосування
- •Функції mpi_Wtime(). Призначення, опції, приклади застосування
- •Функції omp_get_thread_num() та omp_get_num _thread(). Призначення, опції, приклади застосування
- •Індивідуальні операції з взаємодії процесів у mpi програмах
- •Директива #pragma omp single та #pragma omp master. Призначення, опції, приклади застосування Директива single
- •Директива master
- •Колективні операції з взаємодії процесів у mpi програмах
- •Директива #pragma omp parallel. Призначення, опції, приклади застосування Директива parallel
- •Передача повідомлень без блокування у mpi програмах Передача/прием сообщений без блокировки
- •Показники ефективності паралельних алгоритмів
- •Передача повідомлень без блокування у mpi програмах Передача/прием сообщений без блокировки
- •Паралельні області та послідовні області у OpenMp програмі
- •Відкладені операції прийому та передачі у mpi програмах? Отложенные запросы на взаимодействие
- •Системи черг на обчислювальних кластерах
- •Дисковий ввід ти вивід у mpi програмах
Доточкові передачі даних в mpi
Начнем рассмотрение средства взаимодействия в MPI с так называемых точечных обменов. Это название происходит от английского “point-to-point communications”, которое означает, что у взаимодействия есть две точки: процесс-отправитель и процесс-получатель сообщения. Точечные, так же как и обмены других типов, всегда производятся в пределах одного коммуникатора, который указывается в качестве параметра в вызовах функций обмена. Ранги процессов, принимающих участие в обменах, вычисляются по отношению к указанному коммуникатору.
Связь "точка-точка" это самый простой тип связи между задачами: одна ветвь вызывает функцию передачи данных, а другая - функцию приема. В MPI это выглядит, например, так:
Задача 1 передает:
int buf[10];
MPI_Send( buf, 5, MPI_INT, 1, 0, MPI_COMM_WORLD );
Задача 2 принимает:
int buf[10];
MPI_Status status;
MPI_Recv( buf, 10, MPI_INT, 0, 0, MPI_COMM_WORLD, &status );
Аргументы функций:
Адрес буфера, из которого в задаче 1 берутся, а в задаче 2 помещаются данные. Помните, что наборы данных у каждой задачи свои, поэтому, например, используя одно и то же имя массива в нескольких задачах, Вы указываете не одну и ту же область памяти, а разные, никак друг с другом не связанные.
Размер буфера. Задается не в байтах, а в количестве ячеек. Для MPI_Send указывает, сколько ячеек требуется передать (в примере передаются 5 чисел). В MPI_Recv означает максимальную емкость приемного буфера. Если фактическая длина пришедшего сообщения меньше - последние ячейки буфера останутся нетронутыми, если больше - произойдет ошибка времени выполнения.
Тип ячейки буфера. MPI_Send и MPI_Recv оперируют массивами однотипных данных. Для описания базовых типов Си в MPI определены константы MPI_INT, MPI_CHAR, MPI_DOUBLE и так далее, имеющие тип MPI_Datatype. Их названия образуются префиксом "MPI_" и именем соответствующего типа (int, char, double, ...), записанным заглавными буквами. Пользователь может "регистрировать" в MPI свои собственные типы данных, например, структуры, после чего MPI сможет обрабатывать их наравне с базовыми. Процесс регистрации описывается в главе "Типы данных".
Номер задачи, с которой происходит обмен данными. Все задачи внутри созданной MPI группы автоматически нумеруются от 0 до (размер группы-1). В примере задача 0 передает задаче 1, задача 1 принимает от задачи 0.
Идентификатор сообщения. Это целое число от 0 до 32767, которое пользователь выбирает сам. Оно служит той же цели, что и, например, расширение файла - задача-приемник:
по идентификатору определяет смысл принятой информации ;
сообщения, пришедшие в неизвестном порядке, может извлекать из общего входного потока в нужном алгоритму порядке. Хорошим тоном является обозначение идентификаторов символьными именами посредством операторов "#define" или "const int".
Описатель области связи (коммуникатор). Обязан быть одинаковым для MPI_Send и MPI_Recv.
Статус завершения приема. Содержит информацию о принятом сообщении: его идентификатор, номер задачи-передатчика, код завершения и количество фактически пришедших данных.
