Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VVS_ex_fin.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
8.24 Mб
Скачать
  1. Двухточечные передачи в 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.

  1. Типы данных в mpi-программе. Структурированные данные, виды и способы их передачи. Передача структурированных данных с сосредоточенными и распределенными элементами. Примеры.

Типа данных

Типы данных в MPI программе можно разделить на:

  1. Типы данных языка программирования

  2. Собственные типы данных MPI

MPI_Status; MPI_Comm; MPI_Group; MPI_Op; MPI_Request; MPI_Aint; MPI_Datatype

  1. Переопределяемые MPI типы данных

    signed char

    MPI_CHAR

    signed int

    MPI_INT

    unsigned char

    MPI_UNSIGNED_CHAR

    float

    MPI_FLOAT

    double

    MPI_DOUBLE

    longint

    MPI_LONG

  2. Типы данных определяемые пользователем

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.

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