Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_ekzamen_Chernysheva.docx
Скачиваний:
8
Добавлен:
01.05.2025
Размер:
648.58 Кб
Скачать
  1. Константы. Типы. Сообщения, атрибуты сообщения. Структура mpi_Status.

Константы MPI

    • MPI_SUCCESS - константа, в которую записывается результат работы функции, если равно 0, то функция удачно завершила работу, иначе функция возвращает ошибку.

    • MPI_COMM_WORLD - идентификатор коммуникатора всеобъемлющей группы, которая стартует при запуске MPI-программы

    • MPI_ANY_SOURCE - идентификатор любого процесса отправителя

    • MPI_ANY_TAG - идентификатор сообщения с любым идентификатором, с любым тегом

    • MPI_Datatype - системный тип для обозначения типа переменных в терминологии MPI

    • MPI_Comm - системный тип для описания коммуникаторов

    • MPI_BSEND_OVERHEAD - константа для буфера, используемого функцией MPI_Bsend (#define MPI_BSEND_OVERHEAD 512)

    • MPI_Op - системный тип для описания глобальных операций

Обозначение глобальной операции

Описание глобальной операции

MPI_MAX

Нахождение максимального значения

MPI_MIN

Минимальное значение

MPI_SUM

Сумма

MPI_PROD

Произведение

MPI_LAND

Логическое И (конъюнкция)

MPI_BAND

Побитовая конъюнкция

MPI_LOR

Логическое ИЛИ (дизъюнкция)

MPI_BOR

Побитовая дизъюнкция

MPI_LXOR

Лог. XOR

MPI_BXOR

Побит. XOR

Тип С/С++

Тип MPI_Datatype

char

MPI_CHAR

int

MPI_INT

float

MPI_FLOAT

double

MPI_DOUBLE

long double

MPI_LONG_DOUBLE



C труктура MPI_Status. Сообщение MPI

Сообщение - набор данных определенного типа.

Сообщение имеет атрибуты, важные из этих атрибутов: идентификатор сообщения или тег

сообщения: msgtag

Тег сообщения у перенимающего или переедающего сообщения должен совпадать

В структуре MPI_Status прописаны атрибуты принятого сообщения. Она имеет вид:

typedef struct { int count;//количество байт в принятом сообщении

int MPI_SOURCE;//идентификатор процесса отправителя

int MPI_TAG;//идентификатор сообщения

int MPI_ERROR;//код ошибки } MPI_Status;

Пусть в программе описана структура MPI_Status, которую назовем status. Для обращения к

полям структуры будем:

1) для определения идентификатора процесса отправителя status.MPI_SOURCE

2) для определения тэга сообщения status.MPI_TAG

3) для определения кода ошибки status.MPI_ERROR

4) поле count является private, поэтому для определения числа элементов в принятом сообщении пользуются функцией: int MPI_Bit_count(MPI_Status *status, MPI_Datatype type, int *count)

MPI_Status *status - адрес структуры типа MPI_Status

MPI_Datatype type - тип элементов в принятом сообщении в терминологии MPI

int *count - адрес переменной целого типа, куда будет записано количество элементов в принятом сообщении.

  1. Основные функции mpi: mpi_Init(), mpi_Finalize(), mpi_Wtime().

Функция инициализации параллельной секции

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

При запуске функции инициализируется параллельная секция. Всем процессам параллельного приложения передаются параметры main(), в которых указывается общее число процессов в приложении. Функция возвращает код ошибки или 0 в случае успешного завершения.

Функция деинициализации параллельной секции

int MPI_Finalize();

Процесс, обратившийся к этой функции должен завершить работу с другими параллельными функциями. После выполнения данной функции нельзя обращаться к параллельным функциям и к MPI_Init тоже (для кластера ИГЭУ!). Функция возвращает код ошибки или 0 в случае успешного завершения.

Функция определения времени

double MPI_Wtime();

Функция возвращает время в секундах, прошедшее с некоторого момента в прошлом.

Для определения времени вычислений выполним:

double tn, tk, delfaf;

tn=MPI_Wtime();

//вычислительный блок

tk=MPI_Wtime();

delfaf=tk-tn;

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