рдПрдЪрдкреАрд╕реА рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ред рд╡реИрдХреНрдЯрд░ рдХреЗ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдХреА рдЧрдгрдирд╛

рд╕реНрд╡рд╛рдЧрдд



рдпрд╣ рдкреЛрд╕реНрдЯ рд╡рд┐рд╖рдп рдкрд░ рдкрд╣рд▓реЗ рдкреЛрд╕реНрдЯ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рд╣реИред





рдпрд╣ рдкреЛрд╕реНрдЯ "рдЬрд╛рд╡рд╛ рдлреЙрд░ рд╣рд╛рдИ рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ" рд▓реЗрдЦ рд╕реЗ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрджреНрдзрд░рдг рд╣реИ, рдЬреЛ рдЯреЙрдореНрд╕реНрдХ рдкреЙрд▓рд┐рдЯреЗрдХреНрдирд┐рдХ рдпреВрдирд┐рд╡рд░реНрд╕рд┐рдЯреА рд╕рдореНрдореЗрд▓рди рдореЗрдВ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рд╡реИрдХреНрдЯрд░ рдХрд╛ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рд╡реИрдХреНрдЯрд░ рдХреЗ рд╕рдВрдЧрдд рддрддреНрд╡реЛрдВ рдХреЗ рд╕рднреА рдЙрддреНрдкрд╛рджреЛрдВ рдХрд╛ рдпреЛрдЧ рд╣реИред



рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦреЗ рдЧрдП рдереЗ - рд╕реА рдореЗрдВ (рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ :-)) рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВред



рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдЯреЙрдореНрд╕реНрдХ рдкреЙрд▓рд┐рдЯреЗрдХреНрдирд┐рдХ рдпреВрдирд┐рд╡рд░реНрд╕рд┐рдЯреА рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд SKIF-Polytech рд╕реБрдкрд░рдХрдВрдкреНрдпреВрдЯрд░ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЗрд╕рдореЗрдВ 2 рдЗрдВрдЯреЗрд▓ Xeon 5150 2.66 Ghz рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ 24 GB рд░реИрдо рдХреЗ рд╕рд╛рде 24 рдиреЛрдбреНрд╕ рд╢рд╛рдорд┐рд▓ рдереЗ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ Linux рдХреЗ SuSE Enterprise рд╕рдВрд╕реНрдХрд░рдг 3.3 рдкрд░ рдЪрд▓ рд░рд╣реЗ рдереЗред



рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдпрд╛рдо рдХреЗ рджреЛ рд╡реИрдХреНрдЯрд░ 99999999 рдкреВрд░реНрдгрд╛рдВрдХ рддрддреНрд╡реЛрдВ рдХреЛ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 99999999 рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрддреНрд╡реЛрдВ рдХреЗ рджреЛ рд╡реИрдХреНрдЯрд░ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдереЗред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рджреЛ рдмрд╛рд░ (2 рд╕реЗ 40 рддрдХ) рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо 21 рдмрд╛рд░ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рдереЗред



рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо:

* рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ;

* рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ (рднрд╛рд╖рд╛рдУрдВ рдХреА рдЖрдВрддрд░рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред



рдЗрд╕рд▓рд┐рдП, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рд┐рджреНрдзрд╛рдВрдд



рд╕реА рдФрд░ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдордкреАрдЖрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рджреЛ рдЕрдВрддрд░ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

1) рд╕рдВрджреЗрд╢ рдЕрдЧреНрд░реЗрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рд╕реА рдореЗрдВ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдЬрд╛рд╡рд╛ рдореЗрдВ, рдпрд╣ рдПрдХ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рд╣реИ;

2) рддрд░реНрдХреЛрдВ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдХреНрд░рдоред



рд╡реИрдХреНрдЯрд░ рдХреЗ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:



1) рдПрди рддрддреНрд╡реЛрдВ рдХреЗ рджреЛ рд╡реИрдХреНрдЯрд░ рдмрдирд╛рдПрдВ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ;

2) рд╡реИрдХреНрдЯрд░ рдХреЛ рдХрдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ рдЬреЛ рдиреЛрдбреНрд╕ рдХреЛ рднреЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗ;

3) рдХрдгреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рднреЗрдЬреЗрдВ;

4) рдиреЛрдбреНрд╕ рдкрд░ рдХрдг рд▓реЗ рд▓реЛ;

5) рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП;

6) рд╡рд╛рдкрд╕ рднреЗрдЬреЗрдВ;

7) рд╕рдВрдХреНрд╖реЗрдк рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ;

8) рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВред



рдЕрдВрдХ рдкрд░:

1) рдПрди рддрддреНрд╡реЛрдВ рдХреЗ рджреЛ рд╡реИрдХреНрдЯрд░ рдмрдирд╛рдПрдБ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ



рд╕реА рдХреЗ рд▓рд┐рдП, рдПрд░реЗрд╕ рдХреЛ рдореЗрдореЛрд░реА рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдореЙрд▓реЛрдХ (рдПрди * рдЖрдХрд╛рд░реЛрдлрд╝ (рдбрдмрд▓)) рдФрд░ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реИрдВрдб () рд▓реВрдк рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ред рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЗрд╡рд▓ рд╡реЗрдХреНрдЯрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ (рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ) рдФрд░, рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╡реЗрдХреНрдЯрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЖрд░рдореНрдн рдХрд░реЗрдВред



2) рд╡реИрдХреНрдЯрд░ рдХреЛ рдХрдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ рдЬреЛ рдиреЛрдбреНрд╕ рдХреЛ рднреЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗ



рд╕реА рдФрд░ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

n = рдХреБрд▓ / рд╕рдВрдЦреНрдпрд╛ + 1, рдЬрд╣рд╛рдВ

N рдкреНрд░рддрд┐ рдиреЛрдб рдХрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ,

рдХреБрд▓ - рд╡реЗрдХреНрдЯрд░ рд▓рдВрдмрд╛рдИ,

numprocs - рдкреВрд▓ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (MPI_COMM_Size)ред



3) рдХрдгреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рднреЗрдЬреЗрдВ;



рд╣рдо MPI рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - MPI_Bcast, рдЬреЛ рдкреВрд▓ рдореЗрдВ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рднреЗрдЬрддрд╛ рд╣реИред рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ ред



рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рд░рдгрд┐рдпрд╛рдБ рднреЗрдЬрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



MPI.COMM_WORLD.Bcast(d, 1, 0,MPI.DOUBLE, 0);

MPI.COMM_WORLD.Send(a,0,a.length,MPI.DOUBLE,dest,0);

MPI.COMM_WORLD.Send(b,0,b.length,MPI.DOUBLE,dest,0);









рдЬрд╣рд╛рдВ d рд╕рд░рдгрд┐рдпреЛрдВ рд╕реЗ рдЯреБрдХрдбрд╝реЗ рдХреА рд▓рдВрдмрд╛рдИ рд╣реИ,

a рдкрд╣рд▓рд╛ рд╡реЗрдХреНрдЯрд░ рд╣реИ

b рджреВрд╕рд░рд╛ рд╡реЗрдХреНрдЯрд░ рд╣реИред



4) рдиреЛрдбреНрд╕ рдкрд░ рдХрдгреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ

MPI.COMM_WORLD.Recv(a,0,d[0],MPI.DOUBLE,0,0);

MPI.COMM_WORLD.Recv(b,0,d[0],MPI.DOUBLE,0,0);







рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВред



5) рдЧрдгрдирд╛ рдХрд░реЗрдВ



for (int i=0; i<d[0];i++){



sum[0]+=a[i]*b[i];

}









6) рд╡рд╛рдкрд╕ рднреЗрдЬреЗрдВ; 7) рд╕рдВрдХреНрд╖реЗрдк рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ;

рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рд╣реИ - рд╣рдо рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ - рдкрд░рд┐рдгрд╛рдо рдПрдХрддреНрд░ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛ (рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕рд░рд▓ рдЪрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП!) рдкрд░рд┐рдгрд╛рдоред

MPI.COMM_WORLD.Reduce(sum,0,result,0,1,MPI.DOUBLE,MPI.SUM,0);









8) рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ



рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рдорд╛рдирдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд░рдг - MPI.WIME (рджреАрд╡рд╛рд░ рд╕рдордп)ред рд╣рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд╣рд▓реЗ рдПрдХ рдХреЛ рдмреБрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХреБрд▓ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп (рдЧрдгрдирд╛ рдирд╣реАрдВ!) рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред



рдирд┐рд╖реНрдХрд░реНрд╖



рдЬрд╛рд╡рд╛ рдХреА рд╕рднреА рдХрдорд┐рдпреЛрдВ рдФрд░ рд╕реА рдФрд░ рдЬрд╛рд╡рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЗ рдмреАрдЪ рдордЬрдмреВрдд рдЕрдВрддрд░ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреА рдкрд╕рдВрдж рдкрд░ рдЕрдВрддрд┐рдо рдирд┐рд░реНрдгрдп рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЧрд╣рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рдж рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╢реЛрдзрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рдореВрд╣ рдиреЗ рдЦреБрдж рдХреЛ рдкрд╛рдпрд╛ред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдФрд░ рд▓реЛрд╣реЗ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд╣реИ (рдЗрд╕рд▓рд┐рдП, рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЕрдиреБрдХреВрд▓рди), рдЬрдмрдХрд┐ рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкрд░ рдПрдХ рдмрдбрд╝реА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИ, рдЬреЛ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрд╛рд╣рд░ рди рдЬрд╛рдиреЗ рджреЗрдВред - рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдорд▓реЛрдВ рдХреА рдШрдЯрдирд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо "рд▓реАрдХ" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪреЗрдВред рдЧрдВрднреАрд░ рд╢реЛрдз рдореЗрдВ рдпрд╣ рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИред



рджреВрд╕рд░реА рдУрд░, рдЬрд╛рд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рдЙрдЪрд┐рдд рд╣реИред рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░реЛрдВ рдФрд░ рдЕрдиреНрдп рдЪреАрдЬрд╝реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ, рдЬрд╛рд╡рд╛ рдореЗрдВ рдРрд╕реЗ рдлрд╛рдпрджреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛, рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдЙрдкрдХрд░рдг, "рдирдВрдмрд░ рдХреЛрд▓реНрд╣реВ" рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдкреНрд░рд╡реЗрд╢ рд╕реАрдорд╛, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЬрдЯрд┐рд▓ рдФрд░ рдЕрд╕реНрдкрд╖реНрдЯ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ред рд╕рдВрдХреЗрдд рдпрд╛ рдореИрдиреБрдЕрд▓ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди - рдпрд╣ рд╕рдм рдЕрдиреБрд╕рдВрдзрд╛рди рдЯреАрдо рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд╡рд╛ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рддрд░реНрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ Atelier, рд╕реА рдореЗрдВ рдПрдХ рд╕рдХреНрд╖рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реЗ рдмрдирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛



рд╕реА рдХрд╛рд░реНрдпрдХреНрд░рдо

#include "mpi.h"

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <signal.h>



#define MYTAG 1



int myid, j;

char processor_name[MPI_MAX_PROCESSOR_NAME];

double startwtime = 0.0, endwtime;



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

{

int total, n, numprocs, i, dest;

double *a, *b, sum, result;

int namelen;

MPI_Status status;



MPI_Init(&argc,&argv);

MPI_Comm_size(MPI_COMM_WORLD,&numprocs);

MPI_Comm_rank(MPI_COMM_WORLD,&myid);

MPI_Get_processor_name(processor_name,&namelen);



if (myid == 0) {

total = atoi(argv[1]);

}



printf("Process %d of %d is on %s\n",

myid, numprocs, processor_name);



startwtime = MPI_Wtime();



n = total / numprocs + 1;

MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);



a = malloc(n*sizeof(double));

b = malloc(n*sizeof(double));



if ((a == NULL) || (b == NULL)) {

fprintf(stderr,"Error allocating vectors (not enough memory?)\n");

exit(1);

}



if (myid == 0) {

for (dest=1; dest < numprocs; dest++) {

for (i=0; i < n; i++) {

a[i] = 4294967296;//rand();

b[i] = 4294967296;//rand();

}

MPI_Send(a, n, MPI_INT, dest, MYTAG, MPI_COMM_WORLD);

MPI_Send(b, n, MPI_INT, dest, MYTAG, MPI_COMM_WORLD);

}

n = total - n*(numprocs-1);

for (i=0; i < n; i++) {

a[i] = rand();

b[i] = rand();

}

} else {

MPI_Recv(a, n, MPI_INT, 0, MYTAG, MPI_COMM_WORLD, &status);

MPI_Recv(b, n, MPI_INT, 0, MYTAG, MPI_COMM_WORLD, &status);

}



printf("Process %d on node %s starting calc at %f sec\n",

myid, processor_name, MPI_Wtime()-startwtime);



sum = 0.0;

for (i=0; i<n; i++)

sum += a[i]*b[i];



printf("Process %d on node %s ending calc at %f sec\n",

myid, processor_name, MPI_Wtime()-startwtime);

MPI_Reduce(&sum, &result, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);



if (myid == 0) {

endwtime = MPI_Wtime();

printf("Answer is %f\n", result);

printf("wall clock time = %f\n", endwtime-startwtime);

fflush(stdout);

}



MPI_Finalize();

return 0;

}









рдЬрд╛рд╡рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо



import mpi.*;

import java.util.*;



public class scalar {



public static void main(String args[]){

MPI.Init(args);



double[] result = new double[1];

int me = MPI.COMM_WORLD.Rank();

int size = MPI.COMM_WORLD.Size();



double startwtime=0.0;

double endwtime=0.0;

int total = 99999999;



int[] d = new int[1];

d[0] = total/size+1;



double[] a = new double[d[0]];

double[] b = new double[d[0]];

Random r = new Random();



MPI.COMM_WORLD.Bcast(d, 1, 0,MPI.INT, 0);



if (me == 0){

startwtime = MPI.Wtime();

for (int dest=1; dest<size;dest++){

for (int i=0; i<d[0]; i++){

a[i] = r.nextDouble();

b[i] = r.nextDouble();

}



MPI.COMM_WORLD.Send(a,0,a.length,MPI.INT,dest,0);

MPI.COMM_WORLD.Send(b,0,b.length,MPI.INT,dest,0);

}



d[0] = total - d[0]*(size-1);

for (int i=0; i<d[0];i++){



a[i] = r.nextDouble();

b[i] = r.nextDouble();

}



} else {



MPI.COMM_WORLD.Recv(a,0,d[0],MPI.INT,0,0);

MPI.COMM_WORLD.Recv(b,0,d[0],MPI.INT,0,0);



}



int[] sum = new int[1];



for (int i=0; i<d[0];i++){



sum[0]+=a[i]*b[i];



}



MPI.COMM_WORLD.Reduce(sum,0,result,0,1,MPI.INT,MPI.SUM,0);



if (me == 0){



System.out.println("answer is"+result[0]+" time of calcs is equal to "+(MPI.Wtime()-startwtime));



}

MPI.Finalize();



}

}














All Articles