Commit ababf07b authored by Gaurav Kukreja's avatar Gaurav Kukreja

ping-pong.c for Latency

Working Code - Umbreen
Signed-off-by: 's avatarGaurav Kukreja <mailme.gaurav@gmail.com>
parent fd2df844
#include "mpi.h" #include "mpi.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdlib.h>
#include "result.h" #include "result.h"
#define FNAME_CMDARG 1 #define FNAME_CMDARG 1
extern char *filename;
struct data_latency data_l; struct data_latency data_l;
char *filename;
int main (int argc, char **argv) int main (int argc, char **argv)
{ {
int PING_PONG_LIMIT=5;
int my_proc,other_proc,i,j, nprocs; int my_rank,partner_rank,i,j, nprocs;
int tag=10; int tag=10;
char a, b; char a, b;
double tstart, tend; double tstart, tend;
...@@ -21,40 +22,50 @@ int main (int argc, char **argv) ...@@ -21,40 +22,50 @@ int main (int argc, char **argv)
MPI_Init(&argc, &argv); MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &my_proc); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
for(i=1; i<nprocs; i++) for(i=1; i<nprocs; i++)
{ {
other_proc=i; int ping_pong_count=0;
MPI_Barrier(MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
if (my_proc == 0) { if (my_rank == 0) {
partner_rank=i;
tstart = MPI_Wtime(); tstart = MPI_Wtime();
for(j=0; j<5; j++) while (ping_pong_count < PING_PONG_LIMIT) {
{ // Increment the ping pong count before you send it
MPI_Send(&a, 0, MPI_DOUBLE, other_proc, 10, MPI_COMM_WORLD); ping_pong_count++;
MPI_Recv(&b, 0, MPI_DOUBLE, other_proc, 10, MPI_COMM_WORLD, &status); MPI_Send(&ping_pong_count,1 , MPI_INT, partner_rank, 10, MPI_COMM_WORLD);
//printf("%d sent and incremented ping_pong_count %d to %d\n",my_rank, ping_pong_count, partner_rank);
MPI_Recv(&ping_pong_count,1, MPI_INT, partner_rank, 10, MPI_COMM_WORLD, &status);
//printf("%d received ping_pong_count %d from %d\n", my_rank, ping_pong_count, partner_rank);
} }
tend = MPI_Wtime(); tend = MPI_Wtime();
} else { }
for(j=0; j<5; j++) else if(my_rank==i) {
{ while (ping_pong_count < PING_PONG_LIMIT) {
MPI_Recv(&b, 0, MPI_DOUBLE, 0, 10, MPI_COMM_WORLD, &status); MPI_Recv(&ping_pong_count,1 , MPI_INT,0,10, MPI_COMM_WORLD, &status);
//printf("%d received ping_pong_count %d from %d\n",my_rank, ping_pong_count, 0);
MPI_Send(&b, 0, MPI_DOUBLE, 0, 10, MPI_COMM_WORLD); // Increment the ping pong count before you send it
ping_pong_count++;
MPI_Send(&ping_pong_count,1, MPI_INT,0,10, MPI_COMM_WORLD);
//printf("%d sent and incremented ping_pong_count %d to %d\n",my_rank, ping_pong_count, 0);
} }
} }
MPI_Barrier(MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD);
if(my_rank==0){
data_l.source_thread = 0; data_l.source_thread = 0;
data_l.dest_thread = other_proc; data_l.dest_thread = partner_rank;
data_l.latency = (tend - tstart)/10; data_l.latency = (tend - tstart)/10;
submit_latency_data(data_l); submit_latency_data(data_l);
printf("Latency for process %d = %lf\n",other_proc, tend-tstart);
printf("Latency for process %d = %lf\n",partner_rank, (tend-tstart)/10);
}
} }
MPI_Finalize(); MPI_Finalize();
return 0;
} }
#include <stdio.h> #include <stdio.h>
#include "result.h" #include "result.h"
char *filename; extern char *filename;
int submit_bandwidth_data(struct data_bandwidth data_b) int submit_bandwidth_data(struct data_bandwidth data_b)
{ {
FILE* fp; FILE* fp;
fp = fopen(filename, "a"); fp = fopen(filename, "a");
fprintf(fp, "%d/t%d/t%d/t%lf/t%lf/n", data_b.source_thread, fprintf(fp, "%d\t%d\t%d\t%lf\t%lf\n", data_b.source_thread,
data_b.dest_thread, data_b.log_size, data_b.dest_thread, data_b.log_size,
data_b.time, data_b.bandwidth); data_b.time, data_b.bandwidth);
...@@ -21,7 +21,7 @@ int submit_latency_data(struct data_latency data_l) ...@@ -21,7 +21,7 @@ int submit_latency_data(struct data_latency data_l)
FILE* fp; FILE* fp;
fp=fopen(filename, "a"); fp=fopen(filename, "a");
fprintf(fp, "%d/t%d/t%lf/n", data_l.source_thread, fprintf(fp, "%d\t%d\t%lf\n", data_l.source_thread,
data_l.dest_thread, data_l.latency); data_l.dest_thread, data_l.latency);
fclose(fp); fclose(fp);
......
...@@ -15,8 +15,10 @@ struct data_bandwidth { ...@@ -15,8 +15,10 @@ struct data_bandwidth {
double bandwidth; double bandwidth;
}; };
int submit_latency_data(struct data_latency); int submit_latency_data(struct data_latency data_l);
int submit_bandwidth_data(struct data_bandwidth); int submit_bandwidth_data(struct data_bandwidth data_b);
int write_hello();
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment