From 50944463ed08d80d28cb64d858b85f66ac6098f0 Mon Sep 17 00:00:00 2001
From: "Peter W. Draper" <p.w.draper@durham.ac.uk>
Date: Thu, 30 Apr 2020 15:58:08 +0100
Subject: [PATCH] Capture non-progress, still not handling the complexity of
 sending to some fixed offsets from a number of other ranks, needs a lot more
 guidance sent around the system

---
 swiftmpirdmastepsim.c | 32 ++++++++++++++------------------
 1 file changed, 14 insertions(+), 18 deletions(-)

diff --git a/swiftmpirdmastepsim.c b/swiftmpirdmastepsim.c
index 8059751..b82ac21 100644
--- a/swiftmpirdmastepsim.c
+++ b/swiftmpirdmastepsim.c
@@ -127,7 +127,8 @@ static void *inject_thread(void *arg) {
   message("%d: injection thread starts", *((int *)arg));
   ticks starttics = getticks();
 
-  int offset = 0;
+  int recv_offset = 0;
+  int send_offset = 0;
   while (ind_req < nr_reqs) {
     struct mpiuse_log_entry *log = reqs_queue[ind_req];
 
@@ -155,7 +156,7 @@ static void *inject_thread(void *arg) {
       MPI_Win_lock(MPI_LOCK_EXCLUSIVE, log->otherrank, 0,
                    mpi_send_window[log->subtype]);
       size_t index = (log->otherrank * nr_ranks * nr_ranks) +
-                     (log->rank * nr_ranks) + ind_req;
+                     (log->rank * nr_ranks) + send_offset;
       MPI_Raccumulate(log->data, log->size, MPI_BYTE, log->otherrank,
                       mpi_offsets[index], log->size, MPI_BYTE, MPI_REPLACE,
                       mpi_send_window[log->subtype], &log->req);
@@ -171,20 +172,22 @@ static void *inject_thread(void *arg) {
       newval[0] = DONE;
       oldval[0] = DONE;
       MPI_Compare_and_swap(&newval[0], &((char *)log->data)[log->size],
-                           &oldval[0], MPI_BYTE, 0, log->size,
+                           &oldval[0], MPI_BYTE, log->otherrank, log->size,
                            mpi_send_window[log->subtype]);
 
       /* Proceed locally. */
-      MPI_Win_flush_local(0, mpi_send_window[log->subtype]);
+      MPI_Win_flush_local(log->otherrank, mpi_send_window[log->subtype]);
       MPI_Win_unlock(log->otherrank, mpi_send_window[log->subtype]);
 
+      send_offset += log->size + 1;
+
     } else {
 
       /* Add entry so we start checking for the remote send. */
       int ind = atomic_inc(&nr_recvs);
       recvs_queue[ind] = log;
-      log->offset = offset;
-      offset += log->size + 1;
+      log->offset = recv_offset;
+      recv_offset += log->size + 1;
       atomic_inc(&todo_recv);
     }
     if (err != MPI_SUCCESS) error("Failed to activate send or recv");
@@ -227,9 +230,9 @@ static void *recv_thread(void *arg) {
                      mpi_recv_window[log->subtype]);
 
         int arrived = 0;
-        message("Checking at %zd", log->offset);
+        //message("%d: Checking at %zd subtype: %d", k, log->offset, log->subtype);
         if (mpi_ptr[log->subtype][log->offset+log->size] == DONE) arrived = 1;
-
+        if (arrived) message("message has arrived?");
         MPI_Win_unlock(log->otherrank, mpi_recv_window[log->subtype]);
 
         /* Increment etc. of statistics about time spent waiting. */
@@ -428,19 +431,12 @@ int main(int argc, char *argv[]) {
    * communicator. */
   for (int i = 0; i < task_subtype_count; i++) {
     MPI_Comm_dup(MPI_COMM_WORLD, &subtypeMPI_comms[i]);
-    //if (total_persubtype[i] > 0) {
-      message("allocate window for communicator %d", i);
-      MPI_Win_allocate(total_persubtype[i] + nr_ranks * sizeof(size_t),
-                       sizeof(int), MPI_INFO_NULL, subtypeMPI_comms[i],
-                       &mpi_ptr[i], &mpi_recv_window[i]);
-      //} else {
-      //mpi_ptr[i] = NULL;
-      //mpi_recv_window[i] = MPI_WIN_NULL;
-      //}
+    MPI_Win_allocate(total_persubtype[i] + nr_ranks * sizeof(size_t),
+                     sizeof(int), MPI_INFO_NULL, subtypeMPI_comms[i],
+                     &mpi_ptr[i], &mpi_recv_window[i]);
 
     /* Send window, just needs to attach to communicator, not data, since it
      * does not receive. */
-    message("create window for communicator %d", i);
     MPI_Win_create(NULL, 0, sizeof(int), MPI_INFO_NULL, subtypeMPI_comms[i],
                    &mpi_send_window[i]);
   }
-- 
GitLab