Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[SMPI] PMPI_Ssend: Cosmetics
[simgrid.git] / src / smpi / smpi_pmpi.cpp
index 65389eb..78b73c6 100644 (file)
@@ -27,7 +27,7 @@ int PMPI_Init(int *argc, char ***argv)
   // PMPI_Init is call only one time by only by SMPI process
   int already_init;
   MPI_Initialized(&already_init);
-  if(!(already_init)){
+  if(already_init == 0){
     smpi_process_init(argc, argv);
     smpi_process_mark_as_initialized();
     int rank = smpi_process_index();
@@ -39,6 +39,9 @@ int PMPI_Init(int *argc, char ***argv)
     TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
     smpi_bench_begin();
   }
+
+  smpi_mpi_init();
+
   return MPI_SUCCESS;
 }
 
@@ -138,10 +141,10 @@ int PMPI_Address(void *location, MPI_Aint * address)
 {
   int retval = 0;
 
-  if (!address) {
+  if (address==NULL) {
     retval = MPI_ERR_ARG;
   } else {
-    *address = (MPI_Aint) location;
+    *address = reinterpret_cast<MPI_Aint>(location);
     retval = MPI_SUCCESS;
   }
   return retval;
@@ -159,7 +162,7 @@ int PMPI_Type_free(MPI_Datatype * datatype)
   if (*datatype == MPI_DATATYPE_NULL) {
     retval = MPI_ERR_ARG;
   } else {
-    smpi_datatype_free(datatype);
+    smpi_datatype_unuse(*datatype);
     retval = MPI_SUCCESS;
   }
   return retval;
@@ -174,7 +177,7 @@ int PMPI_Type_size(MPI_Datatype datatype, int *size)
   } else if (size == NULL) {
     retval = MPI_ERR_ARG;
   } else {
-    *size = (int) smpi_datatype_size(datatype);
+    *size = static_cast<int>(smpi_datatype_size(datatype));
     retval = MPI_SUCCESS;
   }
   return retval;
@@ -262,7 +265,7 @@ int PMPI_Op_create(MPI_User_function * function, int commute, MPI_Op * op)
   if (function == NULL || op == NULL) {
     retval = MPI_ERR_ARG;
   } else {
-    *op = smpi_op_new(function, commute);
+    *op = smpi_op_new(function, (commute!=0));
     retval = MPI_SUCCESS;
   }
   return retval;
@@ -444,7 +447,8 @@ int PMPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group * newgro
   } else if (newgroup == NULL) {
     retval = MPI_ERR_ARG;
   } else {
-    size = size2 = smpi_group_size(group1);
+    size = smpi_group_size(group1);
+    size2 = size;
     for (i = 0; i < size2; i++) {
       proc1 = smpi_group_index(group1, i);
       proc2 = smpi_group_rank(group2, proc1);
@@ -718,7 +722,7 @@ int PMPI_Comm_group(MPI_Comm comm, MPI_Group * group)
   } else {
     *group = smpi_comm_group(comm);
     if(*group!= smpi_comm_group(MPI_COMM_WORLD) && *group != MPI_GROUP_NULL
-              && *group != smpi_comm_group(MPI_COMM_SELF) && *group != MPI_GROUP_EMPTY)
+              && *group != MPI_GROUP_EMPTY)
     smpi_group_use(*group);
     retval = MPI_SUCCESS;
   }
@@ -775,7 +779,7 @@ int PMPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm * newcomm)
     *newcomm= MPI_COMM_NULL;
     retval = MPI_SUCCESS;
   }else{
-
+    smpi_group_use(group);
     *newcomm = smpi_comm_new(group, NULL);
     retval = MPI_SUCCESS;
   }
@@ -851,7 +855,7 @@ int PMPI_Send_init(void *buf, int count, MPI_Datatype datatype, int dst, int tag
       retval = MPI_SUCCESS;
   }
   smpi_bench_begin();
-  if (retval != MPI_SUCCESS && request)
+  if (retval != MPI_SUCCESS && request != NULL)
     *request = MPI_REQUEST_NULL;
   return retval;
 }
@@ -874,7 +878,7 @@ int PMPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int src, int tag
     retval = MPI_SUCCESS;
   }
   smpi_bench_begin();
-  if (retval != MPI_SUCCESS && request)
+  if (retval != MPI_SUCCESS && request != NULL)
     *request = MPI_REQUEST_NULL;
   return retval;
 }
@@ -897,7 +901,7 @@ int PMPI_Ssend_init(void* buf, int count, MPI_Datatype datatype, int dst, int ta
     retval = MPI_SUCCESS;
   }
   smpi_bench_begin();
-  if (retval != MPI_SUCCESS && request)
+  if (retval != MPI_SUCCESS && request != NULL)
     *request = MPI_REQUEST_NULL;
   return retval;
 }
@@ -969,9 +973,7 @@ int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MP
     retval = MPI_SUCCESS;
   } else if (src!=MPI_ANY_SOURCE && (src >= smpi_group_size(smpi_comm_group(comm)) || src <0)){
     retval = MPI_ERR_RANK;
-  } else if (count < 0) {
-    retval = MPI_ERR_COUNT;
-  } else if (buf==NULL && count > 0) {
+  } else if ((count < 0) || (buf==NULL && count > 0)) {
     retval = MPI_ERR_COUNT;
   } else if (!is_datatype_valid(datatype)) {
       retval = MPI_ERR_TYPE;
@@ -989,7 +991,7 @@ int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MP
     int known=0;
     extra->datatype1 = encode_datatype(datatype, &known);
     int dt_size_send = 1;
-    if(!known)
+    if(known==0)
       dt_size_send = smpi_datatype_size(datatype);
     extra->send_size = count*dt_size_send;
     TRACE_smpi_ptp_in(rank, src_traced, rank, __FUNCTION__, extra);
@@ -1002,7 +1004,7 @@ int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MP
   }
 
   smpi_bench_begin();
