#ifndef SMPI_PRIVATE_HPP
#define SMPI_PRIVATE_HPP
-#include "simgrid/s4u/Barrier.hpp"
#include "smpi/smpi.h"
#include "smpi/smpi_helpers_internal.h"
#include "src/instr/instr_smpi.hpp"
void mpi_wait_(int* request, MPI_Status* status, int* ierr);
void mpi_waitany_(int* count, int* requests, int* index, MPI_Status* status, int* ierr);
void mpi_waitall_(int* count, int* requests, MPI_Status* status, int* ierr);
-
+void mpi_free_mem_(void *baseptr, int* ierr);
void mpi_barrier_(int* comm, int* ierr);
void mpi_bcast_(void* buf, int* count, int* datatype, int* root, int* comm, int* ierr);
void mpi_reduce_(void* sendbuf, void* recvbuf, int* count, int* datatype, int* op, int* root, int* comm, int* ierr);
+void mpi_alloc_mem_(int* size, int* info, void *baseptr, int* ierr);
void mpi_allreduce_(void* sendbuf, void* recvbuf, int* count, int* datatype, int* op, int* comm, int* ierr);
void mpi_reduce_scatter_(void* sendbuf, void* recvbuf, int* recvcounts, int* datatype, int* op, int* comm, int* ierr);
void mpi_reduce_scatter_block_(void* sendbuf, void* recvbuf, int* recvcount, int* datatype, int* op, int* comm,
#define CHECK_NEGATIVE(num, err, val) \
CHECK_ARGS((val) < 0, (err), \
"%s: param %d %s cannot be negative", __func__, (num), _XBT_STRINGIFY(val));
+#define CHECK_NEGATIVE_OR_ZERO(num, err, val) \
+ CHECK_ARGS((val) <= 0, (err), \
+ "%s: param %d %s cannot be negative or 0", __func__, (num), _XBT_STRINGIFY(val));
#define CHECK_COMM2(num, comm) \
CHECK_MPI_NULL((num), MPI_COMM_NULL, MPI_ERR_COMM, (comm))
-#define CHECK_DELETED(num, err, obj) \
+#define CHECK_DELETED(num, err, obj) \
CHECK_ARGS((obj)->deleted(), (err), "%s: param %d %s has already been freed", __func__, (num), _XBT_STRINGIFY(obj));
#define CHECK_COMM(num) \
CHECK_COMM2((num), comm) \
#define CHECK_PROC_RMA(num,proc,win) \
CHECK_MPI_NULL((num), MPI_PROC_NULL, MPI_SUCCESS, (proc)) \
CHECK_RANK(num, proc, win->comm())
+#define CHECK_NOT_IN_PLACE_ROOT(num, buf) \
+ CHECK_ARGS((buf == MPI_IN_PLACE), MPI_ERR_BUFFER, \
+ "%s: param %d %s cannot be MPI_IN_PLACE for rank %d with root %d", __func__, (num), _XBT_STRINGIFY(buf), \
+ rank, root);
+#define CHECK_NOT_IN_PLACE(num, buf) \
+ CHECK_ARGS((buf == MPI_IN_PLACE), MPI_ERR_BUFFER, \
+ "%s: param %d %s cannot be MPI_IN_PLACE for rank %d", __func__, (num), _XBT_STRINGIFY(buf), \
+ rank);
#endif