Студопедия
МОТОСАФАРИ и МОТОТУРЫ АФРИКА !!!


Авиадвигателестроения Административное право Административное право Беларусии Алгебра Архитектура Безопасность жизнедеятельности Введение в профессию «психолог» Введение в экономику культуры Высшая математика Геология Геоморфология Гидрология и гидрометрии Гидросистемы и гидромашины История Украины Культурология Культурология Логика Маркетинг Машиностроение Медицинская психология Менеджмент Металлы и сварка Методы и средства измерений электрических величин Мировая экономика Начертательная геометрия Основы экономической теории Охрана труда Пожарная тактика Процессы и структуры мышления Профессиональная психология Психология Психология менеджмента Современные фундаментальные и прикладные исследования в приборостроении Социальная психология Социально-философская проблематика Социология Статистика Теоретические основы информатики Теория автоматического регулирования Теория вероятности Транспортное право Туроператор Уголовное право Уголовный процесс Управление современным производством Физика Физические явления Философия Холодильные установки Экология Экономика История экономики Основы экономики Экономика предприятия Экономическая история Экономическая теория Экономический анализ Развитие экономики ЕС Чрезвычайные ситуации ВКонтакте Одноклассники Мой Мир Фейсбук LiveJournal Instagram

Код 3.4.5.1.1




#include <math.h>

#include <stdio.h>

#include <stdlib.h>

#include "mpi.h"

int main(int argc, char* argv[]){

double x[100], y[100,100], z[100] … ;

int ProcRank, BlockSize, ProcNum, N=100;

MPI_StatusStatus;

// Инициализация среды выполнения

MPI_Init(&argc,&argv);

MPI_Comm_size(MPI_COMM_WORLD,&ProcNum);

MPI_Comm_rank(MPI_COMM_WORLD,&ProcRank);

// Master-process is preparing the data

if ( ProcRank == 0 ) DataInitialization(x,y,z,N);

//Here is some code sending parts of matrix

// Send vector x[N] to all the processes within

// the MPI_COMM_WORLD communicator USING One-to-all broadcast

MPI_Bcast(x, N, MPI_DOUBLE, 0, MPI_COMM_WORLD);

// DATA PROCESSING

// Each process is working on its portion of data

// Gathering the results on the master process

if ( ProcRank == 0 ) {

//Master-process add calculated result to the end-result vector

AddResult(VectorPart,0);

for ( int i=1; i < ProcNum; i++ ) {

MPI_Recv(&VectorPart, BlockSize, MPI_DOUBLE, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD,

&Status);

AddResult(VectorPart, i*BlockSize);

}

}

else // все процессы отсылают свои частичные суммы

MPI_Send(&VectorPart, 100, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);

// вывод результата

if ( ProcRank == 0 )

SaveResult();

MPI_Finalize();

}

В приведенной программе функция DataInitialization осуществляет подготовку начальных данных.

Далее выполняется рассылка соответствующих порций по процессорам в зависимости от их идентификатора (ранга).

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





Дата добавления: 2015-05-10; просмотров: 309; Опубликованный материал нарушает авторские права? | Защита персональных данных | ЗАКАЗАТЬ РАБОТУ


Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Для студента самое главное не сдать экзамен, а вовремя вспомнить про него. 10064 - | 7510 - или читать все...

Читайте также:

 

35.173.234.140 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.


Генерация страницы за: 0.002 сек.