Типы данных mpi типы данных c

MPI_CHAR signed char

MPI_SHORT signed short int

MPI_INT signed int

MPI_LONG signed long int

MPI_UNSIGNED_CHAR unsigned char

MPI_UNSIGNED_SHORT unsigned short int

MPI_UNSIGNED unsigned int

MPI_UNSIGNED_LONG unsigned long int

MPI_FLOAT float

MPI_DOUBLE double

MPI_LONG_DOUBLE long double

MPI_BYTE

MPI_PACKED

Производные типы данных

Могут быть также определены дополнительные типы данных, названные производными типами данных. Вы можете определить тип данных для несмежных данных или для последовательности смешанных основных типов данных. Это может сделать программирование легче и часто обеспечивает более быстрое выполнение кода. Производные типы данных находятся вне сферы этого введения, но охвачены в модуле Производные типы данных.

Некоторые производные типы данных:

Contiguous

Vector

Hvector

Indexed

Hindexed

Struct

Оболочка (конверт)

Напомним, что сообщение состоит из данных и оболочки (конверта) сообщения. Оболочка дает информацию о том как связаны отправления с получениями. Три параметра используются для определения оболочки (конверта) сообщения:

Назначение или источник

Этот аргумент устанавливается к рангу в комммуникаторе (см ниже). Ранг меняется от 0 до (size-1), где size - это число процессов в коммуникаторе. Назначение определяется отправкой и используется, чтобы определить маршрут сообщения к соответствующему процессу. Источник определяется получением. Только сообщения идущие от этого источника могут быть приняты при вызове получения, но получение может установить источник в MPI_ANY_SOURCE, чтобы указать, что любой источник приемлем.

Тег

Тег (ярлык, метка) -- произвольное число, которое помогает различать сообщения. Теги, опреляемые отправителем и получателем, должны совпадать, но получатель может определить его как MPI_ANY_TAG, чтобы показать, что любой тег приемлем.

Коммуникатор

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

Аналогия

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

Лицо, получающее иск (более определенно, его идентификационный номер ИН). Это - назначение.

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

На какую потребность выпускается иск. Лицу надо знать иск ли это за электоичество или за телефон. Это - коммуникатор.

Коммуникаторы

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

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

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

Блоки представляют части параллельных процессов. Время растет сверху вниз на каждой диаграмме. Цифры в круглых скобках НЕ параметры, а номера процессов. Например, send(1) означает отправку сообщения процессу 1. Recv(any) означает получение сообщения от любого процесора. Пользовательский (вызывающий) код находится в белом (незатененном) блоке. Затененный блок (вызываемый) представляет собой пакет (параллельной) библиотеки, вызванной пользователем. Наконец, стрелки представляют собой перемещение сообщения от отправителя получателю.

типы данных mpi типы данных c - student2.ru

Диаграмма показывает то, что бы произошло, если бы случилось то, что мы хотели. В этом случае все работает, как намечено.

Запуск MPI программ

Компиляция

Компиляция и перенос приложений обсуждает различные способы исполнения выполнения на суперкомпьютере. Для создания параллельной исполняемой программы вам следует включить директорию, содержащую MPI и библиотеки MPI, когда вы активизируете компилятор. Это подразумевает что компилятор и MPICH установлены на машине, где вы компилируете исполняющую программу.

MS Visual C/C++:

Добавьте MPICH.lib .......

Из командной строки:

MS Visual C/C++:

mpicc prog.c (после активизации setup_visualc)

Наши рекомендации