Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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 может состоять в следующем (для параллельной программы из четырех процессов):
|