close

Вход

Забыли?

вход по аккаунту

?

lab2 tpv2 аааа (2)

код для вставкиСкачать
Министерство образования и науки Украины
Севастопольский национальный технический университет
Кафедра
Информационных систем
Лабораторная работа № 2
Исследование метода распараллеливания линейных последовательных программ с использованием понятий модели вычислительного процесса
ВыполнениеОценка
Выполнил:
ст. гр. И-41д
Лынок А.Ю.
Проверил:
Кротов К. В. Севастополь 2013
2 вариант.
Вычислить полином Y=a00+a11+...+a55, где
Ai - коэффициент разложения (определяются как вводимые переменные),
i - параболы i-го порядка.
0 =1; i =x-(n+1)/2; k+1 = 1 k -k-1k2(n2-k2)/(4(4k2-1))
n - число точек, в которых задано значение функции Y (n=5)
Используем программу Maple для составления результирующего полинома. Раскрывая скобки и приводя подобные слагаемые, получаем:
Последовательную программу можно представить в виде следующих операций:
Структурная схема последовательной программы представлена на рис. 1.
Рисунок 1 - Структурная схема последовательной программы
Представим последовательную программу в форме (1) (таблица 1).
aj =j, j,in a j, out a j, W j, in a j, W j (1)
Для этого введём обозначения типов операции:
0 - унарная операция присваивания и переименования переменных
1 - унарная операция умножения (возведение в степень или умножение на коэффициент)
2 - бинарная операция умножения
3 - операция сложения
Таблица 1 - Представление программы в виде формы (1)
№ТипОперандыРезультатWj|in aj||Wj|10T1321120T212, 131230T314, 15, 161340T417, 18, 19, 201450T521, 22, 23, 24, 251560T626, 27, 28, 29, 30, 311670xT712, 15, 19, 24, 301581T814, 18, 23, 291491T917, 22, 2813101T1021, 2712111T112611122T2, T7T123221131T2T133211142T3, T8T143221152T3, T7T153221161T3T163211172T4, T9T173221182T4, T8T183221192T4, T7T193221201T4T203211212T5, T10T213221222T5, T9T223221232T5, T8T233221242T5, T7T243221Таблица 1 - Продолжение
№ТипОперандыРезультатWj|in aj||Wj|251T5T253211262T6, T11T263221272T6, T10T273221282T6, T9T283221292T6, T8T293221302T6, T7T303221311T6T313211323ZT32 = Y-210
Z = {T1, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31}.
Найдём множество из условия aj | in ajin P. При этом, in P = {, , , ,, , x}. Т.е. это множество включает в себя данные, являющиеся входными для программы.
Тогда:
{, , , ,, , x}.
Тогда на ярусе 0 будут присутствовать операции {1..11}, и они подготовят данные для следующих операций:
W1 = {32};W4 = {17, 18, 19, 20};W7 = {12, 15, 19, 24, 30};
W2 = {12, 13};W5 = {21, 22, 23, 24, 25};W8 = {14, 18, 23, 29};
W3 = {14, 15, 16};W6 = {26, 27, 28, 29, 30, 31};W9 = {17, 22, 28};
W10 = {21, 27}; W11 = {26};
Тогда множество формируется по условию: .
Т.е. в него будут включены те операции, входные данные для которых являются выходными данными (результатами вычисления) операций нулевого яруса (см. таблицу 1). Таким образом, получим:
= {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}.
Выпишем из таблицы 1 множества Wj, согласно множеству .
W12 ={32};W18 ={32};W24 ={32};W30 ={32};
W13 ={32};W19 ={32};W25 ={32};W31 ={32};
W14 ={32};W20 ={32}; W26 ={32};
W15 ={32};W21 ={32};W27 ={32};
W16 ={32};W22 ={32};W28 ={32};
W17 ={32};W23 ={32};W29 ={32};
Таким образом, во множество будет входить только операция 32: = {32}.
Проведённые вычисления позволяют построить двумерную модель вычислительного процесса (таблица 2). Таблица 2 - Двумерная модель вычислительного процесса
toAt*At+AtPAtAt012-321-111-111-11-13212, 13, 14, 15,
16, 17, 18, 19,
20, 21, 22, 23,
24, 25, 26, 27,
28, 29, 30, 3112, 13, 14, 15,
16, 17, 18, 19,
20, 21, 22, 23,
24, 25, 26, 27,
28, 29, 30, 3112, 13, 14, 15,
16, 17, 18, 19,
20, 21, 22, 23,
24, 25, 26, 27,
28, 29, 30, 311-112-32323212, 13, 14, 15,
16, 17, 18, 19,
20, 21, 22, 23,
24, 25, 26, 27,
28, 29, 30, 313----32
На рисунке 2 показано графическое представление ЯПФ.
Рисунок 2 - Графическое представление ЯПФ
ТЕКСТ ПРОГРАММЫ:
#include "stdafx.h"
#include <iostream>
#include "mpi.h"
#include <iomanip>
using namespace std;
MPI_Status status;
void S0()
{ float a0,a1,a2,a3,a4,a5,x;
a0=1; a1=2; a2=3; a3=4;
a4=5; a5=6; x=7;
cout<<"a0= ";
cin>>a0;
cout<<endl<<"a1= ";
cin>>a1;
cout<<endl<<"a2= ";
cin>>a2;
cout<<endl<<"a3= ";
cin>>a3;
cout<<endl<<"a4= ";
cin>>a4;
cout<<endl<<"a5= ";
cin>>a5;
cout<<endl<<"x= ";
cin>>x;
MPI_Request req1, req2, req3, req4, req5, req6, req7, req8, req9, req10, req11;
int f1=0, f2=0,f3=0,f4=0,f5=0,f6=0,f7=0,f8=0,f9=0,f10=0,f11=0;
MPI_Isend(&a0,1,MPI_FLOAT,1,1,MPI_COMM_WORLD, &req1);
MPI_Isend(&a1,1,MPI_FLOAT,2,2,MPI_COMM_WORLD, &req2);
MPI_Isend(&a2,1,MPI_FLOAT,3,3,MPI_COMM_WORLD, &req3);
MPI_Isend(&a3,1,MPI_FLOAT,4,4,MPI_COMM_WORLD, &req4);
MPI_Isend(&a4,1,MPI_FLOAT,5,5,MPI_COMM_WORLD, &req5);
MPI_Isend(&a5,1,MPI_FLOAT,6,6,MPI_COMM_WORLD, &req6);
MPI_Isend(&x, 1,MPI_FLOAT,7,7,MPI_COMM_WORLD, &req7);
MPI_Isend(&x, 1,MPI_FLOAT,8,8,MPI_COMM_WORLD, &req8);
MPI_Isend(&x, 1,MPI_FLOAT,9,9,MPI_COMM_WORLD, &req9);
MPI_Isend(&x, 1,MPI_FLOAT,10,10,MPI_COMM_WORLD, &req10);
MPI_Isend(&x, 1,MPI_FLOAT,11,11,MPI_COMM_WORLD, &req11);
while(!f1||!f2||!f3||!f4||!f5||!f6||!f7||!f8||!f9||!f10||
!f11)
{
MPI_Test(&req1,&f1,&status);
MPI_Test(&req2,&f2,&status);
MPI_Test(&req3,&f3,&status);
MPI_Test(&req4,&f4,&status);
MPI_Test(&req5,&f5,&status);
MPI_Test(&req6,&f6,&status);
MPI_Test(&req7,&f7,&status);
MPI_Test(&req8,&f8,&status);
MPI_Test(&req9,&f9,&status);
MPI_Test(&req10,&f10,&status);
MPI_Test(&req11,&f11,&status);
}
cout<<"S0 : all data were sent"<<endl;
float t1,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30,t31;
MPI_Recv(&t1, 1,MPI_FLOAT,1, 1, MPI_COMM_WORLD, &status);
MPI_Recv(&t12,1,MPI_FLOAT,12,12,MPI_COMM_WORLD, &status);
MPI_Recv(&t13,1,MPI_FLOAT,13,13,MPI_COMM_WORLD, &status);
MPI_Recv(&t14,1,MPI_FLOAT,14,14,MPI_COMM_WORLD, &status);
MPI_Recv(&t15,1,MPI_FLOAT,15,15,MPI_COMM_WORLD, &status);
MPI_Recv(&t16,1,MPI_FLOAT,16,16,MPI_COMM_WORLD, &status);
MPI_Recv(&t17,1,MPI_FLOAT,17,17,MPI_COMM_WORLD, &status);
MPI_Recv(&t18,1,MPI_FLOAT,18,18,MPI_COMM_WORLD, &status);
MPI_Recv(&t19,1,MPI_FLOAT,19,19,MPI_COMM_WORLD, &status);
MPI_Recv(&t20,1,MPI_FLOAT,20,20,MPI_COMM_WORLD, &status);
MPI_Recv(&t21,1,MPI_FLOAT,21,21,MPI_COMM_WORLD, &status);
MPI_Recv(&t22,1,MPI_FLOAT,22,22,MPI_COMM_WORLD, &status);
MPI_Recv(&t23,1,MPI_FLOAT,23,23,MPI_COMM_WORLD, &status);
MPI_Recv(&t24,1,MPI_FLOAT,24,24,MPI_COMM_WORLD, &status);
MPI_Recv(&t25,1,MPI_FLOAT,25,25,MPI_COMM_WORLD, &status);
MPI_Recv(&t26,1,MPI_FLOAT,26,26,MPI_COMM_WORLD, &status);
MPI_Recv(&t27,1,MPI_FLOAT,27,27,MPI_COMM_WORLD, &status);
MPI_Recv(&t28,1,MPI_FLOAT,28,28,MPI_COMM_WORLD, &status);
MPI_Recv(&t29,1,MPI_FLOAT,29,29,MPI_COMM_WORLD, &status);
MPI_Recv(&t30,1,MPI_FLOAT,30,30,MPI_COMM_WORLD, &status);
MPI_Recv(&t31,1,MPI_FLOAT,31,31,MPI_COMM_WORLD, &status);
float lastRes=t1+t12+t13+t14+t15+t16+t17+t18+t19+t20+t21
+t22+t23+t24+t25+t26+t27+t28+t29+t30+t31;
cout<<"S0: RESULtaaat: "<<lastRes<<endl;
getchar();
}
void S1()
{
float a0;
MPI_Request req1;
MPI_Irecv(&a0,1,MPI_FLOAT,0,1,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
cout<<"S1: received a0= "<<a0<<endl;
MPI_Send(&a0,1,MPI_FLOAT,0,1,MPI_COMM_WORLD);
}
void S2()
{
float a1;
MPI_Request req2,req3;
MPI_Irecv(&a1,1,MPI_FLOAT,0,2,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
cout<<"S2: received a1= "<<a1<<endl;
MPI_Isend(&a1,1,MPI_FLOAT,12,12,MPI_COMM_WORLD,&req2);
MPI_Isend(&a1,1,MPI_FLOAT,13,13,MPI_COMM_WORLD,&req3);
MPI_Wait(&req2,&status);
MPI_Wait(&req3,&status);
}
void S3()
{
float a2;
MPI_Request req3,req4, req5;
MPI_Irecv(&a2,1,MPI_FLOAT,0,3,MPI_COMM_WORLD,&req3);
MPI_Wait(&req3,&status);
cout<<"S3: received a2= "<<a2<<endl;
MPI_Isend(&a2,1,MPI_FLOAT,14,14,MPI_COMM_WORLD,&req3);
MPI_Isend(&a2,1,MPI_FLOAT,15,15,MPI_COMM_WORLD,&req4);
MPI_Isend(&a2,1,MPI_FLOAT,16,16,MPI_COMM_WORLD,&req5);
MPI_Wait(&req3,&status);
MPI_Wait(&req4,&status);
MPI_Wait(&req5,&status);
}
void S4()
{
float a3;
MPI_Request req4,req5, req6,req7;
MPI_Irecv(&a3,1,MPI_FLOAT,0,4,MPI_COMM_WORLD,&req4);
MPI_Wait(&req4,&status);
cout<<"S4: received a3= "<<a3<<endl;
MPI_Isend(&a3,1,MPI_FLOAT,17,17,MPI_COMM_WORLD,&req4);
MPI_Isend(&a3,1,MPI_FLOAT,18,18,MPI_COMM_WORLD,&req5);
MPI_Isend(&a3,1,MPI_FLOAT,19,19,MPI_COMM_WORLD,&req6);
MPI_Isend(&a3,1,MPI_FLOAT,20,20,MPI_COMM_WORLD,&req7);
MPI_Wait(&req4,&status);
MPI_Wait(&req5,&status);
MPI_Wait(&req6,&status);
MPI_Wait(&req7,&status);
}
void S5()
{
float a4;
MPI_Request req5,req6, req7,req8,req9;
MPI_Irecv(&a4,1,MPI_FLOAT,0,5,MPI_COMM_WORLD,&req5);
MPI_Wait(&req5,&status);
cout<<"S5: received a4= "<<a4<<endl;
MPI_Isend(&a4,1,MPI_FLOAT,21,21,MPI_COMM_WORLD,&req5);
MPI_Isend(&a4,1,MPI_FLOAT,22,22,MPI_COMM_WORLD,&req6);
MPI_Isend(&a4,1,MPI_FLOAT,23,23,MPI_COMM_WORLD,&req7);
MPI_Isend(&a4,1,MPI_FLOAT,24,24,MPI_COMM_WORLD,&req8);
MPI_Isend(&a4,1,MPI_FLOAT,25,25,MPI_COMM_WORLD,&req9);
MPI_Wait(&req5,&status);
MPI_Wait(&req6,&status);
MPI_Wait(&req7,&status);
MPI_Wait(&req8,&status);
MPI_Wait(&req9,&status);
}
void S6()
{
float a5;
MPI_Request req6,req7, req8,req11,req12,req2,req1;
MPI_Irecv(&a5,1,MPI_FLOAT,0,6,MPI_COMM_WORLD,&req6);
MPI_Wait(&req6,&status);
cout<<"S6: received a5= "<<a5<<endl;
MPI_Isend(&a5,1,MPI_FLOAT,26,26,MPI_COMM_WORLD,&req7);
MPI_Isend(&a5,1,MPI_FLOAT,27,27,MPI_COMM_WORLD,&req8);
MPI_Isend(&a5,1,MPI_FLOAT,28,28,MPI_COMM_WORLD,&req11);
MPI_Isend(&a5,1,MPI_FLOAT,29,29,MPI_COMM_WORLD,&req12);
MPI_Isend(&a5,1,MPI_FLOAT,30,30,MPI_COMM_WORLD,&req1);
MPI_Isend(&a5,1,MPI_FLOAT,31,31,MPI_COMM_WORLD,&req2);
MPI_Wait(&req7,&status);
MPI_Wait(&req8,&status);
MPI_Wait(&req11,&status);
MPI_Wait(&req12,&status);
MPI_Wait(&req1,&status);
MPI_Wait(&req2,&status);
}
void S7()
{
float x;
MPI_Request req7, req8,req9,req10,req11;
MPI_Irecv(&x,1,MPI_FLOAT,0,7,MPI_COMM_WORLD,&req7);
MPI_Wait(&req7,&status);
cout<<"S7: received x= "<<x<<endl;
MPI_Isend(&x,1,MPI_FLOAT,12,12,MPI_COMM_WORLD,&req7);
MPI_Isend(&x,1,MPI_FLOAT,15,15,MPI_COMM_WORLD,&req8);
MPI_Isend(&x,1,MPI_FLOAT,19,19,MPI_COMM_WORLD,&req9);
MPI_Isend(&x,1,MPI_FLOAT,24,24,MPI_COMM_WORLD,&req10);
MPI_Isend(&x,1,MPI_FLOAT,30,30,MPI_COMM_WORLD,&req11);
MPI_Wait(&req7,&status);
MPI_Wait(&req8,&status);
MPI_Wait(&req9,&status);
MPI_Wait(&req10,&status);
MPI_Wait(&req11,&status);
}
void S8()
{
float x;
MPI_Request req12, req8,req9,req10;
MPI_Irecv(&x,1,MPI_FLOAT,0,8,MPI_COMM_WORLD,&req8);
MPI_Wait(&req8,&status);
cout<<"S8: received x= "<<x<<endl;
float res=x*x;
MPI_Isend(&res,1,MPI_FLOAT,14,14,MPI_COMM_WORLD,&req8);
MPI_Isend(&res,1,MPI_FLOAT,18,18,MPI_COMM_WORLD,&req9);
MPI_Isend(&res,1,MPI_FLOAT,23,23,MPI_COMM_WORLD,&req10);
MPI_Isend(&res,1,MPI_FLOAT,29,29,MPI_COMM_WORLD,&req12);
MPI_Wait(&req8,&status);
MPI_Wait(&req9,&status);
MPI_Wait(&req10,&status);
MPI_Wait(&req12,&status);
}
void S9()
{
float x;
MPI_Request req11,req9,req10;
MPI_Irecv(&x,1,MPI_FLOAT,0,9,MPI_COMM_WORLD,&req9);
MPI_Wait(&req9,&status);
cout<<"S9: received x= "<<x<<endl;
float res=x*x*x;
MPI_Isend(&res,1,MPI_FLOAT,17,17,MPI_COMM_WORLD,&req9);
MPI_Isend(&res,1,MPI_FLOAT,22,22,MPI_COMM_WORLD,&req10);
MPI_Isend(&res,1,MPI_FLOAT,28,28,MPI_COMM_WORLD,&req11);
MPI_Wait(&req9,&status);
MPI_Wait(&req10,&status);
MPI_Wait(&req11,&status);
}
void S10()
{
float x;
MPI_Request req10,req8;
MPI_Irecv(&x,1,MPI_FLOAT,0,10,MPI_COMM_WORLD,&req10);
MPI_Wait(&req10,&status);
cout<<"S10: received x= "<<x<<endl;
float res=x*x*x*x;
MPI_Isend(&res,1,MPI_FLOAT,21,21,MPI_COMM_WORLD,&req10);
MPI_Isend(&res,1,MPI_FLOAT,27,27,MPI_COMM_WORLD,&req8);
MPI_Wait(&req10,&status);
MPI_Wait(&req8,&status);
}
void S11()
{
float x;
MPI_Request req11,req7;
MPI_Irecv(&x,1,MPI_FLOAT,0,11,MPI_COMM_WORLD,&req11);
MPI_Wait(&req11,&status);
cout<<"S11: received x= "<<x<<endl;
float res=x*x*x*x*x;
MPI_Isend(&res,1,MPI_FLOAT,26,26,MPI_COMM_WORLD,&req7);
MPI_Wait(&req7,&status);
}
void S12()
{
float t2,t7;
MPI_Request req1,req2;
MPI_Irecv(&t2,1,MPI_FLOAT,2,12,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t7,1,MPI_FLOAT,7,12,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float res=t2*t7;
cout<<"S12: done"<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,12,MPI_COMM_WORLD);
}
void S13()
{
float t2;
MPI_Request req;
MPI_Irecv(&t2,1,MPI_FLOAT,2,13,MPI_COMM_WORLD,&req);
MPI_Wait(&req,&status);
float res=-3*t2;
cout<<"S13: done"<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,13,MPI_COMM_WORLD);
}
void S14()
{
float t3,t8;
MPI_Request req1,req2;
MPI_Irecv(&t3,1,MPI_FLOAT,3,14,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t8,1,MPI_FLOAT,8,14,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float res=t3*t8;
cout<<"S14: done"<<t3<<"*"<<t8<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,14,MPI_COMM_WORLD);
}
void S15()
{
float t3,t7;
MPI_Request req1,req2;
MPI_Irecv(&t3,1,MPI_FLOAT,3,15,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t7,1,MPI_FLOAT,7,15,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float res=-6*t3*t7;
cout<<"S15: done"<<"-6 * "<<t3<<"*"<<t7<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,15,MPI_COMM_WORLD);
}
void S16()
{
float t3;
MPI_Request req1;
MPI_Irecv(&t3,1,MPI_FLOAT,3,16,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
float res=7*t3;
cout<<"S16: done"<<"7 * "<<t3<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,16,MPI_COMM_WORLD);
}
void S17()
{
float t4,t9;
MPI_Request req1,req2;
MPI_Irecv(&t4,1,MPI_FLOAT,4,17,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t9,1,MPI_FLOAT,9,17,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float res=t4*t9;
cout<<"S17: done"<<t4<<" * "<<t9<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,17,MPI_COMM_WORLD);
}
void S18()
{
float t4,t8;
MPI_Request req1,req2;
MPI_Irecv(&t4,1,MPI_FLOAT,4,18,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t8,1,MPI_FLOAT,8,18,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float res=-9*t4*t8;
cout<<"S18: done"<<"-9 *"<<t4<<" * "<<t8<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,18,MPI_COMM_WORLD);
}
void S19()
{
float t4,t7;
MPI_Request req1,req2;
MPI_Irecv(&t4,1,MPI_FLOAT,4,19,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t7,1,MPI_FLOAT,7,19,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float res=23.6*t4*t7;
cout<<"S19: done"<<"23.6 *"<<t4<<" * "<<t7<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,19,MPI_COMM_WORLD);
}
void S20()
{
float t4;
MPI_Request req1;
MPI_Irecv(&t4,1,MPI_FLOAT,4,20,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
float res=-16.8*t4;
cout<<"S20: done"<<"-16.8 *"<<t4<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,20,MPI_COMM_WORLD);
}
void S21()
{
float t5,t10;
MPI_Request req1,req2;
MPI_Irecv(&t5,1,MPI_FLOAT,5,21,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t10,1,MPI_FLOAT,10,21,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float res=t5*t10;
cout<<"S21: done"<<t5<<" * "<<t10<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,21,MPI_COMM_WORLD);
}
void S22()
{
float t5,t9;
MPI_Request req1,req2;
MPI_Irecv(&t5,1,MPI_FLOAT,5,22,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t9,1,MPI_FLOAT,9,22,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float res=-12*t5*t9;
cout<<"S22: done"<<"-12 * "<<t5<<" * "<<t9<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,22,MPI_COMM_WORLD);
}
void S23()
{
float t5,t8;
MPI_Request req1,req2;
MPI_Irecv(&t5,1,MPI_FLOAT,5,23,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t8,1,MPI_FLOAT,8,23,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float z=347.0/7.0;
float res=z*t5*t8;
cout<<"S23: done"<<z<<" * "<<t5<<" * "<<t8<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,23,MPI_COMM_WORLD);
}
void S24()
{
float t5,t7;
MPI_Request req1,req2;
MPI_Irecv(&t5,1,MPI_FLOAT,5,24,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t7,1,MPI_FLOAT,7,24,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float z=-570./7.0;
float res=z*t5*t7;
cout<<"S24: done"<<z<<" * "<<t5<<" * "<<t7<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,24,MPI_COMM_WORLD);
}
void S25()
{
float t5;
MPI_Request req1;
MPI_Irecv(&t5,1,MPI_FLOAT,5,25,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
float z=216.0/5.0;
float res=z*t5;
cout<<"S25: done"<<z<<" * "<<t5<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,25,MPI_COMM_WORLD);
}
void S26()
{
float t6,t11;
MPI_Request req2,req1;
MPI_Irecv(&t6,1,MPI_FLOAT,6,26,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t11,1,MPI_FLOAT,11,26,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float res=t6*t11;
cout<<"S26: done"<<t6<<" * "<<t11<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,26,MPI_COMM_WORLD);
}
void S27()
{
float t6,t10;
MPI_Request req2,req1;
MPI_Irecv(&t6,1,MPI_FLOAT,6,27,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t10,1,MPI_FLOAT,10,27,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float res=-15*t6*t10;
cout<<"S27: done"<<"-15 * "<<t6<<" * "<<t10<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,27,MPI_COMM_WORLD);
}
void S28()
{
float t6,t9;
MPI_Request req2,req1;
MPI_Irecv(&t6,1,MPI_FLOAT,6,28,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t9,1,MPI_FLOAT,9,28,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float res=85*t6*t9;
cout<<"S28: done"<<"85 * "<<t6<<" * "<<t9<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,28,MPI_COMM_WORLD);
}
void S29()
{
float t6,t8;
MPI_Request req2,req1;
MPI_Irecv(&t6,1,MPI_FLOAT,6,29,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t8,1,MPI_FLOAT,8,29,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float res=-225*t6*t8;
cout<<"S29: done"<<"-225 * "<<t6<<" * "<<t8<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,29,MPI_COMM_WORLD);
}
void S30()
{
float t6,t7;
MPI_Request req2,req1;
MPI_Irecv(&t6,1,MPI_FLOAT,6,30,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
MPI_Irecv(&t7,1,MPI_FLOAT,7,30,MPI_COMM_WORLD,&req2);
MPI_Wait(&req2,&status);
float res=274*t6*t7;
cout<<"S30: done"<<"274 * "<<t6<<" * "<<t7<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,30,MPI_COMM_WORLD);
}
void S31()
{
float t6;
MPI_Request req1;
MPI_Irecv(&t6,1,MPI_FLOAT,6,31,MPI_COMM_WORLD,&req1);
MPI_Wait(&req1,&status);
float res=-120*t6;
cout<<"S31: done"<<"-120 * "<<t6<<" * "<<"= "<<res<<endl;
MPI_Send(&res,1,MPI_FLOAT,0,31,MPI_COMM_WORLD);
}
int main(int argc, char* argv[])
{
int rank; MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
switch(rank) {
case 0: S0();break;
case 1: S1();break;
case 2: S2();break;
case 3: S3();break;
case 4: S4();break;
case 5: S5();break;
case 6: S6();break;
case 7: S7();break;
case 8: S8();break;
case 9: S9();break;
case 10: S10();break;
case 11: S11();break;
case 12: S12();break;
case 13: S13();break;
case 14: S14();break;
case 15: S15();break;
case 16: S16();break;
case 17: S17();break;
case 18: S18();break;
case 19: S19();break;
case 20: S20();break;
case 21: S21();break;
case 22: S22();break;
case 23: S23();break;
case 24: S24();break;
case 25: S25();break;
case 26: S26();break;
case 27: S27();break;
case 28: S28();break;
case 29: S29();break;
case 30: S30();break;
case 31: S31();break;
}
MPI_Finalize();
return 0;
}
ВЫВОДЫ
В процессе выполнения данной лабораторной работы исследовался метод распараллеливания последовательной программы с помощью двумерной модели вычислительного процесса. В результате распараллеливания получилось 32 процесса, реализующие элементарные операции. Процесс с рангом 0 сначала считывает данные, вводимые с клавиатуры, рассылает данные процессам 0-ого яруса, а затем ожидает данные от процессов 1-ого яруса для того, чтобы вычислить результат.
2
Документ
Категория
Рефераты
Просмотров
19
Размер файла
414 Кб
Теги
lab2, tpv2, аааа
1/--страниц
Пожаловаться на содержимое документа