МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ
ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П. О. СУХОГО
Факультет автоматизированных и информационных систем
Кафедра «Информационные технологии»
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ № 6
по дисциплине «Программирование сетевых приложений»
на тему: Реализация распределенной обработки информации средствами MPI.
Выполнил: студент гр. ИТ-32
Принял: преподаватель
Дата сдачи отчета: _____________________
Дата допуска к защите: _____________________
Дата защиты: _____________________
Гомель 2014
Цель: разработать ПО, реализующее передачу данных между компьютерами с помощью средств MPI.
Задание
Организовать распределённую обработку информации не менее, чем на 3 компьютерах. Сравнить время выполнения на 3 компьютерах со временем выполнения операции на одном компьютере.
Листинг программы:
#include "stdafx.h"
#include "mpi.h"
#include "math.h"
#include "stdlib.h"
#include "string.h"
int main(int argc, char* argv[])
{
int rank, size;
MPI_Init(&argc, &argv);// инициализация MPI
MPI_Comm_rank(MPI_COMM_WORLD, &rank); // возвращает ранг вызываемого процесса в точно определенном коммуникаторе
MPI_Comm_size(MPI_COMM_WORLD, &size);
double a=1,b=2,e=0.001;
double h,n=1;
double result=0,last_res;
MPI_Status status;//статус завершения приема
int end_flag=0, process=0;
double temp_pogr=1;
double tn,tk;
if(rank==0)
{
tn=MPI_Wtime();//получаем текущее время
while(end_flag==0)
{
if(temp_pogr > e)
{
last_res=result;
process++;
if(process==size) process=1;
MPI_Send(&n,1,MPI_DOUBLE,process,0,MPI_COMM_WORLD);//передача сообщения
MPI_Recv(&result,1,MPI_DOUBLE,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&status);//получаем сообщение
temp_pogr = fabs(fabs(result)- fabs(last_res));
last_res=result;
n=2*n;
}
else
{
double p=0;
for(int i=1;i<size;i++)
MPI_Send(&p,1,MPI_DOUBLE,i,0,MPI_COMM_WORLD);
end_flag=1;
tk=MPI_Wtime();
printf("Integral e^x*sin(x) ot %f do %f \ns tochnostiu %f : %f\n",a,b,e,result);
printf("Vremia vipolneniya : %f\n",tk-tn);
}
}
}
else
{
while(end_flag==0)
{
MPI_Recv(&n,1,MPI_DOUBLE,0,0,MPI_COMM_WORLD,&status);
if(n==0)
end_flag=1;
else
{
h=(b-a)/n;
double ff;
result=0;
for(int i=0;i<=n;i++)
{
ff=(exp(a+i*h)*sin(a+i*h)+exp(a+(i+1)*h)*sin(a+(i+1)*h))/2*h;
result=result+ff;
}
MPI_Send(&result,1,MPI_DOUBLE,0,1,MPI_COMM_WORLD);
}
}
}
MPI_Finalize();
return 0;
}
Результаты работы:
Сравнительный анализ:
Вывод: в данной лабораторной работе для организации информационного взаимодействия между компьютерами используются средства MPI: операции приёма и передачи данных. В рамках MPI для решения поставленной задачи разрабатывается только одна программа, которая запускается одновременно на выполнение на всех имеющихся процессорах.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.