-  if (retval != MPI_SUCCESS && request)
+  if (retval != MPI_SUCCESS && request != NULL)
     *request = MPI_REQUEST_NULL;
   return retval;
 }
@@ -1022,9 +1024,7 @@ int PMPI_Isend(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MP
     retval = MPI_SUCCESS;
   } else if (dst >= smpi_group_size(smpi_comm_group(comm)) || dst <0){
     retval = MPI_ERR_RANK;
-  } else if (count < 0) {
-    retval = MPI_ERR_COUNT;
-  } else if (buf==NULL && count > 0) {
+  } else if ((count < 0) || (buf==NULL && count > 0)) {
     retval = MPI_ERR_COUNT;
   } else if (!is_datatype_valid(datatype)) {
       retval = MPI_ERR_TYPE;
@@ -1041,7 +1041,7 @@ int PMPI_Isend(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MP
     int known=0;
     extra->datatype1 = encode_datatype(datatype, &known);
     int dt_size_send = 1;
-    if(!known)
+    if(known==0)
       dt_size_send = smpi_datatype_size(datatype);
     extra->send_size = count*dt_size_send;
     TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
@@ -1055,7 +1055,7 @@ int PMPI_Isend(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MP
   }
 
   smpi_bench_begin();
-  if (retval != MPI_SUCCESS && request)
+  if (retval != MPI_SUCCESS && request!=NULL)
     *request = MPI_REQUEST_NULL;
   return retval;
 }
@@ -1074,9 +1074,7 @@ int PMPI_Issend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, M
     retval = MPI_SUCCESS;
   } else if (dst >= smpi_group_size(smpi_comm_group(comm)) || dst <0){
     retval = MPI_ERR_RANK;
-  } else if (count < 0) {
-    retval = MPI_ERR_COUNT;
-  } else if (buf==NULL && count > 0) {
+  } else if ((count < 0)|| (buf==NULL && count > 0)) {
     retval = MPI_ERR_COUNT;
   } else if (!is_datatype_valid(datatype)) {
       retval = MPI_ERR_TYPE;
@@ -1093,7 +1091,7 @@ int PMPI_Issend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, M
     int known=0;
     extra->datatype1 = encode_datatype(datatype, &known);
     int dt_size_send = 1;
-    if(!known)
+    if(known==0)
       dt_size_send = smpi_datatype_size(datatype);
     extra->send_size = count*dt_size_send;
     TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
@@ -1107,7 +1105,7 @@ int PMPI_Issend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, M
   }
 
   smpi_bench_begin();
-  if (retval != MPI_SUCCESS && request)
+  if (retval != MPI_SUCCESS && request!=NULL)
     *request = MPI_REQUEST_NULL;
   return retval;
 }
@@ -1125,9 +1123,7 @@ int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI
     retval = MPI_SUCCESS;
   } else if (src!=MPI_ANY_SOURCE && (src >= smpi_group_size(smpi_comm_group(comm)) || src <0)){
     retval = MPI_ERR_RANK;
-  } else if (count < 0) {
-    retval = MPI_ERR_COUNT;
-  } else if (buf==NULL && count > 0) {
+  } else if ((count < 0) || (buf==NULL && count > 0)) {
     retval = MPI_ERR_COUNT;
   } else if (!is_datatype_valid(datatype)) {
       retval = MPI_ERR_TYPE;
@@ -1143,7 +1139,7 @@ int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI
   int known=0;
   extra->datatype1 = encode_datatype(datatype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(datatype);
   extra->send_size = count*dt_size_send;
   TRACE_smpi_ptp_in(rank, src_traced, rank, __FUNCTION__, extra);
@@ -1177,89 +1173,84 @@ int PMPI_Send(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI
     retval = MPI_SUCCESS;
   } else if (dst >= smpi_group_size(smpi_comm_group(comm)) || dst <0){
     retval = MPI_ERR_RANK;
-  } else if (count < 0) {
-    retval = MPI_ERR_COUNT;
-  } else if (buf==NULL && count > 0) {
+  } else if ((count < 0) || (buf == nullptr && count > 0)) {
     retval = MPI_ERR_COUNT;
   } else if (!is_datatype_valid(datatype)) {
-      retval = MPI_ERR_TYPE;
-  } else if(tag<0 && tag !=  MPI_ANY_TAG){
+    retval = MPI_ERR_TYPE;
+  } else if(tag < 0 && tag !=  MPI_ANY_TAG){
     retval = MPI_ERR_TAG;
   } else {
-
-  int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
-  int dst_traced = smpi_group_index(smpi_comm_group(comm), dst);
-  instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
-  extra->type = TRACING_SEND;
-  extra->src = rank;
-  extra->dst = dst_traced;
-  int known=0;
-  extra->datatype1 = encode_datatype(datatype, &known);
-  int dt_size_send = 1;
-  if(!known)
-    dt_size_send = smpi_datatype_size(datatype);
-  extra->send_size = count*dt_size_send;
-  TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
-  if (!TRACE_smpi_view_internals()) {
-    TRACE_smpi_send(rank, rank, dst_traced,count*smpi_datatype_size(datatype));
-  }
+    int rank               = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+    int dst_traced         = smpi_group_index(smpi_comm_group(comm), dst);
+    instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
+    extra->type            = TRACING_SEND;
+    extra->src             = rank;
+    extra->dst             = dst_traced;
+    int known              = 0;
+    extra->datatype1       = encode_datatype(datatype, &known);
+    int dt_size_send       = 1;
+    if (known == 0) {
+      dt_size_send = smpi_datatype_size(datatype);
+    }
+    extra->send_size = count*dt_size_send;
+    TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
+    if (!TRACE_smpi_view_internals()) {
+      TRACE_smpi_send(rank, rank, dst_traced,count*smpi_datatype_size(datatype));
+    }
 
     smpi_mpi_send(buf, count, datatype, dst, tag, comm);
     retval = MPI_SUCCESS;
 
-  TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__);
+    TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__);
   }
 
   smpi_bench_begin();
   return retval;
 }
 
-
-
 int PMPI_Ssend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, MPI_Comm comm) {
   int retval = 0;
 
-   smpi_bench_end();
-
-   if (comm == MPI_COMM_NULL) {
-     retval = MPI_ERR_COMM;
-   } else if (dst == MPI_PROC_NULL) {
-     retval = MPI_SUCCESS;
-   } else if (dst >= smpi_group_size(smpi_comm_group(comm)) || dst <0){
-     retval = MPI_ERR_RANK;
-   } else if (count < 0) {
-     retval = MPI_ERR_COUNT;
-   } else if (buf==NULL && count > 0) {
-     retval = MPI_ERR_COUNT;
-   } else if (!is_datatype_valid(datatype)){
-     retval = MPI_ERR_TYPE;
-   } else if(tag<0 && tag !=  MPI_ANY_TAG){
-     retval = MPI_ERR_TAG;
-   } else {
-
-   int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
-   int dst_traced = smpi_group_index(smpi_comm_group(comm), dst);
-   instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
-   extra->type = TRACING_SSEND;
-   extra->src = rank;
-   extra->dst = dst_traced;
-   int known=0;
-   extra->datatype1 = encode_datatype(datatype, &known);
-   int dt_size_send = 1;
-   if(!known)
-     dt_size_send = smpi_datatype_size(datatype);
-   extra->send_size = count*dt_size_send;
-   TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
-   TRACE_smpi_send(rank, rank, dst_traced,count*smpi_datatype_size(datatype));
-
-     smpi_mpi_ssend(buf, count, datatype, dst, tag, comm);
-     retval = MPI_SUCCESS;
+  smpi_bench_end();
 
-   TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__);
-   }
+  if (comm == MPI_COMM_NULL) {
+    retval = MPI_ERR_COMM;
+  } else if (dst == MPI_PROC_NULL) {
+    retval = MPI_SUCCESS;
+  } else if (dst >= smpi_group_size(smpi_comm_group(comm)) || dst <0){
+    retval = MPI_ERR_RANK;
+  } else if ((count < 0) || (buf==NULL && count > 0)) {
+    retval = MPI_ERR_COUNT;
+  } else if (!is_datatype_valid(datatype)){
+    retval = MPI_ERR_TYPE;
+  } else if(tag<0 && tag !=  MPI_ANY_TAG){
+    retval = MPI_ERR_TAG;
+  } else {
+    int rank               = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+    int dst_traced         = smpi_group_index(smpi_comm_group(comm), dst);
+    instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
+    extra->type            = TRACING_SSEND;
+    extra->src             = rank;
+    extra->dst             = dst_traced;
+    int known              = 0;
+    extra->datatype1       = encode_datatype(datatype, &known);
+    int dt_size_send       = 1;
+    if(known == 0) {
+      dt_size_send = smpi_datatype_size(datatype);
+    }
+    extra->send_size = count*dt_size_send;
+    TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
+    TRACE_smpi_send(rank, rank, dst_traced,count*smpi_datatype_size(datatype));
+  
+    smpi_mpi_ssend(buf, count, datatype, dst, tag, comm);
+    retval = MPI_SUCCESS;
+  
+    TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__);
+  }
 
-   smpi_bench_begin();
-   return retval;}
+  smpi_bench_begin();
+  return retval;
+}
 
 int PMPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dst, int sendtag, void *recvbuf,
                  int recvcount, MPI_Datatype recvtype, int src, int recvtag, MPI_Comm comm, MPI_Status * status)
