![]() Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
![]() Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
![]() |
MPI_Bcast (mas, 10, MPI_INT, 0, MPI_COMM_WORLD);
// Распечатываем полученный от процесса 0 массив: for (i=0; i<10; i++) cout << proc_rank << '_' << mas[i] << " "; cout << '\n'; } //========================================================== MPI_Finalize(); // закрываем MPI-библиотеку return 0; } В данной программе с помощью блоков if выделены области кода, выполняемые определенными процессами. В частности, первый оператор if содержит блок кода для процесса с рангом 0, второй оператор if содержит блок кода для всех процессов с ненулевым рангом. Процесс с рангом 0, запустившись, инициализирует массив mas числами от 1 до 10. При этом остальные процессы начальной инициализации не делают. Рано или поздно все процессы дойдут до вызова функции MPI_Bcast. В процессе ее выполнения содержимое массива mas нулевого процесса будет скопировано в массив mas всех остальных процессов. В заключение каждый из процессов распечатает на экране содержимое своего массива. Для наглядности перед значением каждого элемента через символ «_» печатается ранг соответствующего процесса. Например, для восьми процессов результат работы программы может быть следующим:
5_1 5_2 5_3 5_4 5_5 5_6 5_7 5_8 5_9 5_10 2_1 2_2 2_3 2_4 2_5 2_6 2_7 2_8 2_9 2_10 6_1 6_2 6_3 6_4 6_5 6_6 6_7 6_8 6_9 6_10 0_1 0_2 0_3 0_4 0_5 0_6 0_7 0_8 0_9 0_10 4_1 4_2 4_3 4_4 4_5 4_6 4_7 4_8 4_9 4_10 7_1 7_2 7_3 7_4 7_5 7_6 7_7 7_8 7_9 7_10 3_1 3_2 3_3 3_4 3_5 3_6 3_7 3_8 3_9 3_10 1_1 1_2 1_3 1_4 1_5 1_6 1_7 1_8 1_9 1_10
Рассмотренный пример программы можно записать более кратко, если учесть, что: – вызов функции MPI_Bcast синтаксически не отличается для процессов разных рангов; – все процессы после вызова MPI_Bcast делают в точности одно и то же: распечатывают массив mas. Тогда программа принимает следующий вид:
#include "stdafx.h" #include <mpi.h> #include <iostream> Using namespace std; int main(int argc, char* argv[]) { Int proc_rank, proc_count; int mas[10]; Int i; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &proc_count); MPI_Comm_rank(MPI_COMM_WORLD, &proc_rank); //========================================================== if (proc_rank==0) // Если это "главный" процесс { for (i=0; i<10; i++) mas[i]=i+1; } //========================================================== // Дальнейший код выполняется всеми процессами // (в том числе и главным): Date: 2016-02-19; view: 320; Нарушение авторских прав |