/* PMPI User level calls */
-int PMPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm)
-{
- return PMPI_Ibcast(buf, count, datatype, root, comm, MPI_REQUEST_IGNORED);
-}
-
int PMPI_Barrier(MPI_Comm comm)
{
return PMPI_Ibarrier(comm, MPI_REQUEST_IGNORED);
return retval;
}
+int PMPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm)
+{
+ return PMPI_Ibcast(buf, count, datatype, root, comm, MPI_REQUEST_IGNORED);
+}
+
int PMPI_Ibcast(void *buf, int count, MPI_Datatype datatype,
int root, MPI_Comm comm, MPI_Request* request)
{
- int retval = 0;
- smpi_bench_end();
if (comm == MPI_COMM_NULL) {
- retval = MPI_ERR_COMM;
+ return MPI_ERR_COMM;
+ } if (buf == nullptr && count > 0) {
+ return MPI_ERR_BUFFER;
} else if (datatype == MPI_DATATYPE_NULL || not datatype->is_valid()) {
- retval = MPI_ERR_TYPE;
+ return MPI_ERR_TYPE;
} else if (count < 0){
- retval = MPI_ERR_COUNT;
+ return MPI_ERR_COUNT;
} else if (root < 0 || root >= comm->size()){
- retval = MPI_ERR_ROOT;
+ return MPI_ERR_ROOT;
} else if (request == nullptr){
- retval = MPI_ERR_ARG;
+ return MPI_ERR_ARG;
} else {
+ smpi_bench_end();
int rank = simgrid::s4u::this_actor::get_pid();
TRACE_smpi_comm_in(rank, request==MPI_REQUEST_IGNORED?"PMPI_Bcast":"PMPI_Ibcast",
new simgrid::instr::CollTIData(request==MPI_REQUEST_IGNORED?"bcast":"ibcast", root, -1.0,
if(request!=MPI_REQUEST_IGNORED)
*request = MPI_REQUEST_NULL;
}
- retval = MPI_SUCCESS;
-
TRACE_smpi_comm_out(rank);
+ smpi_bench_begin();
+ return MPI_SUCCESS;
}
- smpi_bench_begin();
- return retval;
}
int PMPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbuf, int recvcount, MPI_Datatype recvtype,
int PMPI_Igather(void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPI_Comm comm, MPI_Request *request)
{
- int retval = 0;
-
- smpi_bench_end();
-
if (comm == MPI_COMM_NULL) {
- retval = MPI_ERR_COMM;
- } else if ((( sendbuf != MPI_IN_PLACE) && (sendtype == MPI_DATATYPE_NULL)) ||
+ return MPI_ERR_COMM;
+ } else if ((sendbuf == nullptr) || ((comm->rank() == root) && recvbuf == nullptr)) {
+ return MPI_ERR_BUFFER;
+ } else if (((sendbuf != MPI_IN_PLACE && sendcount > 0) && (sendtype == MPI_DATATYPE_NULL)) ||
((comm->rank() == root) && (recvtype == MPI_DATATYPE_NULL))){
- retval = MPI_ERR_TYPE;
+ return MPI_ERR_TYPE;
} else if ((( sendbuf != MPI_IN_PLACE) && (sendcount <0)) || ((comm->rank() == root) && (recvcount <0))){
- retval = MPI_ERR_COUNT;
+ return MPI_ERR_COUNT;
} else if (root < 0 || root >= comm->size()){
- retval = MPI_ERR_ROOT;
+ return MPI_ERR_ROOT;
} else if (request == nullptr){
- retval = MPI_ERR_ARG;
+ return MPI_ERR_ARG;
} else {
-
+ smpi_bench_end();
char* sendtmpbuf = static_cast<char*>(sendbuf);
int sendtmpcount = sendcount;
MPI_Datatype sendtmptype = sendtype;
else
simgrid::smpi::Colls::igather(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcount, recvtype, root, comm, request);
- retval = MPI_SUCCESS;
TRACE_smpi_comm_out(rank);
+ smpi_bench_begin();
+ return MPI_SUCCESS;
}
-
- smpi_bench_begin();
- return retval;
}
int PMPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs,
int PMPI_Igatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs,
MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request)
{
- int retval = 0;
-
- smpi_bench_end();
-
if (comm == MPI_COMM_NULL) {
- retval = MPI_ERR_COMM;
+ return MPI_ERR_COMM;
+ } else if ((sendbuf == nullptr && sendcount > 0) || ((comm->rank() == root) && recvbuf == nullptr)) {
+ return MPI_ERR_BUFFER;
} else if ((( sendbuf != MPI_IN_PLACE) && (sendtype == MPI_DATATYPE_NULL)) ||
((comm->rank() == root) && (recvtype == MPI_DATATYPE_NULL))){
- retval = MPI_ERR_TYPE;
+ return MPI_ERR_TYPE;
} else if (( sendbuf != MPI_IN_PLACE) && (sendcount <0)){
- retval = MPI_ERR_COUNT;
+ return MPI_ERR_COUNT;
} else if ((comm->rank() == root) && (recvcounts == nullptr || displs == nullptr)) {
- retval = MPI_ERR_ARG;
+ return MPI_ERR_ARG;
} else if (root < 0 || root >= comm->size()){
- retval = MPI_ERR_ROOT;
+ return MPI_ERR_ROOT;
} else if (request == nullptr){
- retval = MPI_ERR_ARG;
+ return MPI_ERR_ARG;
} else {
+ for (int i = 0; i < comm->size(); i++){
+ if((comm->rank() == root) && (recvcounts[i]<0))
+ return MPI_ERR_COUNT;
+ }
+
+ smpi_bench_end();
char* sendtmpbuf = static_cast<char*>(sendbuf);
int sendtmpcount = sendcount;
MPI_Datatype sendtmptype = sendtype;
dt_size_recv, trace_recvcounts, simgrid::smpi::Datatype::encode(sendtmptype),
simgrid::smpi::Datatype::encode(recvtype)));
if(request == MPI_REQUEST_IGNORED)
- retval = simgrid::smpi::Colls::gatherv(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcounts, displs, recvtype, root, comm);
+ simgrid::smpi::Colls::gatherv(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcounts, displs, recvtype, root, comm);
else
- retval = simgrid::smpi::Colls::igatherv(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcounts, displs, recvtype, root, comm, request);
+ simgrid::smpi::Colls::igatherv(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcounts, displs, recvtype, root, comm, request);
TRACE_smpi_comm_out(rank);
+ smpi_bench_begin();
+ return MPI_SUCCESS;
}
-
- smpi_bench_begin();
- return retval;
}
int PMPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype,
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
+ } else if ((sendbuf == nullptr && sendcount > 0) || (recvbuf == nullptr)){
+ retval = MPI_ERR_BUFFER;
} else if ((( sendbuf != MPI_IN_PLACE) && (sendtype == MPI_DATATYPE_NULL)) ||
(recvtype == MPI_DATATYPE_NULL)){
retval = MPI_ERR_TYPE;
int PMPI_Iallgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int *recvcounts, int *displs, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request* request)
{
- int retval = 0;
-
- smpi_bench_end();
-
if (comm == MPI_COMM_NULL) {
- retval = MPI_ERR_COMM;
+ return MPI_ERR_COMM;
+ } else if ((sendbuf == nullptr && sendcount > 0) || (recvbuf == nullptr)){
+ return MPI_ERR_BUFFER;
} else if (((sendbuf != MPI_IN_PLACE) && (sendtype == MPI_DATATYPE_NULL)) || (recvtype == MPI_DATATYPE_NULL)) {
- retval = MPI_ERR_TYPE;
+ return MPI_ERR_TYPE;
} else if (( sendbuf != MPI_IN_PLACE) && (sendcount <0)){
- retval = MPI_ERR_COUNT;
+ return MPI_ERR_COUNT;
} else if (recvcounts == nullptr || displs == nullptr) {
- retval = MPI_ERR_ARG;
+ return MPI_ERR_ARG;
} else if (request == nullptr){
- retval = MPI_ERR_ARG;
+ return MPI_ERR_ARG;
} else {
+ for (int i = 0; i < comm->size(); i++){ // copy data to avoid bad free
+ if (recvcounts[i] < 0)
+ return MPI_ERR_COUNT;
+ }
+ smpi_bench_end();
if(sendbuf == MPI_IN_PLACE) {
sendbuf=static_cast<char*>(recvbuf)+recvtype->get_extent()*displs[comm->rank()];
sendcount=recvcounts[comm->rank()];
int dt_size_recv = recvtype->is_replayable() ? 1 : recvtype->size();
std::vector<int>* trace_recvcounts = new std::vector<int>;
- for (int i = 0; i < comm->size(); i++) // copy data to avoid bad free
+ for (int i = 0; i < comm->size(); i++){ // copy data to avoid bad free
trace_recvcounts->push_back(recvcounts[i] * dt_size_recv);
+ }
TRACE_smpi_comm_in(rank, request==MPI_REQUEST_IGNORED?"PMPI_Allgatherv":"PMPI_Iallgatherv",
new simgrid::instr::VarCollTIData(
simgrid::smpi::Colls::allgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm);
else
simgrid::smpi::Colls::iallgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm, request);
- retval = MPI_SUCCESS;
TRACE_smpi_comm_out(rank);
+ smpi_bench_begin();
+ return MPI_SUCCESS;
}
-
- smpi_bench_begin();
- return retval;
}
int PMPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype,
int PMPI_Iscatter(void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request* request)
{
- int retval = 0;
-
- smpi_bench_end();
-
if (comm == MPI_COMM_NULL) {
- retval = MPI_ERR_COMM;
+ return MPI_ERR_COMM;
} else if (((comm->rank() == root) && (sendtype == MPI_DATATYPE_NULL || not sendtype->is_valid())) ||
((recvbuf != MPI_IN_PLACE) && (recvtype == MPI_DATATYPE_NULL || not recvtype->is_valid()))) {
- retval = MPI_ERR_TYPE;
+ return MPI_ERR_TYPE;
} else if (((comm->rank() == root) && (sendcount < 0)) ||
((recvbuf != MPI_IN_PLACE) && (recvcount < 0))) {
- retval = MPI_ERR_COUNT;
+ return MPI_ERR_COUNT;
} else if ((sendbuf == recvbuf) ||
- ((comm->rank()==root) && sendcount>0 && (sendbuf == nullptr))){
- retval = MPI_ERR_BUFFER;
+ ((comm->rank()==root) && sendcount>0 && (sendbuf == nullptr)) ||
+ (recvcount > 0 && recvbuf == nullptr)){
+ return MPI_ERR_BUFFER;
} else if (root < 0 || root >= comm->size()){
- retval = MPI_ERR_ROOT;
+ return MPI_ERR_ROOT;
} else if (request == nullptr){
- retval = MPI_ERR_ARG;
+ return MPI_ERR_ARG;
} else {
-
+ smpi_bench_end();
if (recvbuf == MPI_IN_PLACE) {
recvtype = sendtype;
recvcount = sendcount;
simgrid::smpi::Colls::scatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm);
else
simgrid::smpi::Colls::iscatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm, request);
- retval = MPI_SUCCESS;
TRACE_smpi_comm_out(rank);
+ smpi_bench_begin();
+ return MPI_SUCCESS;
}
-
- smpi_bench_begin();
- return retval;
}
int PMPI_Scatterv(void *sendbuf, int *sendcounts, int *displs,
int PMPI_Iscatterv(void *sendbuf, int *sendcounts, int *displs,
MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request)
{
- int retval = 0;
-
- smpi_bench_end();
-
if (comm == MPI_COMM_NULL) {
- retval = MPI_ERR_COMM;
+ return MPI_ERR_COMM;
} else if (sendcounts == nullptr || displs == nullptr) {
- retval = MPI_ERR_ARG;
+ return MPI_ERR_ARG;
} else if (((comm->rank() == root) && (sendtype == MPI_DATATYPE_NULL)) ||
((recvbuf != MPI_IN_PLACE) && (recvtype == MPI_DATATYPE_NULL))) {
- retval = MPI_ERR_TYPE;
+ return MPI_ERR_TYPE;
} else if (request == nullptr){
- retval = MPI_ERR_ARG;
+ return MPI_ERR_ARG;
} else if (recvbuf != MPI_IN_PLACE && recvcount < 0){
- retval = MPI_ERR_COUNT;
+ return MPI_ERR_COUNT;
} else if (root < 0 || root >= comm->size()){
- retval = MPI_ERR_ROOT;
+ return MPI_ERR_ROOT;
} else {
- if (recvbuf == MPI_IN_PLACE) {
+ if (comm->rank() == root){
+ if(recvbuf == MPI_IN_PLACE) {
recvtype = sendtype;
- if(sendcounts[comm->rank()]<0)
- return MPI_ERR_COUNT;
recvcount = sendcounts[comm->rank()];
+ }
+ for (int i = 0; i < comm->size(); i++){
+ if(sendcounts[i]<0)
+ return MPI_ERR_COUNT;
+ }
}
+ smpi_bench_end();
+
int rank = simgrid::s4u::this_actor::get_pid();
int dt_size_send = sendtype->is_replayable() ? 1 : sendtype->size();
if (comm->rank() == root) {
for (int i = 0; i < comm->size(); i++){ // copy data to avoid bad free
trace_sendcounts->push_back(sendcounts[i] * dt_size_send);
- if(sendcounts[i]<0)
- return MPI_ERR_COUNT;
- }
+ }
}
TRACE_smpi_comm_in(rank, request==MPI_REQUEST_IGNORED?"PMPI_Scatterv":"PMPI_Iscatterv",
recvtype->is_replayable() ? recvcount : recvcount * recvtype->size(), nullptr,
simgrid::smpi::Datatype::encode(sendtype), simgrid::smpi::Datatype::encode(recvtype)));
if(request == MPI_REQUEST_IGNORED)
- retval = simgrid::smpi::Colls::scatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm);
+ simgrid::smpi::Colls::scatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm);
else
- retval = simgrid::smpi::Colls::iscatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm, request);
-
+ simgrid::smpi::Colls::iscatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm, request);
TRACE_smpi_comm_out(rank);
+ smpi_bench_begin();
+ return MPI_SUCCESS;
}
- smpi_bench_begin();
- return retval;
}
int PMPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)
int PMPI_Ireduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm, MPI_Request* request)
{
- int retval = 0;
-
- smpi_bench_end();
-
if (comm == MPI_COMM_NULL) {
- retval = MPI_ERR_COMM;
+ return MPI_ERR_COMM;
+ } if ((sendbuf == nullptr && count > 0) || ((comm->rank() == root) && recvbuf == nullptr)) {
+ return MPI_ERR_BUFFER;
} else if (datatype == MPI_DATATYPE_NULL || not datatype->is_valid()){
- retval = MPI_ERR_TYPE;
+ return MPI_ERR_TYPE;
} else if (op == MPI_OP_NULL) {
- retval = MPI_ERR_OP;
+ return MPI_ERR_OP;
} else if (request == nullptr){
- retval = MPI_ERR_ARG;
+ return MPI_ERR_ARG;
} else if (root < 0 || root >= comm->size()){
- retval = MPI_ERR_ROOT;
+ return MPI_ERR_ROOT;
} else if (count < 0){
- retval = MPI_ERR_COUNT;
+ return MPI_ERR_COUNT;
} else {
+ smpi_bench_end();
int rank = simgrid::s4u::this_actor::get_pid();
TRACE_smpi_comm_in(rank, request==MPI_REQUEST_IGNORED ? "PMPI_Reduce":"PMPI_Ireduce",
else
simgrid::smpi::Colls::ireduce(sendbuf, recvbuf, count, datatype, op, root, comm, request);
-
- retval = MPI_SUCCESS;
TRACE_smpi_comm_out(rank);
+ smpi_bench_begin();
+ return MPI_SUCCESS;
}
-
- smpi_bench_begin();
- return retval;
}
int PMPI_Reduce_local(void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op){
int PMPI_Iallreduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
{
- int retval = 0;
-
- smpi_bench_end();
-
if (comm == MPI_COMM_NULL) {
- retval = MPI_ERR_COMM;
+ return MPI_ERR_COMM;
+ } if ((sendbuf == nullptr && count > 0) || (recvbuf == nullptr)) {
+ return MPI_ERR_BUFFER;
} else if (datatype == MPI_DATATYPE_NULL || not datatype->is_valid()) {
- retval = MPI_ERR_TYPE;
+ return MPI_ERR_TYPE;
} else if (count < 0){
- retval = MPI_ERR_COUNT;
+ return MPI_ERR_COUNT;
} else if (op == MPI_OP_NULL) {
- retval = MPI_ERR_OP;
+ return MPI_ERR_OP;
} else if (request == nullptr){
- retval = MPI_ERR_ARG;
+ return MPI_ERR_ARG;
} else {
+ smpi_bench_end();
char* sendtmpbuf = static_cast<char*>(sendbuf);
if( sendbuf == MPI_IN_PLACE ) {
sendtmpbuf = static_cast<char*>(xbt_malloc(count*datatype->get_extent()));
if( sendbuf == MPI_IN_PLACE )
xbt_free(sendtmpbuf);
- retval = MPI_SUCCESS;
TRACE_smpi_comm_out(rank);
+ smpi_bench_begin();
+ return MPI_SUCCESS;
}
-
- smpi_bench_begin();
- return retval;
}
int PMPI_Scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
int PMPI_Ireduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
{
int retval = 0;
- smpi_bench_end();
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
+ } else if ((sendbuf == nullptr) || (recvbuf == nullptr)) {
+ retval = MPI_ERR_BUFFER;
} else if (datatype == MPI_DATATYPE_NULL || not datatype->is_valid()){
retval = MPI_ERR_TYPE;
} else if (op == MPI_OP_NULL) {
retval = MPI_ERR_OP;
} else if (recvcounts == nullptr) {
retval = MPI_ERR_ARG;
- } else if (request == nullptr){
+ } else if (request == nullptr){
retval = MPI_ERR_ARG;
} else {
+ for (int i = 0; i < comm->size(); i++) { // copy data to avoid bad free
+ if(recvcounts[i]<0)
+ return MPI_ERR_COUNT;
+ }
+ smpi_bench_end();
+
int rank = simgrid::s4u::this_actor::get_pid();
std::vector<int>* trace_recvcounts = new std::vector<int>;
int dt_send_size = datatype->is_replayable() ? 1 : datatype->size();
int totalcount = 0;
for (int i = 0; i < comm->size(); i++) { // copy data to avoid bad free
- if(recvcounts[i]<0)
- return MPI_ERR_COUNT;
trace_recvcounts->push_back(recvcounts[i] * dt_send_size);
totalcount += recvcounts[i];
}
if (sendbuf == MPI_IN_PLACE)
xbt_free(sendtmpbuf);
+ smpi_bench_begin();
}
- smpi_bench_begin();
return retval;
}
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
+ } else if ((sendbuf == nullptr && sendcount > 0) || (recvbuf == nullptr && recvcount > 0)) {
+ retval = MPI_ERR_BUFFER;
} else if ((sendbuf != MPI_IN_PLACE && sendtype == MPI_DATATYPE_NULL) || recvtype == MPI_DATATYPE_NULL) {
retval = MPI_ERR_TYPE;
} else if ((sendbuf != MPI_IN_PLACE && sendcount < 0) || recvcount < 0){
int* recvcounts, int* recvdisps, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
{
int retval = 0;
-
- smpi_bench_end();
-
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
+ } else if (sendbuf == nullptr || recvbuf == nullptr) {
+ retval = MPI_ERR_BUFFER;
} else if ((sendbuf != MPI_IN_PLACE && sendtype == MPI_DATATYPE_NULL) || recvtype == MPI_DATATYPE_NULL) {
retval = MPI_ERR_TYPE;
} else if ((sendbuf != MPI_IN_PLACE && (sendcounts == nullptr || senddisps == nullptr)) || recvcounts == nullptr ||
} else {
int rank = simgrid::s4u::this_actor::get_pid();
int size = comm->size();
+ for (int i = 0; i < size; i++) {
+ if (recvcounts[i] <0 || (sendbuf != MPI_IN_PLACE && sendcounts[i]<0))
+ return MPI_ERR_COUNT;
+ }
+ smpi_bench_end();
int send_size = 0;
int recv_size = 0;
std::vector<int>* trace_sendcounts = new std::vector<int>;
MPI_Datatype sendtmptype = sendtype;
int maxsize = 0;
for (int i = 0; i < size; i++) { // copy data to avoid bad free
- if (recvcounts[i] <0 || (sendbuf != MPI_IN_PLACE && sendcounts[i]<0))
- return MPI_ERR_COUNT;
recv_size += recvcounts[i] * dt_size_recv;
trace_recvcounts->push_back(recvcounts[i] * dt_size_recv);
if (((recvdisps[i] + recvcounts[i]) * dt_size_recv) > maxsize)
xbt_free(sendtmpcounts);
xbt_free(sendtmpdisps);
}
+ smpi_bench_begin();
}
-
- smpi_bench_begin();
return retval;
}
int* recvcounts, int* recvdisps, MPI_Datatype* recvtypes, MPI_Comm comm, MPI_Request *request)
{
int retval = 0;
-
- smpi_bench_end();
-
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
+ } else if (sendbuf == nullptr || recvbuf == nullptr) {
+ retval = MPI_ERR_BUFFER;
} else if ((sendbuf != MPI_IN_PLACE && sendtypes == nullptr) || recvtypes == nullptr) {
retval = MPI_ERR_TYPE;
} else if ((sendbuf != MPI_IN_PLACE && (sendcounts == nullptr || senddisps == nullptr)) || recvcounts == nullptr ||
} else if (request == nullptr){
retval = MPI_ERR_ARG;
} else {
+ smpi_bench_end();
int rank = simgrid::s4u::this_actor::get_pid();
int size = comm->size();
+ for (int i = 0; i < size; i++) { // copy data to avoid bad free
+ if (recvcounts[i] <0 || (sendbuf != MPI_IN_PLACE && sendcounts[i]<0))
+ return MPI_ERR_COUNT;
+ }
int send_size = 0;
int recv_size = 0;
std::vector<int>* trace_sendcounts = new std::vector<int>;
xbt_free(sendtmpdisps);
xbt_free(sendtmptypes);
}
+ smpi_bench_begin();
}
-
- smpi_bench_begin();
return retval;
}