@@ -1280,9 +1271,8 @@ int PMPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dst,
   }else if (dst >= smpi_group_size(smpi_comm_group(comm)) || dst <0 ||
       (src!=MPI_ANY_SOURCE && (src >= smpi_group_size(smpi_comm_group(comm)) || src <0))){
     retval = MPI_ERR_RANK;
-  } else if (sendcount < 0 || recvcount<0) {
-      retval = MPI_ERR_COUNT;
-  } else if ((sendbuf==NULL && sendcount > 0)||(recvbuf==NULL && recvcount>0)) {
+  } else if ((sendcount < 0 || recvcount<0) || 
+      (sendbuf==NULL && sendcount > 0) || (recvbuf==NULL && recvcount>0)) {
     retval = MPI_ERR_COUNT;
   } else if((sendtag<0 && sendtag !=  MPI_ANY_TAG)||(recvtag<0 && recvtag != MPI_ANY_TAG)){
     retval = MPI_ERR_TAG;
@@ -1298,12 +1288,12 @@ int PMPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dst,
   int known=0;
   extra->datatype1 = encode_datatype(sendtype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(sendtype);
   extra->send_size = sendcount*dt_size_send;
   extra->datatype2 = encode_datatype(recvtype, &known);
   int dt_size_recv = 1;
-  if(!known)
+  if(known==0)
     dt_size_recv = smpi_datatype_size(recvtype);
   extra->recv_size = recvcount*dt_size_recv;
 
@@ -1325,7 +1315,6 @@ int PMPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dst,
 int PMPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype, int dst, int sendtag, int src, int recvtag,
                          MPI_Comm comm, MPI_Status * status)
 {
-  //TODO: suboptimal implementation
   void *recvbuf;
   int retval = 0;
   if (!is_datatype_valid(datatype)) {
@@ -1356,7 +1345,7 @@ int PMPI_Test(MPI_Request * request, int *flag, MPI_Status * status)
     smpi_empty_status(status);
     retval = MPI_SUCCESS;
   } else {
-    int rank = request && (*request)->comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+    int rank = (request!=NULL && (*request)->comm != MPI_COMM_NULL) ? smpi_process_index() : -1;
 
     instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
     extra->type = TRACING_TEST;
@@ -1425,9 +1414,7 @@ int PMPI_Iprobe(int source, int tag, MPI_Comm comm, int* flag, MPI_Status* statu
   int retval = 0;
   smpi_bench_end();
 
-  if (flag == NULL) {
-    retval = MPI_ERR_ARG;
-  } else if (status == NULL) {
+  if ((flag == NULL) || (status == NULL)) {
     retval = MPI_ERR_ARG;
   } else if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
@@ -1458,7 +1445,7 @@ int PMPI_Wait(MPI_Request * request, MPI_Status * status)
     retval = MPI_SUCCESS;
   } else {
 
-    int rank = request && (*request)->comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+    int rank = (request!=NULL && (*request)->comm != MPI_COMM_NULL) ? smpi_process_index() : -1;
 
     int src_traced = (*request)->src;
     int dst_traced = (*request)->dst;
@@ -1494,11 +1481,14 @@ int PMPI_Waitany(int count, MPI_Request requests[], int *index, MPI_Status * sta
   smpi_bench_end();
   //save requests information for tracing
   int i;
-  int *srcs = xbt_new0(int, count);
-  int *dsts = xbt_new0(int, count);
-  int *recvs = xbt_new0(int, count);
-  MPI_Comm *comms = xbt_new0(MPI_Comm, count);
-
+  int *srcs = NULL, *dsts = NULL, *recvs = NULL;
+  MPI_Comm* comms = NULL;
+  if(count>0){
+    srcs = xbt_new0(int, count);
+    dsts = xbt_new0(int, count);
+    recvs = xbt_new0(int, count);
+    comms = xbt_new0(MPI_Comm, count);
+  }
   for (i = 0; i < count; i++) {
     MPI_Request req = requests[i];      //already received requests are no longer valid
     if (req) {
@@ -1549,7 +1539,6 @@ int PMPI_Waitall(int count, MPI_Request requests[], MPI_Status status[])
   int *valid = xbt_new0(int, count);
   MPI_Comm *comms = xbt_new0(MPI_Comm, count);
 
-  //int valid_count = 0;
   for (i = 0; i < count; i++) {
     MPI_Request req = requests[i];
     if(req!=MPI_REQUEST_NULL){
@@ -1572,7 +1561,6 @@ int PMPI_Waitall(int count, MPI_Request requests[], MPI_Status status[])
 
   for (i = 0; i < count; i++) {
     if(valid[i]){
-    //int src_traced = srcs[*index];
     //the src may not have been known at the beginning of the recv (MPI_ANY_SOURCE)
       int src_traced = srcs[i];
       int dst_traced = dsts[i];
@@ -1647,15 +1635,15 @@ int PMPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm c
   int known=0;
   extra->datatype1 = encode_datatype(datatype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(datatype);
   extra->send_size = count*dt_size_send;
   TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__, extra);
-
+  if(smpi_comm_size(comm)>1)
     mpi_coll_bcast_fun(buf, count, datatype, root, comm);
-    retval = MPI_SUCCESS;
+  retval = MPI_SUCCESS;
 
-    TRACE_smpi_collective_out(rank, root_traced, __FUNCTION__);
+  TRACE_smpi_collective_out(rank, root_traced, __FUNCTION__);
   }
 
   smpi_bench_begin();
@@ -1702,7 +1690,7 @@ int PMPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbu
     retval = MPI_ERR_COUNT;
   } else {
 
-    char* sendtmpbuf = (char*) sendbuf;
+    char* sendtmpbuf = static_cast<char*>(sendbuf);
     int sendtmpcount = sendcount;
     MPI_Datatype sendtmptype = sendtype;
     if( (smpi_comm_rank(comm) == root) && (sendbuf == MPI_IN_PLACE )) {
@@ -1717,12 +1705,12 @@ int PMPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbu
   int known=0;
   extra->datatype1 = encode_datatype(sendtmptype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(sendtmptype);
   extra->send_size = sendtmpcount*dt_size_send;
   extra->datatype2 = encode_datatype(recvtype, &known);
   int dt_size_recv = 1;
-  if((smpi_comm_rank(comm)==root) && !known)
+  if((smpi_comm_rank(comm)==root) && known==0)
     dt_size_recv = smpi_datatype_size(recvtype);
   extra->recv_size = recvcount*dt_size_recv;
 
@@ -1755,7 +1743,7 @@ int PMPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recv
   } else if (recvcounts == NULL || displs == NULL) {
     retval = MPI_ERR_ARG;
   } else {
-    char* sendtmpbuf = (char*) sendbuf;
+    char* sendtmpbuf = static_cast<char*>(sendbuf);
     int sendtmpcount = sendcount;
     MPI_Datatype sendtmptype = sendtype;
     if( (smpi_comm_rank(comm) == root) && (sendbuf == MPI_IN_PLACE )) {
@@ -1774,12 +1762,12 @@ int PMPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recv
   int known=0;
   extra->datatype1 = encode_datatype(sendtmptype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(sendtype);
   extra->send_size = sendtmpcount*dt_size_send;
   extra->datatype2 = encode_datatype(recvtype, &known);
   int dt_size_recv = 1;
-  if(!known)
+  if(known==0)
     dt_size_recv = smpi_datatype_size(recvtype);
   if((smpi_comm_rank(comm)==root)){
   extra->recvcounts= xbt_new(int,size);
@@ -1814,7 +1802,7 @@ int PMPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype,
     retval = MPI_ERR_COUNT;
   } else {
     if(sendbuf == MPI_IN_PLACE) {
-      sendbuf=((char*)recvbuf)+smpi_datatype_get_extent(recvtype)*recvcount*smpi_comm_rank(comm);
+      sendbuf=static_cast<char*>(recvbuf)+smpi_datatype_get_extent(recvtype)*recvcount*smpi_comm_rank(comm);
       sendcount=recvcount;
       sendtype=recvtype;
     }
@@ -1824,12 +1812,12 @@ int PMPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype,
   int known=0;
   extra->datatype1 = encode_datatype(sendtype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(sendtype);
   extra->send_size = sendcount*dt_size_send;
   extra->datatype2 = encode_datatype(recvtype, &known);
   int dt_size_recv = 1;
-  if(!known)
+  if(known==0)
     dt_size_recv = smpi_datatype_size(recvtype);
   extra->recv_size = recvcount*dt_size_recv;
 
@@ -1862,7 +1850,7 @@ int PMPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
   } else {
 
     if(sendbuf == MPI_IN_PLACE) {
-      sendbuf=((char*)recvbuf)+smpi_datatype_get_extent(recvtype)*displs[smpi_comm_rank(comm)];
+      sendbuf=static_cast<char*>(recvbuf)+smpi_datatype_get_extent(recvtype)*displs[smpi_comm_rank(comm)];
       sendcount=recvcounts[smpi_comm_rank(comm)];
       sendtype=recvtype;
     }
@@ -1875,12 +1863,12 @@ int PMPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
   int known=0;
   extra->datatype1 = encode_datatype(sendtype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(sendtype);
   extra->send_size = sendcount*dt_size_send;
   extra->datatype2 = encode_datatype(recvtype, &known);
   int dt_size_recv = 1;
-  if(!known)
+  if(known==0)
     dt_size_recv = smpi_datatype_size(recvtype);
   extra->recvcounts= xbt_new(int, size);
   for(i=0; i< size; i++)//copy data to avoid bad free
@@ -1926,12 +1914,12 @@ int PMPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype,
   int known=0;
   extra->datatype1 = encode_datatype(sendtype, &known);
   int dt_size_send = 1;
-  if((smpi_comm_rank(comm)==root) && !known)
+  if((smpi_comm_rank(comm)==root) && known==0)
     dt_size_send = smpi_datatype_size(sendtype);
   extra->send_size = sendcount*dt_size_send;
   extra->datatype2 = encode_datatype(recvtype, &known);
   int dt_size_recv = 1;
-  if(!known)
+  if(known==0)
     dt_size_recv = smpi_datatype_size(recvtype);
   extra->recv_size = recvcount*dt_size_recv;
   TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__,extra);
@@ -1975,7 +1963,7 @@ int PMPI_Scatterv(void *sendbuf, int *sendcounts, int *displs,
   int known=0;
   extra->datatype1 = encode_datatype(sendtype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(sendtype);
   if((smpi_comm_rank(comm)==root)){
   extra->sendcounts= xbt_new(int, size);
@@ -1984,7 +1972,7 @@ int PMPI_Scatterv(void *sendbuf, int *sendcounts, int *displs,
   }
   extra->datatype2 = encode_datatype(recvtype, &known);
   int dt_size_recv = 1;
-  if(!known)
+  if(known==0)
     dt_size_recv = smpi_datatype_size(recvtype);
   extra->recv_size = recvcount*dt_size_recv;
   TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__,extra);
@@ -2017,7 +2005,7 @@ int PMPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
   int known=0;
   extra->datatype1 = encode_datatype(datatype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(datatype);
   extra->send_size = count*dt_size_send;
   extra->root = root_traced;
@@ -2062,9 +2050,9 @@ int PMPI_Allreduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatyp
     retval = MPI_ERR_OP;
   } else {
 
-    char* sendtmpbuf = (char*) sendbuf;
+    char* sendtmpbuf = static_cast<char*>(sendbuf);
     if( sendbuf == MPI_IN_PLACE ) {
-      sendtmpbuf = (char *)xbt_malloc(count*smpi_datatype_get_extent(datatype));
+      sendtmpbuf = static_cast<char*>(xbt_malloc(count*smpi_datatype_get_extent(datatype)));
       smpi_datatype_copy(recvbuf, count, datatype,sendtmpbuf, count, datatype);
     }
   int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
@@ -2073,7 +2061,7 @@ int PMPI_Allreduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatyp
   int known=0;
   extra->datatype1 = encode_datatype(datatype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(datatype);
   extra->send_size = count*dt_size_send;
 
@@ -2111,7 +2099,7 @@ int PMPI_Scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MP
   int known=0;
   extra->datatype1 = encode_datatype(datatype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(datatype);
   extra->send_size = count*dt_size_send;
 
@@ -2145,7 +2133,7 @@ int PMPI_Exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
   int known=0;
   extra->datatype1 = encode_datatype(datatype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(datatype);
   extra->send_size = count*dt_size_send;
   TRACE_smpi_collective_in(rank, -1, __FUNCTION__,extra);
@@ -2182,7 +2170,7 @@ int PMPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts, MPI_Datat
   int known=0;
   extra->datatype1 = encode_datatype(datatype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(datatype);
   extra->send_size = 0;
   extra->recvcounts= xbt_new(int, size);
@@ -2227,7 +2215,7 @@ int PMPI_Reduce_scatter_block(void *sendbuf, void *recvbuf, int recvcount,
   int known=0;
   extra->datatype1 = encode_datatype(datatype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(datatype);
   extra->send_size = 0;
   extra->recvcounts= xbt_new(int, count);
@@ -2236,8 +2224,9 @@ int PMPI_Reduce_scatter_block(void *sendbuf, void *recvbuf, int recvcount,
 
   TRACE_smpi_collective_in(rank, -1, __FUNCTION__,extra);
 
-  int* recvcounts=(int*)xbt_malloc(count);
-    for (i=0; i<count;i++)recvcounts[i]=recvcount;
+  int* recvcounts=static_cast<int*>(xbt_malloc(count));
+    for (i=0; i<count;i++)
+      recvcounts[i]=recvcount;
     mpi_coll_reduce_scatter_fun(sendbuf, recvbuf, recvcounts, datatype,  op, comm);
     xbt_free(recvcounts);
     retval = MPI_SUCCESS;
@@ -2267,12 +2256,12 @@ int PMPI_Alltoall(void *sendbuf, int sendcount, MPI_Datatype sendtype,
   extra->type = TRACING_ALLTOALL;
   int known=0;
   extra->datatype1 = encode_datatype(sendtype, &known);
-  if(!known)
+  if(known==0)
     extra->send_size = sendcount*smpi_datatype_size(sendtype);
   else
     extra->send_size = sendcount;
   extra->datatype2 = encode_datatype(recvtype, &known);
-  if(!known)
+  if(known==0)
     extra->recv_size = recvcount*smpi_datatype_size(recvtype);
   else
     extra->recv_size = recvcount;
@@ -2313,11 +2302,11 @@ int PMPI_Alltoallv(void *sendbuf, int *sendcounts, int *senddisps,MPI_Datatype s
   int known=0;
   extra->datatype1 = encode_datatype(sendtype, &known);
   int dt_size_send = 1;
-  if(!known)
+  if(known==0)
     dt_size_send = smpi_datatype_size(sendtype);
   int dt_size_recv = 1;
   extra->datatype2 = encode_datatype(recvtype, &known);
-  if(!known)
+  if(known==0)
     dt_size_recv = smpi_datatype_size(recvtype);
   for(i=0; i< size; i++){//copy data to avoid bad free
     extra->send_size += sendcounts[i]*dt_size_send;
@@ -2463,8 +2452,9 @@ int PMPI_Type_create_indexed_block(int count, int blocklength, int* indices, MPI
   } else if (count<0){
     retval = MPI_ERR_COUNT;
   } else {
-    int* blocklens=(int*)xbt_malloc(blocklength*count);
-    for (i=0; i<count;i++)blocklens[i]=blocklength;
+    int* blocklens=static_cast<int*>(xbt_malloc(blocklength*count));
+    for (i=0; i<count;i++)
+      blocklens[i]=blocklength;
     retval = smpi_datatype_indexed(count, blocklens, indices, old_type, new_type);
     xbt_free(blocklens);
   }
@@ -2635,7 +2625,7 @@ int PMPI_Type_create_resized(MPI_Datatype oldtype,MPI_Aint lb, MPI_Aint extent,
     MPI_Datatype types[3] = { MPI_LB, oldtype, MPI_UB };
 
     s_smpi_mpi_struct_t* subtype = smpi_datatype_struct_create( blocks, disps, 3, types);
-    smpi_datatype_create(newtype,oldtype->size, lb, lb + extent, 1 , subtype, DT_FLAG_VECTOR);
+    smpi_datatype_create(newtype,oldtype->size, lb, lb + extent, sizeof(s_smpi_mpi_struct_t) , subtype, DT_FLAG_VECTOR);
 
     (*newtype)->flags &= ~DT_FLAG_COMMITED;
     return MPI_SUCCESS;
@@ -2702,6 +2692,7 @@ int PMPI_Win_get_group(MPI_Win  win, MPI_Group * group){
     retval = MPI_ERR_WIN;
   }else {
     smpi_mpi_win_get_group(win, group);
+    smpi_group_use(*group);
   }
   return retval;
 }
@@ -2734,9 +2725,8 @@ int PMPI_Get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
     retval = MPI_ERR_RANK;
   } else if (target_disp <0){
       retval = MPI_ERR_ARG;
-  } else if (origin_count < 0 || target_count < 0) {
-    retval = MPI_ERR_COUNT;
-  } else if (origin_addr==NULL && origin_count > 0){
+  } else if ((origin_count < 0 || target_count < 0) ||
+             (origin_addr==NULL && origin_count > 0)){
     retval = MPI_ERR_COUNT;
   } else if ((!is_datatype_valid(origin_datatype)) || (!is_datatype_valid(target_datatype))) {
     retval = MPI_ERR_TYPE;
@@ -2768,9 +2758,8 @@ int PMPI_Put( void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
     retval = MPI_ERR_RANK;
   } else if (target_disp <0){
     retval = MPI_ERR_ARG;
-  } else if (origin_count < 0 || target_count < 0) {
-    retval = MPI_ERR_COUNT;
-  } else if (origin_addr==NULL && origin_count > 0){
+  } else if ((origin_count < 0 || target_count < 0) ||
+            (origin_addr==NULL && origin_count > 0)){
     retval = MPI_ERR_COUNT;
   } else if ((!is_datatype_valid(origin_datatype)) || (!is_datatype_valid(target_datatype))) {
     retval = MPI_ERR_TYPE;
@@ -2803,9 +2792,8 @@ int PMPI_Accumulate( void *origin_addr, int origin_count, MPI_Datatype origin_da
     retval = MPI_ERR_RANK;
   } else if (target_disp <0){
     retval = MPI_ERR_ARG;
-  } else if (origin_count < 0 || target_count < 0) {
-    retval = MPI_ERR_COUNT;
-  } else if (origin_addr==NULL && origin_count > 0){
+  } else if ((origin_count < 0 || target_count < 0) ||
+             (origin_addr==NULL && origin_count > 0)){
     retval = MPI_ERR_COUNT;
   } else if ((!is_datatype_valid(origin_datatype)) ||
             (!is_datatype_valid(target_datatype))) {
@@ -2902,10 +2890,10 @@ int PMPI_Win_wait(MPI_Win win){
 
 int PMPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr){
   void *ptr = xbt_malloc(size);
-  if(!ptr)
+  if(ptr==NULL)
     return MPI_ERR_NO_MEM;
   else {
-    *(void **)baseptr = ptr;
+    *static_cast<void**>(baseptr) = ptr;
     return MPI_SUCCESS;
   }
 }
@@ -3034,23 +3022,23 @@ int PMPI_Attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag) {
   case MPI_IO:
   case MPI_APPNUM:
     *flag = 1;
-    *(int**)attr_value = &zero;
+    *static_cast<int**>(attr_value) = &zero;
     return MPI_SUCCESS;
   case MPI_UNIVERSE_SIZE:
     *flag = 1;
-    *(int**)attr_value = &smpi_universe_size;
+    *static_cast<int**>(attr_value) = &smpi_universe_size;
     return MPI_SUCCESS;
   case MPI_LASTUSEDCODE:
     *flag = 1;
-    *(int**)attr_value = &last_used_code;
+    *static_cast<int**>(attr_value) = &last_used_code;
     return MPI_SUCCESS;
   case MPI_TAG_UB:
     *flag=1;
-    *(int**)attr_value = &tag_ub;
+    *static_cast<int**>(attr_value) = &tag_ub;
     return MPI_SUCCESS;
   case MPI_WTIME_IS_GLOBAL:
     *flag = 1;
-    *(int**)attr_value = &one;
+    *static_cast<int**>(attr_value) = &one;
     return MPI_SUCCESS;
   default:
     return smpi_comm_attr_get(comm, keyval, attr_value, flag);
@@ -3161,8 +3149,9 @@ int PMPI_Info_get(MPI_Info info,char *key,int valuelen, char *value, int *flag){
     return MPI_ERR_ARG;
   if (value == NULL)
     return MPI_ERR_INFO_VALUE;
-  char* tmpvalue=(char*)xbt_dict_get_or_null(info->info_dict, key);
+  char* tmpvalue=static_cast<char*>(xbt_dict_get_or_null(info->info_dict, key));
   if(tmpvalue){
+    memset(value, 0, valuelen);
     memcpy(value,tmpvalue, (strlen(tmpvalue) + 1 < static_cast<size_t>(valuelen)) ? strlen(tmpvalue) + 1 : valuelen);
     *flag=true;
   }
@@ -3174,11 +3163,12 @@ int PMPI_Info_dup(MPI_Info info, MPI_Info *newinfo){
     return MPI_ERR_ARG;
   *newinfo = xbt_new(s_smpi_mpi_info_t, 1);
   (*newinfo)->info_dict= xbt_dict_new_homogeneous(NULL);
+  (*newinfo)->refcount=1;
   xbt_dict_cursor_t cursor = NULL;
   int *key;
   void* data;
   xbt_dict_foreach(info->info_dict,cursor,key,data){
-    xbt_dict_set((*newinfo)->info_dict, (char*)key, data, NULL);
+    xbt_dict_set((*newinfo)->info_dict, reinterpret_cast<char*>(key), data, NULL);
   }
   return MPI_SUCCESS;
 }
@@ -3213,7 +3203,8 @@ int PMPI_Info_get_nthkey( MPI_Info info, int n, char *key){
   int num=0;
   xbt_dict_foreach(info->info_dict,cursor,keyn,data){
     if(num==n){
-     strcpy(key,keyn);
+      strncpy(key,keyn,strlen(keyn)+1);
+      xbt_dict_cursor_free(&cursor);
       return MPI_SUCCESS;
     }
     num++;
@@ -3223,7 +3214,7 @@ int PMPI_Info_get_nthkey( MPI_Info info, int n, char *key){
 
 int PMPI_Info_get_valuelen( MPI_Info info, char *key, int *valuelen, int *flag){
   *flag=false;
-  if (info == NULL || key == NULL || valuelen==NULL || *valuelen <0)
+  if (info == NULL || key == NULL || valuelen==NULL)
     return MPI_ERR_ARG;
   char* tmpvalue=(char*)xbt_dict_get_or_null(info->info_dict, key);
   if(tmpvalue){
@@ -3266,436 +3257,3 @@ int PMPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int* size)
   return MPI_SUCCESS;
 }
 
-
-/* The following calls are not yet implemented and will fail at runtime. */
-/* Once implemented, please move them above this notice. */
-
-#define NOT_YET_IMPLEMENTED {                                           \
-    XBT_WARN("Not yet implemented : %s. Please contact the Simgrid team if support is needed", __FUNCTION__); \
-    return MPI_SUCCESS;                                                 \
-  }
-
-MPI_Errhandler PMPI_Errhandler_f2c(MPI_Fint errhandler){
-  NOT_YET_IMPLEMENTED
-}
-
-MPI_Fint PMPI_Errhandler_c2f(MPI_Errhandler errhandler){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Cart_map(MPI_Comm comm_old, int ndims, int* dims, int* periods, int* newrank) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Graph_create(MPI_Comm comm_old, int nnodes, int* index, int* edges, int reorder, MPI_Comm* comm_graph) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int* index, int* edges) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Graph_map(MPI_Comm comm_old, int nnodes, int* index, int* edges, int* newrank) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int* neighbors) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Graph_neighbors_count(MPI_Comm comm, int rank, int* nneighbors) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Graphdims_get(MPI_Comm comm, int* nnodes, int* nedges) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Topo_test(MPI_Comm comm, int* top_type) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Errhandler_create(MPI_Handler_function* function, MPI_Errhandler* errhandler) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Errhandler_free(MPI_Errhandler* errhandler) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler* errhandler) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Error_string(int errorcode, char* string, int* resultlen) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler* errhandler) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Cancel(MPI_Request* request) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Buffer_attach(void* buffer, int size) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Buffer_detach(void* buffer, int* size) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_test_inter(MPI_Comm comm, int* flag) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Pcontrol(const int level )
-{
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Intercomm_create(MPI_Comm local_comm, int local_leader, MPI_Comm peer_comm, int remote_leader, int tag,
-                          MPI_Comm* comm_out) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Intercomm_merge(MPI_Comm comm, int high, MPI_Comm* comm_out) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Bsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Bsend_init(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm,
-                    MPI_Request* request) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Ibsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_remote_group(MPI_Comm comm, MPI_Group* group) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_remote_size(MPI_Comm comm, int* size) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Rsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Rsend_init(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm,
-                    MPI_Request* request) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Irsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Test_cancelled(MPI_Status* status, int* flag) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Pack_external_size(char *datarep, int incount, MPI_Datatype datatype, MPI_Aint *size){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Pack_external(char *datarep, void *inbuf, int incount, MPI_Datatype datatype, void *outbuf, MPI_Aint outcount,
-                       MPI_Aint *position){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Unpack_external(char *datarep, void *inbuf, MPI_Aint insize, MPI_Aint *position, void *outbuf, int outcount,
-                         MPI_Datatype datatype){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Get_elements(MPI_Status* status, MPI_Datatype datatype, int* elements) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Type_get_envelope(MPI_Datatype datatype, int *num_integers, int *num_addresses, int *num_datatypes,
-                           int *combiner){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Type_get_contents(MPI_Datatype datatype, int max_integers, int max_addresses, int max_datatypes,
-                           int* array_of_integers, MPI_Aint* array_of_addresses, MPI_Datatype* array_of_datatypes){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Type_create_darray(int size, int rank, int ndims, int* array_of_gsizes, int* array_of_distribs,
-                            int* array_of_dargs, int* array_of_psizes,int order, MPI_Datatype oldtype,
-                            MPI_Datatype *newtype) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Type_create_subarray(int ndims,int *array_of_sizes, int *array_of_subsizes, int *array_of_starts, int order,
-                              MPI_Datatype oldtype, MPI_Datatype *newtype){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Type_match_size(int typeclass,int size,MPI_Datatype *datatype){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Alltoallw( void *sendbuf, int *sendcnts, int *sdispls, MPI_Datatype *sendtypes,
-                    void *recvbuf, int *recvcnts, int *rdispls, MPI_Datatype *recvtypes, MPI_Comm comm){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_set_name(MPI_Comm comm, char* name){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm * newcomm){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_set_info (MPI_Comm comm, MPI_Info info){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_get_info (MPI_Comm comm, MPI_Info* info){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_create_errhandler( MPI_Comm_errhandler_fn *function, MPI_Errhandler *errhandler){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Add_error_class( int *errorclass){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Add_error_code(  int errorclass, int *errorcode){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Add_error_string( int errorcode, char *string){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_call_errhandler(MPI_Comm comm,int errorcode){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Request_get_status( MPI_Request request, int *flag, MPI_Status *status){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Grequest_start(MPI_Grequest_query_function *query_fn, MPI_Grequest_free_function *free_fn,
-                        MPI_Grequest_cancel_function *cancel_fn, void *extra_state, MPI_Request *request){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Grequest_complete( MPI_Request request){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Status_set_cancelled(MPI_Status *status,int flag){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Status_set_elements( MPI_Status *status, MPI_Datatype datatype, int count){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_connect( char *port_name, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *newcomm){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Publish_name( char *service_name, MPI_Info info, char *port_name){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Unpublish_name( char *service_name, MPI_Info info, char *port_name){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Lookup_name( char *service_name, MPI_Info info, char *port_name){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_join( int fd, MPI_Comm *intercomm){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Open_port( MPI_Info info, char *port_name){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Close_port(char *port_name){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_accept( char *port_name, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *newcomm){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_spawn(char *command, char **argv, int maxprocs, MPI_Info info, int root, MPI_Comm comm,
-                    MPI_Comm *intercomm, int* array_of_errcodes){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_spawn_multiple( int count, char **array_of_commands, char*** array_of_argv,
-                              int* array_of_maxprocs, MPI_Info* array_of_info, int root,
-                              MPI_Comm comm, MPI_Comm *intercomm, int* array_of_errcodes){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Comm_get_parent( MPI_Comm *parent){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win) {
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Win_test(MPI_Win win, int *flag){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Win_unlock(int rank, MPI_Win win){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_get_errhandler (MPI_File file, MPI_Errhandler *errhandler){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_open(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_close(MPI_File *fh){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_delete(const char *filename, MPI_Info info){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_set_size(MPI_File fh, MPI_Offset size){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_get_size(MPI_File fh, MPI_Offset *size){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, const char *datarep, MPI_Info info){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype, char *datarep){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void * buf, int count,
-                         MPI_Datatype datatype, MPI_Status *status){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_write_at(MPI_File fh, MPI_Offset offset, const void * buf, int count,
-                      MPI_Datatype datatype, MPI_Status *status){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_write_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count, MPI_Datatype datatype, MPI_Status *status){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_set_atomicity(MPI_File fh, int flag){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_get_atomicity(MPI_File fh, int *flag){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_sync(MPI_File fh){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count,
-                               MPI_Datatype datatype){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, const void *buf, int count,MPI_Datatype datatype){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_write_at_all_end(MPI_File fh, const void *buf, MPI_Status *status){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_read_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_write_all_begin(MPI_File fh, const void *buf, int count, MPI_Datatype datatype){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_write_all_end(MPI_File fh, const void *buf, MPI_Status *status){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_read_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_write_ordered_begin(MPI_File fh, const void *buf, int count, MPI_Datatype datatype){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_File_write_ordered_end(MPI_File fh, const void *buf, MPI_Status *status){
-  NOT_YET_IMPLEMENTED
-}
-
-