[MPICH] Name Publishing
lunasole at interfree.it
lunasole at interfree.it
Tue Aug 2 02:20:17 CDT 2005
Hi
I impemented a simple application Client/Server using Name Publishing.
I launched Server with mpiexec command. The Server associated a port name with a private name "SERVER". After I
launched client on another machine. It looked the port name up by passing name "SERVER" to MPI_Lookup_name.
with LAM I have no problem for this implementation.
with MPICH2 i have the following error message on client side:
ercole Name_Server]$ mpiexec -n 1 -path sample_MPICH2_MPI/MPI-2/Name_Server/ client
Port_name= port#32867$description#ercole$rank 0 in job 1 ercole_32771 causedcollective abort of all ranks
exit status of rank 0: killed by signal 9
What is the problem?
Thank's.
Rosalia Salvatore
Client and Server implementation:
//SERVER
#include <stdio.h>
#include <mpi.h>
#define NUM_LOOP 200
#define MAX_DATA 200
#define TIMER_ELAPSED \
( ( tv2.tv_usec - tv1.tv_usec ) \
+ ( ( tv2.tv_sec - tv1.tv_sec) * 1.E6 ) )
int main (int argc, char* argv[])
{
int rank, size,again,i;
static int count=0;
MPI_Comm client;
MPI_Status status;
char port_name[MPI_MAX_PORT_NAME];
double buf[MAX_DATA];
int time[NUM_LOOP];
MPI_Init(&argc,&argv); /* Initialize MPI */
MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get rank */
MPI_Comm_size(MPI_COMM_WORLD,&size); /* Get size of the LAM universe */
if (size != 1)
{
printf("Error");
return -1;
}
//printf("CIAO\n");
MPI_Open_port (MPI_INFO_NULL,port_name);
printf("port_name= %s\n", port_name);
MPI_Publish_name("SERVER",MPI_INFO_NULL,port_name);
printf("waiting...\n");
while(1)
{
MPI_Comm_accept (port_name, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &client);
again=1;
while (again == 1)
{
printf("\nReceive\n");
MPI_Recv(buf,MAX_DATA,MPI_DOUBLE,MPI_ANY_SOURCE,MPI_ANY_TAG, client, &status);
MPI_Send(buf, MAX_DATA, MPI_DOUBLE, 0, 2, client);
printf("MPI_TAG =%d\n ", status.MPI_TAG);
switch(status.MPI_TAG)
{
case 0:
MPI_Comm_free(&client);
MPI_Close_port(port_name);
MPI_Finalize();
return 0;
case 1:
MPI_Comm_disconnect(&client);
again =0;
break;
case 2:
//for (i=0;i<MAX_DATA;i++)
//{
printf("buf[%d]= %f",1,buf[1]);
//}//end for
break;
default:
MPI_Abort (MPI_COMM_WORLD,1);
break;
} //end of switch
} //end while again
} //infinity
}
// CLIENT
#include <stdio.h>
#include <mpi.h>
#include <sys/time.h>
#define LOOP 10000
#define MAX_DATA 200
#define TIMER_ELAPSED \
( ( tv2.tv_usec - tv1.tv_usec ) \
+ ( ( tv2.tv_sec - tv1.tv_sec) * 1.E6 ) )
int main (int argc, char* argv[])
{
int rank, size,i, tag=0, done=1;
MPI_Comm server;
MPI_Status status;
char port_name[MPI_MAX_PORT_NAME];
double buf[MAX_DATA];
double var=0.0;
int time[LOOP];
struct timeval tv1, tv2;
FILE *fp;
long max=0, min=20000000;
MPI_Init(&argc,&argv); /* Initialize MPI */
MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get rank */
//MPI_Comm_size(MPI_COMM_WORLD,&size); /* Get size of the LAM universe */
MPI_Lookup_name("SERVER", MPI_INFO_NULL, port_name);
printf("\nMPI_Lookup_name Port_name= %s", port_name);
MPI_Comm_connect (port_name, MPI_INFO_NULL,0, MPI_COMM_WORLD, &server);
for (i=0;i<MAX_DATA;i++)
{
buf[i]= i*2.0;
//printf("buf[%d]= %f\t",i,buf[i]);
}
tag=2;
for(i=0;i<LOOP;i++)
{
gettimeofday(&tv1, NULL);
MPI_Send(buf, MAX_DATA, MPI_DOUBLE, 0, tag, server);
MPI_Recv(buf,MAX_DATA,MPI_DOUBLE,MPI_ANY_SOURCE,MPI_ANY_TAG, server, &status);
gettimeofday(&tv2, NULL);
time[i]=(int)TIMER_ELAPSED;
printf("\nsend and receive con buf[%d]= %f\n",1,buf[1]);
printf("Client Tempo[%d]= %d\n",i, time[i]);
} //end for
tag=1;
MPI_Send(buf, MAX_DATA, MPI_DOUBLE, 0, tag, server);
printf("\nSend con tag 1\n");
MPI_Comm_disconnect(&server);
MPI_Finalize();
/* *************** TIME RESULTS ***************** */
fp= fopen("Results.txt","w");
for(i=0;i<LOOP;i++)
{
fprintf(fp,"%d %ld \n", i+1 ,time[i]);
var=var+time[i];
if(time[i]<min) min=time[i];
if(time[i]>max) max=time[i];
}
var=var/LOOP-1;
printf("Tempo del client %d = %f usec\n",rank,var);
fprintf(fp,"LATENCY TIME MIN = %ld microsec\n", min);
fprintf(fp,"LATENCY TIME MAX = %ld microsec\n", max);
fprintf(fp,"LATENCY TIME AVERAGE = %f microsec\n", var);
fclose (fp);
return 0;
}
-------------------------------------------------------------------------
Visita http://domini.interfree.it, il sito di Interfree dove trovare
soluzioni semplici e complete che soddisfano le tue esigenze in Internet,
ecco due esempi di offerte:
- Registrazione Dominio: un dominio con 1 MB di spazio disco + 2 caselle
email a soli 18,59 euro
- MioDominio: un dominio con 20 MB di spazio disco + 5 caselle email
a soli 51,13 euro
Vieni a trovarci!
Lo Staff di Interfree
-------------------------------------------------------------------------
More information about the mpich-discuss
mailing list