
- •Модели программирования систем класса mimd. Стандарт mpi. Операции поддерживаемые и неподдерживаемые в mpi. Содержимое реализации стандарта mpi. Структура mpi-программы.
- •Стандарт mpi. Идентификация в mpi. Цели разработчиков mpi. Классификация функций mpi. Структура mpi-программы. Пример программы.
- •Двухточечные передачи в mpi. Организация отложенных посылок/приемов сообщений. Функции (основные и вспомогательные), используемые при отложенных посылках и приемах сообщений. Примеры.
- •Типы данных в mpi-программе. Структурированные данные, виды и способы их передачи. Передача структурированных данных с сосредоточенными и распределенными элементами. Примеры.
- •Коллективные передачи данных в mpi. Виды коллективных операций. Барьерная синхронизация, распределение и сбор данных. Примеры.
- •Коллективные передачи данных в mpi. Виды коллективных операций. Рассылка данных и их редукция. Примеры.
- •1. Классификация Флина.
- •2. Классификация Хокни
- •3. Классификация по доступу к памяти
- •По степени интеграции ядер и устройств
- •2. По однородности ядер
- •3. По связям между ядрами
- •По степени интеграции ядер и устройств
- •2. По однородности ядер
- •3. По связям между ядрами
- •29. Сети и структуры сетей системы ibm Blue Gene/l. Конфигурация торовых колец. Монтаж на Midplane. Внешние сети и их подключение. Link Card и Service Card.
- •Объединённый модуль (Connected Unit)
- •Кластер Roadrunner
Двухточечные передачи в mpi. Организация отложенных посылок/приемов сообщений. Функции (основные и вспомогательные), используемые при отложенных посылках и приемах сообщений. Примеры.
Двухточечные передачи в MPI
Двухточечные передачи состоят из двух частей – посылки сообщения и прием.
Передачи могут выполняться в трех режимах:
- блокирующем;
- неблокирующем (процесс, вызвавший функцию передачи продолжает выполняться, а процедура приема-передачи идет в фоновом режиме);
- отложенном.
Отложенные двухточечные передачи данных в MPI.
Протокол работы процесса с отложенной передачей разделяется на три этапа:
1) Инициализация отложенной процедуры(посылки или приема)
В ходе этого этапа вызывается функция инициализации и осуществляется настройка среды для последующей посылки или приема.
2) Запуск отложенной процедуры.
3) Проверка или ожидание завершения процедуры.
Отложенные процедуры передачи являются не блокирующими.
Int MPI_Send_init(void *buf, int count MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm, MPI_Request *request);
Int MPI_Bsend_init(void *buf, int count MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm, MPI_Request *request);
Int MPI_Ssend_init(void *buf, int count MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm, MPI_Request *request);
Int MPI_Rsend_init(void *buf, int count MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm, MPI_Request *request);
Int MPI_Recv_init(void *buf, int count MPI_Datatype datatype, int source, int msgtag, MPI_Comm comm, MPI_Request *request);
Функции запуска отложенной процедуры, идентифицируемой параметром request
Int MPI_Start(MPI_Request *request);
Int MPI_Startall(int count, MPI_Request *request);
В параметр count записывается размер массива request.
Типы данных в mpi-программе. Структурированные данные, виды и способы их передачи. Передача структурированных данных с сосредоточенными и распределенными элементами. Примеры.
Типа данных
Типы данных в MPI программе можно разделить на:
Типы данных языка программирования
Собственные типы данных MPI
MPI_Status; MPI_Comm; MPI_Group; MPI_Op; MPI_Request; MPI_Aint; MPI_Datatype
Переопределяемые MPI типы данных
signed char
MPI_CHAR
signed int
MPI_INT
unsigned char
MPI_UNSIGNED_CHAR
float
MPI_FLOAT
double
MPI_DOUBLE
longint
MPI_LONG
Типы данных определяемые пользователем
MPI_Type_vector; MPI_Type_struct
Структурированные данные бывают:
1. Однородные сосредоточенные.
2. Разнородные сосредоточенные
3. Однородные распределенные
4. Разнородные распределенные
- в рамках памяти одного процесса.
Распределенные данные – разбросаны по памяти процессов.
Разнородные данные – разные типы длинны блоков в структуре.
Пример разнородных типов данных:
Struct
{
int x;
float y;
} s;
MPI_Send ( s, sizeof ( s ), MPI_CHAR,…);
Для посылки распределенных данных можно:
1. Создать промежуточный буфер.
2. Произвести упаковку данных с помощью MPI_pack, а при приеме – распаковку MPI_unpack.
3. Создать новый распределенный тип данных с помощью функции
int MPI_Type_vector ( int count,int blocklen, int stride, MPI_Datatype old_type, MPI_Datatype* newtype ) – где count – число блоков, blocklen – число исходных элементов в блоке, stride – расстояние между блоками в исходных элементах, oldtype – тип исходных элементов, newtype – нового типа.
int MPI_Type_commit ( MPI_Datatype *newtype ) – регистрация нового типа в среде MPI.
int MPI_Type_struct( int count, int blocklens[], MPI_Aint displacements[], MPI_Datatype old_types[], MPI_Datatype* newtype ) – функция позволяет создавать структуры данных любого типа. Count – количество блоков, распределенных в памяти, bloklens – массив длин блоков данных, displacements – массив смещений блоков данных относительно базового адреса, oldtypes – массив исходных типов данных, newtype – переменная нового типа.
int MPI_Address ( void* location, MPI_Aint* address) – перевод из системного адреса в адрес MPI. location – системный адрес, address – адрес в формате MPI.