#include <stdio.h>#include <stdlib.h>#include <mpi.h>double getL (int measure, int mirror, int rank){ int i; double start, stop,rtt,L; int *buffer; MPI_Status mpi_stat; buffer = (int *) malloc (sizeof(int)); start = stop = rtt = L = 0.0; if (rank == measure) { start = MPI_Wtime(); // Envoyer un message de taille 0 vers le processus 1 (mirror) // ... // attendre la rponse du processus 1 // ... stop = MPI_Wtime(); rtt = (stop - start); L = rtt/2; } else { // attendre le message du processus 0 // ... // envoyer une rponse vers le processus 0 // ... } return (L);}double getTput (int measure, int mirror, int rank, int size,double L){ int i; double start, stop, total ,tput; int *buffer; MPI_Status mpi_stat; buffer = (int *) malloc (size*sizeof(int)); start = stop = total = tput = 0.0; if (rank == measure) { /* il faudrait faire quelques communications pour "chauffer" * le rseau, mais faisons simple */ start = MPI_Wtime(); // Envoyer un message de taille size vers le processus 1 // ... // attendre la rponse du processus 1 // ... stop = MPI_Wtime(); total = stop - start; tput = size/(total-(2*L/1E6)); } else { // attendre le message de taille size du processus 0 // ... // envoyer une rponse vers le processus 0 // ... } return (tput);}int main (int argc, char **argv){ int rank; int size; int msgsize; int i; double NWS_Latency, NWS_Tput; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&size); MPI_Comm_rank(MPI_COMM_WORLD,&rank); if (size != 2) { if (rank==0) printf("Cette exprience requiert SEULEMENT deux processus\n"); exit(0); } NWS_Latency = getL(0,1,rank); // tester avec diffrentes tailles de message msgsize=1048576; NWS_Tput = getTput(0,1,rank,msgsize,NWS_Latency); if (rank == 0) { printf("Valeurs de Latence et Dbit au niveau d'une application MPI\n"); printf("Latence = %f microsecondes\n",(NWS_Latency*1E06)); printf("Debit = %f Mo/s\n", (NWS_Tput/1E06)); } MPI_Finalize();}