Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Return 0;. Как следует из текста программы, каждый процесс определяет свой ранг, после чего действия в программе разделяются





} // main()

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

В функции MPI_Send каждый процесс с ненулевым рангом отсылает данные, расположенные начиная с адреса переменной ProcRank. Размер отправляемого сообщения равен одному значению типа MPI_INT. Таким образом, в передаваемом сообщении фактически отсылается значение переменной ProcRank. Для каждого из отсылающих процессов это значение будет различным и равным рангу процесса.

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

Функция MPI_Recv предполагает, что в любом принятом сообщении будет содержаться ровно один элемент данных типа MPI_INT. Идентичность структуры отправляемого и принимаемого сообщений обязательно должна быть согласована при написании функций MPI_Send и MPI_Recv. Недопустимо, чтобы размер передаваемого сообщения отличался (например, был больше) от размера принимаемого сообщения. Функция MPI_Recv не знает о размере передаваемого сообщения и способна принять только то количество данных, которое указано в ее параметрах.

В нашем примере принимаемое сообщение (один элемент типа MPI_INT) кладется функцией MPI_Recv в переменную RecvRank, после чего распечатывается на экране функцией printf. Следует понимать, что каждый процесс выполняет один и тот же программный код и обладает собственной переменной RecvRank, однако практически использует эту переменную только процесс с рангом ноль. Остальными процессами данная переменная не используется и лишь занимает оперативную память.

Важно отметить, что порядок приема сообщений заранее не определен и зависит от условий выполнения параллельной программы (более того, этот порядок может изменяться от запуска к запуску). Так, возможный вариант результатов печати процесса 0 может состоять в следующем (для параллельной программы из четырех процессов):

Date: 2016-02-19; view: 319; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию