Revision history for MpiBeispielRing


Revision [7517]

Last edited on 2009-01-18 23:28:12 by ToBo
Additions:
C-Programm
%%(c;;ring.c:)
http://www.tnotes.de/MpiBeispielRing
Deletions:
Code ring.c:
%%(c)


Revision [7093]

Edited on 2008-12-14 03:16:15 by ToBo
Additions:
Mit vier Prozessen auf einem Rechner testen
Mit drei Rechnern testen
mpiexec -n 1 -host amygdala ~/code/mpi/04_ring/ring : -n 1 -host IBM ~/mpi/ring : -n 1 -host Medusa ~/mpi/ring
R0 is waiting for R2...
R0 received from R2: Wir spielen mit MPI!
R2 sent data to R0.
Deletions:
Starten


Revision [6953]

Edited on 2008-12-08 01:58:29 by ToBo
Additions:
CategoryStudiumSE


Revision [6946]

Edited on 2008-12-08 01:51:42 by ToBo
Additions:
... empfängt und sendet zu R0
R0 empfängt und sendet zu R1
Deletions:
....
R0 empfängt und sendet zu R5


Revision [6945]

Edited on 2008-12-08 01:50:24 by ToBo
Additions:
=====MPI-Beispiel ring.c=====
Code ring.c:
%%(c)
/* MPI-Beispiel
R0 sendet zu R1
R1 empfängt und sendet zu R2
R2 empfängt und sendet zu R3
....
R0 empfängt und sendet zu R5
usw.

Compile: mpicc -o ring ring.c
Start: mpiexec -n 6 ./ring

@author Andreas Tobola
@since 06.12.2008
*/
#include "mpi.h"
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
int size, rank, prank, nrank;
char sdata[] = "Wir spielen mit MPI!";
char rdata[30];
int data_size;
int i;
MPI_Status stat;
data_size = sizeof(sdata);

MPI_Init(&argc, &argv);
MPI_Comm_size( MPI_COMM_WORLD, &size );
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
// Calcualte previous prozess rank
prank = rank-1;
if (prank==-1)
prank = size-1;

// Calcualte next prozess rank
nrank = (rank+1) % size;
// If we are the first (rank 0), first token has to be send
if (rank==0)
{
sleep(2);
MPI_Send(sdata, data_size, MPI_CHAR, 1, 1, MPI_COMM_WORLD );
printf ("R%d sent data to R%d.\n", rank, nrank );
}

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

// Wait and receive data form prank
printf ("R%d is waiting for R%d...\n", rank, prank);
memset(rdata, 0 , 30);
MPI_Recv(rdata, data_size, MPI_CHAR, prank , 1, MPI_COMM_WORLD, &stat);

// Print and forward data to nrank
printf( "R%d received from R%d: %s\n", rank, prank, rdata);
usleep(100000);
MPI_Send(rdata, data_size, MPI_CHAR, nrank , 1, MPI_COMM_WORLD );
printf ("R%d sent data to R%d.\n", rank, nrank );

}
//printf( "Finalize %d/%d\n", rank, size );
MPI_Finalize();
return 0;
}
%%
Kompilieren
%%(bash)
mpicc ring.c -o ring
%%
Starten
%%
mpiexec -n 4 ring
%%
Ausgabe
%%
R1 is waiting for R0...
R2 is waiting for R1...
R3 is waiting for R2...
R0 sent data to R1.
R0 is waiting for R3...
R1 received from R0: Wir spielen mit MPI!
R1 sent data to R2.
R1 is waiting for R0...
R2 received from R1: Wir spielen mit MPI!
R2 sent data to R3.
R2 is waiting for R1...
R3 received from R2: Wir spielen mit MPI!
R0 received from R3: Wir spielen mit MPI!
R3 sent data to R0.
R3 is waiting for R2...
R0 sent data to R1.
R0 is waiting for R3...
R1 received from R0: Wir spielen mit MPI!
R2 received from R1: Wir spielen mit MPI!
R1 sent data to R2.
R1 is waiting for R0...
R2 sent data to R3.
R2 is waiting for R1...
R3 received from R2: Wir spielen mit MPI!
R0 received from R3: Wir spielen mit MPI!
R3 sent data to R0.
R3 is waiting for R2...
R0 sent data to R1.
R0 is waiting for R3...
R1 received from R0: Wir spielen mit MPI!
R2 received from R1: Wir spielen mit MPI!
R1 sent data to R2.
R1 is waiting for R0...
R2 sent data to R3.
R2 is waiting for R1...
R3 received from R2: Wir spielen mit MPI!
R0 received from R3: Wir spielen mit MPI!
R3 sent data to R0.
R3 is waiting for R2...
...
%%
Deletions:
=====Titel=====


Revision [6941]

The oldest known version of this page was created on 2008-12-08 01:44:00 by ToBo
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki