From 7c5de8876655a842dfe42b466ddb1a362cadd9c2 Mon Sep 17 00:00:00 2001 From: mubarak Date: Tue, 13 Jun 2017 10:22:29 -0400 Subject: [PATCH] Fixing MPI_SendRecv implementation in dumpi workload replay --- .../methods/codes-dumpi-trace-nw-wrkld.c | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/workload/methods/codes-dumpi-trace-nw-wrkld.c b/src/workload/methods/codes-dumpi-trace-nw-wrkld.c index 30480a0..04f44e5 100644 --- a/src/workload/methods/codes-dumpi-trace-nw-wrkld.c +++ b/src/workload/methods/codes-dumpi-trace-nw-wrkld.c @@ -53,6 +53,7 @@ typedef struct rank_mpi_context int my_app_id; // whether we've seen an init op (needed for timing correctness) int is_init; + int num_reqs; int64_t my_rank; double last_op_time; double init_time; @@ -517,9 +518,10 @@ int handleDUMPISendrecv(const dumpi_sendrecv* prm, uint16_t thread, rank_mpi_context* myctx = (rank_mpi_context*)uarg; + /* Issue a non-blocking send */ { struct codes_workload_op wrkld_per_rank; - wrkld_per_rank.op_type = CODES_WK_SEND; + wrkld_per_rank.op_type = CODES_WK_ISEND; wrkld_per_rank.u.send.tag = prm->sendtag; wrkld_per_rank.u.send.count = prm->sendcount; wrkld_per_rank.u.send.data_type = prm->sendtype; @@ -529,10 +531,12 @@ int handleDUMPISendrecv(const dumpi_sendrecv* prm, uint16_t thread, assert(wrkld_per_rank.u.send.num_bytes >= 0); wrkld_per_rank.u.send.dest_rank = prm->dest; wrkld_per_rank.u.send.source_rank = myctx->my_rank; - wrkld_per_rank.u.send.req_id = -1; + wrkld_per_rank.u.send.req_id = myctx->num_reqs; update_times_and_insert(&wrkld_per_rank, wall, myctx); + } + /* issue a blocking receive */ { struct codes_workload_op wrkld_per_rank; wrkld_per_rank.op_type = CODES_WK_RECV; @@ -546,6 +550,19 @@ int handleDUMPISendrecv(const dumpi_sendrecv* prm, uint16_t thread, wrkld_per_rank.u.recv.dest_rank = -1; update_times_and_insert(&wrkld_per_rank, wall, myctx); } + + /* Issue a wait operation */ + { + struct codes_workload_op wrkld_per_rank; + + wrkld_per_rank.op_type = CODES_WK_WAIT; + wrkld_per_rank.u.wait.req_id = myctx->num_reqs; + + update_times_and_insert(&wrkld_per_rank, wall, myctx); + + myctx->num_reqs++; + } + return 0; } @@ -763,9 +780,10 @@ int dumpi_trace_nw_workload_load(const char* params, int app_id, int rank) my_ctx = malloc(sizeof(rank_mpi_context)); assert(my_ctx); my_ctx->my_rank = rank; - my_ctx->my_app_id = app_id; + my_ctx->my_app_id = app_id; my_ctx->last_op_time = 0.0; - my_ctx->is_init = 0; + my_ctx->is_init = 0; + my_ctx->num_reqs = 0; my_ctx->dumpi_mpi_array = dumpi_init_op_data(); if(rank < 10) -- 2.26.2