That's rather empty, as actually MPI_Status has to stay in C (its fields being public to the user codes).
class Info;
class Keyval;
class Op;
class Info;
class Keyval;
class Op;
class Topo;
class Topo_Cart;
class Topo_Graph;
class Topo;
class Topo_Cart;
class Topo_Graph;
Request::sendrecv(recv_ptr + send_offset, curr_count, send_type, dst,
tag, recv_ptr + recv_offset, mask * recv_count,
recv_type, dst, tag, comm, &status);
Request::sendrecv(recv_ptr + send_offset, curr_count, send_type, dst,
tag, recv_ptr + recv_offset, mask * recv_count,
recv_type, dst, tag, comm, &status);
- last_recv_count = smpi_mpi_get_count(&status, recv_type);
+ last_recv_count = Status::get_count(&status, recv_type);
curr_count += last_recv_count;
}
curr_count += last_recv_count;
}
recv_type, dst, tag, comm, &status);
// num_procs_completed is also equal to the no. of processes
// whose data we don't have
recv_type, dst, tag, comm, &status);
// num_procs_completed is also equal to the no. of processes
// whose data we don't have
- last_recv_count = smpi_mpi_get_count(&status, recv_type);
+ last_recv_count = Status::get_count(&status, recv_type);
curr_count += last_recv_count;
}
tmp_mask >>= 1;
curr_count += last_recv_count;
}
tmp_mask >>= 1;
comm, &status);
/* for convenience, recv is posted for a bigger amount
than will be sent */
comm, &status);
/* for convenience, recv is posted for a bigger amount
than will be sent */
- last_recv_cnt=smpi_mpi_get_count(&status, recvtype);
+ last_recv_cnt=Status::get_count(&status, recvtype);
curr_cnt += last_recv_cnt;
}
curr_cnt += last_recv_cnt;
}
comm, &status);
/* for convenience, recv is posted for a
bigger amount than will be sent */
comm, &status);
/* for convenience, recv is posted for a
bigger amount than will be sent */
- last_recv_cnt=smpi_mpi_get_count(&status, recvtype);
+ last_recv_cnt=Status::get_count(&status, recvtype);
curr_cnt += last_recv_cnt;
}
tmp_mask >>= 1;
curr_cnt += last_recv_cnt;
}
tmp_mask >>= 1;
tmp_buff + recv_offset, mask * recv_count * num_procs,
recv_type, dst, tag, comm, &status);
tmp_buff + recv_offset, mask * recv_count * num_procs,
recv_type, dst, tag, comm, &status);
- last_recv_count = smpi_mpi_get_count(&status, recv_type);
+ last_recv_count = Status::get_count(&status, recv_type);
curr_size += last_recv_count;
}
curr_size += last_recv_count;
}
mask * num_procs * send_count, send_type, dst,
tag, comm, &status);
mask * num_procs * send_count, send_type, dst,
tag, comm, &status);
- last_recv_count = smpi_mpi_get_count(&status, send_type);
+ last_recv_count = Status::get_count(&status, send_type);
curr_size += last_recv_count;
}
curr_size += last_recv_count;
}
else {
Request::recv((char *) buff + relative_rank * scatter_size, recv_size,
MPI_BYTE, src, tag, comm, &status);
else {
Request::recv((char *) buff + relative_rank * scatter_size, recv_size,
MPI_BYTE, src, tag, comm, &status);
- curr_size = smpi_mpi_get_count(&status, MPI_BYTE);
+ curr_size = Status::get_count(&status, MPI_BYTE);
recv_size, MPI_BYTE, src,
COLL_TAG_BCAST, comm, &status);
/* query actual size of data received */
recv_size, MPI_BYTE, src,
COLL_TAG_BCAST, comm, &status);
/* query actual size of data received */
- curr_size=smpi_mpi_get_count(&status, MPI_BYTE);
+ curr_size=Status::get_count(&status, MPI_BYTE);
((char *)tmp_buf + recv_offset),
(nbytes-recv_offset < 0 ? 0 : nbytes-recv_offset),
MPI_BYTE, dst, COLL_TAG_BCAST, comm, &status);
((char *)tmp_buf + recv_offset),
(nbytes-recv_offset < 0 ? 0 : nbytes-recv_offset),
MPI_BYTE, dst, COLL_TAG_BCAST, comm, &status);
- recv_size=smpi_mpi_get_count(&status, MPI_BYTE);
+ recv_size=Status::get_count(&status, MPI_BYTE);
curr_size += recv_size;
}
curr_size += recv_size;
}
comm, &status);
/* nprocs_completed is also equal to the no. of processes
whose data we don't have */
comm, &status);
/* nprocs_completed is also equal to the no. of processes
whose data we don't have */
- recv_size=smpi_mpi_get_count(&status, MPI_BYTE);
+ recv_size=Status::get_count(&status, MPI_BYTE);
curr_size += recv_size;
/* printf("Rank %d, recv from %d, offset %d, size %d\n", rank, dst, offset, recv_size);
fflush(stdout);*/
curr_size += recv_size;
/* printf("Rank %d, recv from %d, offset %d, size %d\n", rank, dst, offset, recv_size);
fflush(stdout);*/
#include "src/smpi/smpi_datatype.hpp"
#include "src/smpi/smpi_datatype_derived.hpp"
#include "src/smpi/smpi_request.hpp"
#include "src/smpi/smpi_datatype.hpp"
#include "src/smpi/smpi_datatype_derived.hpp"
#include "src/smpi/smpi_request.hpp"
+#include "src/smpi/smpi_status.hpp"
#include "src/smpi/smpi_win.hpp"
SG_BEGIN_DECL()
#include "src/smpi/smpi_win.hpp"
SG_BEGIN_DECL()
XBT_PRIVATE double smpi_mpi_wtime();
XBT_PRIVATE void smpi_mpi_init();
XBT_PRIVATE double smpi_mpi_wtime();
XBT_PRIVATE void smpi_mpi_init();
-XBT_PRIVATE void smpi_empty_status(MPI_Status * status);
-XBT_PRIVATE int smpi_mpi_get_count(MPI_Status * status, MPI_Datatype datatype);
-
-
// utilities
extern XBT_PRIVATE double smpi_cpu_threshold;
extern XBT_PRIVATE double smpi_host_speed;
// utilities
extern XBT_PRIVATE double smpi_cpu_threshold;
extern XBT_PRIVATE double smpi_host_speed;
-void smpi_empty_status(MPI_Status * status)
-{
- if(status != MPI_STATUS_IGNORE) {
- status->MPI_SOURCE = MPI_ANY_SOURCE;
- status->MPI_TAG = MPI_ANY_TAG;
- status->MPI_ERROR = MPI_SUCCESS;
- status->count=0;
- }
-}
-
-int smpi_mpi_get_count(MPI_Status * status, MPI_Datatype datatype)
-{
- return status->count / datatype->size();
-}
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
} else if (src == MPI_PROC_NULL) {
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
} else if (src == MPI_PROC_NULL) {
- smpi_empty_status(status);
status->MPI_SOURCE = MPI_PROC_NULL;
retval = MPI_SUCCESS;
} else if (src!=MPI_ANY_SOURCE && (src >= comm->group()->size() || src <0)){
status->MPI_SOURCE = MPI_PROC_NULL;
retval = MPI_SUCCESS;
} else if (src!=MPI_ANY_SOURCE && (src >= comm->group()->size() || src <0)){
} else if (!sendtype->is_valid() || !recvtype->is_valid()) {
retval = MPI_ERR_TYPE;
} else if (src == MPI_PROC_NULL || dst == MPI_PROC_NULL) {
} else if (!sendtype->is_valid() || !recvtype->is_valid()) {
retval = MPI_ERR_TYPE;
} else if (src == MPI_PROC_NULL || dst == MPI_PROC_NULL) {
- smpi_empty_status(status);
status->MPI_SOURCE = MPI_PROC_NULL;
retval = MPI_SUCCESS;
}else if (dst >= comm->group()->size() || dst <0 ||
status->MPI_SOURCE = MPI_PROC_NULL;
retval = MPI_SUCCESS;
}else if (dst >= comm->group()->size() || dst <0 ||
retval = MPI_ERR_ARG;
} else if (*request == MPI_REQUEST_NULL) {
*flag= true;
retval = MPI_ERR_ARG;
} else if (*request == MPI_REQUEST_NULL) {
*flag= true;
- smpi_empty_status(status);
retval = MPI_SUCCESS;
} else {
int rank = ((*request)->comm() != MPI_COMM_NULL) ? smpi_process()->index() : -1;
retval = MPI_SUCCESS;
} else {
int rank = ((*request)->comm() != MPI_COMM_NULL) ? smpi_process()->index() : -1;
} else if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
} else if (source == MPI_PROC_NULL) {
} else if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
} else if (source == MPI_PROC_NULL) {
- smpi_empty_status(status);
status->MPI_SOURCE = MPI_PROC_NULL;
retval = MPI_SUCCESS;
} else {
status->MPI_SOURCE = MPI_PROC_NULL;
retval = MPI_SUCCESS;
} else {
retval = MPI_ERR_COMM;
} else if (source == MPI_PROC_NULL) {
*flag=true;
retval = MPI_ERR_COMM;
} else if (source == MPI_PROC_NULL) {
*flag=true;
- smpi_empty_status(status);
status->MPI_SOURCE = MPI_PROC_NULL;
retval = MPI_SUCCESS;
} else {
status->MPI_SOURCE = MPI_PROC_NULL;
retval = MPI_SUCCESS;
} else {
- smpi_empty_status(status);
if (request == nullptr) {
retval = MPI_ERR_ARG;
if (request == nullptr) {
retval = MPI_ERR_ARG;
} else if (status->count % size != 0) {
return MPI_UNDEFINED;
} else {
} else if (status->count % size != 0) {
return MPI_UNDEFINED;
} else {
- *count = smpi_mpi_get_count(status, datatype);
+ *count = Status::get_count(status, datatype);
if(smpi_test_sleep > 0)
simcall_process_sleep(nsleeps*smpi_test_sleep);
if(smpi_test_sleep > 0)
simcall_process_sleep(nsleeps*smpi_test_sleep);
- smpi_empty_status(status);
int flag = 1;
if (((*request)->flags_ & PREPARED) == 0) {
if ((*request)->action_ != nullptr)
int flag = 1;
if (((*request)->flags_ & PREPARED) == 0) {
if ((*request)->action_ != nullptr)
} else {
//all requests are null or inactive, return true
flag = 1;
} else {
//all requests are null or inactive, return true
flag = 1;
- smpi_empty_status(status);
requests[i]=MPI_REQUEST_NULL;
}
}else{
requests[i]=MPI_REQUEST_NULL;
}
}else{
- smpi_empty_status(pstat);
}
if(status != MPI_STATUSES_IGNORE) {
status[i] = *pstat;
}
if(status != MPI_STATUSES_IGNORE) {
status[i] = *pstat;
void Request::finish_wait(MPI_Request* request, MPI_Status * status)
{
MPI_Request req = *request;
void Request::finish_wait(MPI_Request* request, MPI_Status * status)
{
MPI_Request req = *request;
- smpi_empty_status(status);
if(!((req->detached_ != 0) && ((req->flags_ & SEND) != 0)) && ((req->flags_ & PREPARED) == 0)){
if(status != MPI_STATUS_IGNORE) {
if(!((req->detached_ != 0) && ((req->flags_ & SEND) != 0)) && ((req->flags_ & PREPARED) == 0)){
if(status != MPI_STATUS_IGNORE) {
{
(*request)->print_request("Waiting");
if ((*request)->flags_ & PREPARED) {
{
(*request)->print_request("Waiting");
if ((*request)->flags_ & PREPARED) {
- smpi_empty_status(status);
}
if (index==MPI_UNDEFINED)
}
if (index==MPI_UNDEFINED)
- smpi_empty_status(status);
if (status != MPI_STATUSES_IGNORE) {
for (int c = 0; c < count; c++) {
if (requests[c] == MPI_REQUEST_NULL || requests[c]->dst_ == MPI_PROC_NULL || (requests[c]->flags_ & PREPARED)) {
if (status != MPI_STATUSES_IGNORE) {
for (int c = 0; c < count; c++) {
if (requests[c] == MPI_REQUEST_NULL || requests[c]->dst_ == MPI_PROC_NULL || (requests[c]->flags_ & PREPARED)) {
- smpi_empty_status(&status[c]);
+ Status::empty(&status[c]);
} else if (requests[c]->src_ == MPI_PROC_NULL) {
} else if (requests[c]->src_ == MPI_PROC_NULL) {
- smpi_empty_status(&status[c]);
+ Status::empty(&status[c]);
status[c].MPI_SOURCE = MPI_PROC_NULL;
}
}
status[c].MPI_SOURCE = MPI_PROC_NULL;
}
}
src/smpi/smpi_replay.cpp
src/smpi/smpi_request.cpp
src/smpi/smpi_request.hpp
src/smpi/smpi_replay.cpp
src/smpi/smpi_request.cpp
src/smpi/smpi_request.hpp
+ src/smpi/smpi_status.cpp
+ src/smpi/smpi_status.hpp
src/smpi/smpi_win.cpp
src/smpi/smpi_win.hpp
src/smpi/smpi_topo.cpp
src/smpi/smpi_win.cpp
src/smpi/smpi_win.hpp
src/smpi/smpi_topo.cpp