From ebfaf0308c650a96e42eb454f2f81dc0b7346511 Mon Sep 17 00:00:00 2001 From: Christian Heinrich Date: Tue, 14 Jun 2016 15:34:17 +0200 Subject: [PATCH 1/1] [SMPI] C++ify smpi_mpi_testany(). There's more to do though. --- src/smpi/smpi_base.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/smpi/smpi_base.cpp b/src/smpi/smpi_base.cpp index 3b4cdb9019..54ef209a49 100644 --- a/src/smpi/smpi_base.cpp +++ b/src/smpi/smpi_base.cpp @@ -775,30 +775,27 @@ int smpi_mpi_testany(int count, MPI_Request requests[], int *index, MPI_Status * { xbt_dynar_t comms; int i; - int* map; int flag = 0; - int size = 0; *index = MPI_UNDEFINED; comms = xbt_dynar_new(sizeof(smx_synchro_t), nullptr); - map = xbt_new(int, count); + std::vector map; /** Maps all matching comms back to their location in requests **/ for(i = 0; i < count; i++) { if ((requests[i] != MPI_REQUEST_NULL) && requests[i]->action && !(requests[i]->flags & PREPARED)) { xbt_dynar_push(comms, &requests[i]->action); - map[size] = i; - size++; + map.push_back(i); } } - if(size > 0) { + if(!map.empty()) { //multiplier to the sleeptime, to increase speed of execution, each failed testany will increase it static int nsleeps = 1; if(smpi_test_sleep > 0) simcall_process_sleep(nsleeps*smpi_test_sleep); - i = simcall_comm_testany(comms); + i = simcall_comm_testany(comms); // The i-th element in comms matches! // not MPI_UNDEFINED, as this is a simix return code - if(i != -1) { - *index = map[i]; + if (i != -1) { + *index = map[i]; finish_wait(&requests[*index], status); if (requests[*index] != MPI_REQUEST_NULL && (requests[*index]->flags & NON_PERSISTENT)) requests[*index] = MPI_REQUEST_NULL; @@ -812,7 +809,6 @@ int smpi_mpi_testany(int count, MPI_Request requests[], int *index, MPI_Status * flag=1; smpi_empty_status(status); } - xbt_free(map); xbt_dynar_free(&comms); return flag; -- 2.20.1