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


Полезное:

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

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