Код 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-02-03; просмотров: 850;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.