int already_init;
MPI_Initialized(&already_init);
if(already_init == 0){
- smpi_process_init(argc, argv);
- smpi_process_mark_as_initialized();
- int rank = smpi_process_index();
+ Process::init(argc, argv);
+ smpi_process()->mark_as_initialized();
+ int rank = smpi_process()->index();
TRACE_smpi_init(rank);
TRACE_smpi_computing_init(rank);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
int PMPI_Finalize()
{
smpi_bench_end();
- int rank = smpi_process_index();
+ int rank = smpi_process()->index();
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_FINALIZE;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra);
- smpi_process_finalize();
+ smpi_process()->finalize();
TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
- TRACE_smpi_finalize(smpi_process_index());
- smpi_process_destroy();
+ TRACE_smpi_finalize(smpi_process()->index());
+ smpi_process()->destroy();
return MPI_SUCCESS;
}
int PMPI_Finalized(int* flag)
{
- *flag=smpi_process_finalized();
+ *flag=smpi_process()!=nullptr ? smpi_process()->finalized() : 0;
return MPI_SUCCESS;
}
if (flag == nullptr) {
return MPI_ERR_ARG;
} else {
- *flag = smpi_process_index() == 0;
+ *flag = smpi_process()->index() == 0;
return MPI_SUCCESS;
}
}
int PMPI_Abort(MPI_Comm comm, int errorcode)
{
smpi_bench_end();
- smpi_process_destroy();
+ smpi_process()->destroy();
// FIXME: should kill all processes in comm instead
simcall_process_kill(SIMIX_process_self());
return MPI_SUCCESS;
if (*datatype == MPI_DATATYPE_NULL) {
return MPI_ERR_ARG;
} else {
- (*datatype)->unuse();
+ Datatype::unref(*datatype);
return MPI_SUCCESS;
}
}
*newtype = new Datatype(datatype, &retval);
//error when duplicating, free the new datatype
if(retval!=MPI_SUCCESS){
- (*newtype)->unuse();
+ Datatype::unref(*newtype);
*newtype = MPI_DATATYPE_NULL;
}
}
} else if (rank == nullptr) {
return MPI_ERR_ARG;
} else {
- *rank = group->rank(smpi_process_index());
+ *rank = group->rank(smpi_process()->index());
return MPI_SUCCESS;
}
}
return MPI_ERR_GROUP;
} else if (newcomm == nullptr) {
return MPI_ERR_ARG;
- } else if(group->rank(smpi_process_index())==MPI_UNDEFINED){
+ } else if(group->rank(smpi_process()->index())==MPI_UNDEFINED){
*newcomm= MPI_COMM_NULL;
return MPI_SUCCESS;
}else{
if (*request == MPI_REQUEST_NULL) {
retval = MPI_ERR_ARG;
} else {
- Request::unuse(request);
+ Request::unref(request);
retval = MPI_SUCCESS;
}
smpi_bench_begin();
retval = MPI_ERR_TAG;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int src_traced = comm->group()->index(src);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
} else if(tag<0 && tag != MPI_ANY_TAG){
retval = MPI_ERR_TAG;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int dst_traced = comm->group()->index(dst);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_ISEND;
} else if(tag<0 && tag != MPI_ANY_TAG){
retval = MPI_ERR_TAG;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int dst_traced = comm->group()->index(dst);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_ISSEND;
} else if(tag<0 && tag != MPI_ANY_TAG){
retval = MPI_ERR_TAG;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int src_traced = comm->group()->index(src);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
extra->type = TRACING_RECV;
} else if(tag < 0 && tag != MPI_ANY_TAG){
retval = MPI_ERR_TAG;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int dst_traced = comm->group()->index(dst);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_SEND;
} else if(tag<0 && tag != MPI_ANY_TAG){
retval = MPI_ERR_TAG;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int dst_traced = comm->group()->index(dst);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_SSEND;
retval = MPI_ERR_TAG;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int dst_traced = comm->group()->index(dst);
int src_traced = comm->group()->index(src);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
smpi_empty_status(status);
retval = MPI_SUCCESS;
} else {
- int rank = ((*request)->comm() != MPI_COMM_NULL) ? smpi_process_index() : -1;
+ int rank = ((*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;
retval = MPI_SUCCESS;
} else {
- int rank = (request!=nullptr && (*request)->comm() != MPI_COMM_NULL) ? smpi_process_index() : -1;
+ int rank = (request!=nullptr && (*request)->comm() != MPI_COMM_NULL) ? smpi_process()->index() : -1;
int src_traced = (*request)->src();
int dst_traced = (*request)->dst();
savedvals[i]=(savedvalstype){req->src(), req->dst(), (req->flags() & RECV), req->tag(), req->comm()};
}
}
- int rank_traced = smpi_process_index();
+ int rank_traced = smpi_process()->index();
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_WAITANY;
extra->send_size=count;
savedvals[i].valid=0;
}
}
- int rank_traced = smpi_process_index();
+ int rank_traced = smpi_process()->index();
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_WAITALL;
extra->send_size=count;
} else if (!datatype->is_valid()) {
retval = MPI_ERR_ARG;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int root_traced = comm->group()->index(root);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
extra->send_size = count * dt_size_send;
TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__, extra);
if (comm->size() > 1)
- mpi_coll_bcast_fun(buf, count, datatype, root, comm);
+ Colls::bcast(buf, count, datatype, root, comm);
retval = MPI_SUCCESS;
TRACE_smpi_collective_out(rank, root_traced, __FUNCTION__);
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
extra->type = TRACING_BARRIER;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra);
- mpi_coll_barrier_fun(comm);
+ Colls::barrier(comm);
retval = MPI_SUCCESS;
TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
sendtmpcount=0;
sendtmptype=recvtype;
}
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int root_traced = comm->group()->index(root);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
extra->type = TRACING_GATHER;
TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__, extra);
- mpi_coll_gather_fun(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcount, recvtype, root, comm);
+ Colls::gather(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcount, recvtype, root, comm);
retval = MPI_SUCCESS;
TRACE_smpi_collective_out(rank, root_traced, __FUNCTION__);
sendtmptype=recvtype;
}
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int root_traced = comm->group()->index(root);
int i = 0;
int size = comm->size();
}
TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__, extra);
- smpi_mpi_gatherv(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcounts, displs, recvtype, root, comm);
- retval = MPI_SUCCESS;
+ retval = Colls::gatherv(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcounts, displs, recvtype, root, comm);
TRACE_smpi_collective_out(rank, root_traced, __FUNCTION__);
}
sendcount=recvcount;
sendtype=recvtype;
}
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
extra->type = TRACING_ALLGATHER;
int known = 0;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra);
- mpi_coll_allgather_fun(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm);
+ Colls::allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm);
retval = MPI_SUCCESS;
TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
}
sendcount=recvcounts[comm->rank()];
sendtype=recvtype;
}
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int i = 0;
int size = comm->size();
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra);
- mpi_coll_allgatherv_fun(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm);
+ Colls::allgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm);
retval = MPI_SUCCESS;
TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
}
recvtype = sendtype;
recvcount = sendcount;
}
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int root_traced = comm->group()->index(root);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
extra->type = TRACING_SCATTER;
extra->recv_size = recvcount * dt_size_recv;
TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__, extra);
- mpi_coll_scatter_fun(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm);
+ Colls::scatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm);
retval = MPI_SUCCESS;
TRACE_smpi_collective_out(rank, root_traced, __FUNCTION__);
}
recvtype = sendtype;
recvcount = sendcounts[comm->rank()];
}
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int root_traced = comm->group()->index(root);
int i = 0;
int size = comm->size();
extra->recv_size = recvcount * dt_size_recv;
TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__, extra);
- smpi_mpi_scatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm);
+ retval = Colls::scatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm);
- retval = MPI_SUCCESS;
TRACE_smpi_collective_out(rank, root_traced, __FUNCTION__);
}
} else if (!datatype->is_valid() || op == MPI_OP_NULL) {
retval = MPI_ERR_ARG;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int root_traced = comm->group()->index(root);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
extra->type = TRACING_REDUCE;
TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__, extra);
- mpi_coll_reduce_fun(sendbuf, recvbuf, count, datatype, op, root, comm);
+ Colls::reduce(sendbuf, recvbuf, count, datatype, op, root, comm);
retval = MPI_SUCCESS;
TRACE_smpi_collective_out(rank, root_traced, __FUNCTION__);
if (!datatype->is_valid() || op == MPI_OP_NULL) {
retval = MPI_ERR_ARG;
} else {
- if(op!=MPI_OP_NULL) op->apply( inbuf, inoutbuf, &count, datatype);
+ op->apply(inbuf, inoutbuf, &count, datatype);
retval = MPI_SUCCESS;
}
smpi_bench_begin();
sendtmpbuf = static_cast<char*>(xbt_malloc(count*datatype->get_extent()));
Datatype::copy(recvbuf, count, datatype,sendtmpbuf, count, datatype);
}
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
extra->type = TRACING_ALLREDUCE;
int known = 0;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra);
- mpi_coll_allreduce_fun(sendtmpbuf, recvbuf, count, datatype, op, comm);
+ Colls::allreduce(sendtmpbuf, recvbuf, count, datatype, op, comm);
if( sendbuf == MPI_IN_PLACE )
xbt_free(sendtmpbuf);
} else if (op == MPI_OP_NULL) {
retval = MPI_ERR_OP;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
extra->type = TRACING_SCAN;
int known = 0;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra);
- smpi_mpi_scan(sendbuf, recvbuf, count, datatype, op, comm);
+ retval = Colls::scan(sendbuf, recvbuf, count, datatype, op, comm);
- retval = MPI_SUCCESS;
TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
}
} else if (op == MPI_OP_NULL) {
retval = MPI_ERR_OP;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
extra->type = TRACING_EXSCAN;
int known = 0;
}
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra);
- smpi_mpi_exscan(sendtmpbuf, recvbuf, count, datatype, op, comm);
- retval = MPI_SUCCESS;
+ retval = Colls::exscan(sendtmpbuf, recvbuf, count, datatype, op, comm);
+
TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
if (sendbuf == MPI_IN_PLACE)
xbt_free(sendtmpbuf);
} else if (recvcounts == nullptr) {
retval = MPI_ERR_ARG;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int i = 0;
int size = comm->size();
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra);
- mpi_coll_reduce_scatter_fun(sendtmpbuf, recvbuf, recvcounts, datatype, op, comm);
+ Colls::reduce_scatter(sendtmpbuf, recvbuf, recvcounts, datatype, op, comm);
retval = MPI_SUCCESS;
TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
} else {
int count = comm->size();
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
extra->type = TRACING_REDUCE_SCATTER;
extra->num_processes = count;
int* recvcounts = static_cast<int*>(xbt_malloc(count * sizeof(int)));
for (int i = 0; i < count; i++)
recvcounts[i] = recvcount;
- mpi_coll_reduce_scatter_fun(sendtmpbuf, recvbuf, recvcounts, datatype, op, comm);
+ Colls::reduce_scatter(sendtmpbuf, recvbuf, recvcounts, datatype, op, comm);
xbt_free(recvcounts);
retval = MPI_SUCCESS;
} else if ((sendbuf != MPI_IN_PLACE && sendtype == MPI_DATATYPE_NULL) || recvtype == MPI_DATATYPE_NULL) {
retval = MPI_ERR_TYPE;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
extra->type = TRACING_ALLTOALL;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra);
- retval = mpi_coll_alltoall_fun(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcount, recvtype, comm);
+ retval = Colls::alltoall(sendtmpbuf, sendtmpcount, sendtmptype, recvbuf, recvcount, recvtype, comm);
TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
recvdisps == nullptr) {
retval = MPI_ERR_ARG;
} else {
- int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
+ int rank = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
int i = 0;
int size = comm->size();
instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
}
extra->num_processes = size;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra);
- retval = mpi_coll_alltoallv_fun(sendtmpbuf, sendtmpcounts, sendtmpdisps, sendtmptype, recvbuf, recvcounts,
+ retval = Colls::alltoallv(sendtmpbuf, sendtmpcounts, sendtmpdisps, sendtmptype, recvbuf, recvcounts,
recvdisps, recvtype, comm);
TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
}
int PMPI_Initialized(int* flag) {
- *flag=smpi_process_initialized();
+ *flag=(smpi_process()!=nullptr && smpi_process()->initialized());
return MPI_SUCCESS;
}
if (win == MPI_WIN_NULL) {
retval = MPI_ERR_WIN;
} else {
- int rank = smpi_process_index();
+ int rank = smpi_process()->index();
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, nullptr);
retval = win->fence(assert);
TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
} else if ((!origin_datatype->is_valid()) || (!target_datatype->is_valid())) {
retval = MPI_ERR_TYPE;
} else {
- int rank = smpi_process_index();
+ int rank = smpi_process()->index();
MPI_Group group;
win->get_group(&group);
int src_traced = group->index(target_rank);
} else if ((!origin_datatype->is_valid()) || (!target_datatype->is_valid())) {
retval = MPI_ERR_TYPE;
} else {
- int rank = smpi_process_index();
+ int rank = smpi_process()->index();
MPI_Group group;
win->get_group(&group);
int dst_traced = group->index(target_rank);
} else if (op == MPI_OP_NULL) {
retval = MPI_ERR_OP;
} else {
- int rank = smpi_process_index();
+ int rank = smpi_process()->index();
MPI_Group group;
win->get_group(&group);
int src_traced = group->index(target_rank);
} else if (group==MPI_GROUP_NULL){
retval = MPI_ERR_GROUP;
} else {
- int rank = smpi_process_index();
+ int rank = smpi_process()->index();
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, nullptr);
retval = win->post(group,assert);
TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
} else if (group==MPI_GROUP_NULL){
retval = MPI_ERR_GROUP;
} else {
- int rank = smpi_process_index();
+ int rank = smpi_process()->index();
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, nullptr);
retval = win->start(group,assert);
TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
if (win == MPI_WIN_NULL) {
retval = MPI_ERR_WIN;
} else {
- int rank = smpi_process_index();
+ int rank = smpi_process()->index();
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, nullptr);
retval = win->complete();
if (win == MPI_WIN_NULL) {
retval = MPI_ERR_WIN;
} else {
- int rank = smpi_process_index();
+ int rank = smpi_process()->index();
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, nullptr);
retval = win->wait();
}
int PMPI_Keyval_create(MPI_Copy_function* copy_fn, MPI_Delete_function* delete_fn, int* keyval, void* extra_state) {
- return smpi_comm_keyval_create(copy_fn, delete_fn, keyval, extra_state);
+ smpi_copy_fn _copy_fn={copy_fn,nullptr,nullptr};
+ smpi_delete_fn _delete_fn={delete_fn,nullptr,nullptr};
+ return Keyval::keyval_create<Comm>(_copy_fn, _delete_fn, keyval, extra_state);
}
int PMPI_Keyval_free(int* keyval) {
- return smpi_comm_keyval_free(keyval);
+ return Keyval::keyval_free<Comm>(keyval);
}
int PMPI_Attr_delete(MPI_Comm comm, int keyval) {
else if (comm==MPI_COMM_NULL)
return MPI_ERR_COMM;
else
- return comm->attr_delete(keyval);
+ return comm->attr_delete<Comm>(keyval);
}
int PMPI_Attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag) {
*static_cast<int**>(attr_value) = &one;
return MPI_SUCCESS;
default:
- return comm->attr_get(keyval, attr_value, flag);
+ return comm->attr_get<Comm>(keyval, attr_value, flag);
}
}
else if (comm==MPI_COMM_NULL)
return MPI_ERR_COMM;
else
- return comm->attr_put(keyval, attr_value);
+ return comm->attr_put<Comm>(keyval, attr_value);
}
int PMPI_Comm_get_attr (MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag)
if (type==MPI_DATATYPE_NULL)
return MPI_ERR_TYPE;
else
- return type->attr_get(type_keyval, attribute_val, flag);
+ return type->attr_get<Datatype>(type_keyval, attribute_val, flag);
}
int PMPI_Type_set_attr (MPI_Datatype type, int type_keyval, void *attribute_val)
if (type==MPI_DATATYPE_NULL)
return MPI_ERR_TYPE;
else
- return type->attr_put(type_keyval, attribute_val);
+ return type->attr_put<Datatype>(type_keyval, attribute_val);
}
int PMPI_Type_delete_attr (MPI_Datatype type, int type_keyval)
if (type==MPI_DATATYPE_NULL)
return MPI_ERR_TYPE;
else
- return type->attr_delete(type_keyval);
+ return type->attr_delete<Datatype>(type_keyval);
}
int PMPI_Type_create_keyval(MPI_Type_copy_attr_function* copy_fn, MPI_Type_delete_attr_function* delete_fn, int* keyval,
void* extra_state)
{
- return Datatype::keyval_create(copy_fn, delete_fn, keyval, extra_state);
+ smpi_copy_fn _copy_fn={nullptr,copy_fn,nullptr};
+ smpi_delete_fn _delete_fn={nullptr,delete_fn,nullptr};
+ return Keyval::keyval_create<Datatype>(_copy_fn, _delete_fn, keyval, extra_state);
}
int PMPI_Type_free_keyval(int* keyval) {
- return Datatype::keyval_free(keyval);
+ return Keyval::keyval_free<Datatype>(keyval);
+}
+
+int PMPI_Win_get_attr (MPI_Win win, int keyval, void *attribute_val, int* flag)
+{
+ static MPI_Aint size;
+ static int disp_unit;
+ if (win==MPI_WIN_NULL)
+ return MPI_ERR_TYPE;
+ else{
+ switch (keyval) {
+ case MPI_WIN_BASE :
+ *static_cast<void**>(attribute_val) = win->base();
+ *flag = 1;
+ return MPI_SUCCESS;
+ case MPI_WIN_SIZE :
+ size = win->size();
+ *static_cast<MPI_Aint**>(attribute_val) = &size;
+ *flag = 1;
+ return MPI_SUCCESS;
+ case MPI_WIN_DISP_UNIT :
+ disp_unit=win->disp_unit();
+ *static_cast<int**>(attribute_val) = &disp_unit;
+ *flag = 1;
+ return MPI_SUCCESS;
+ default:
+ return win->attr_get<Win>(keyval, attribute_val, flag);
+ }
+}
+
+}
+
+int PMPI_Win_set_attr (MPI_Win win, int type_keyval, void *attribute_val)
+{
+ if (win==MPI_WIN_NULL)
+ return MPI_ERR_TYPE;
+ else
+ return win->attr_put<Win>(type_keyval, attribute_val);
+}
+
+int PMPI_Win_delete_attr (MPI_Win win, int type_keyval)
+{
+ if (win==MPI_WIN_NULL)
+ return MPI_ERR_TYPE;
+ else
+ return win->attr_delete<Win>(type_keyval);
+}
+
+int PMPI_Win_create_keyval(MPI_Win_copy_attr_function* copy_fn, MPI_Win_delete_attr_function* delete_fn, int* keyval,
+ void* extra_state)
+{
+ smpi_copy_fn _copy_fn={nullptr, nullptr, copy_fn};
+ smpi_delete_fn _delete_fn={nullptr, nullptr, delete_fn};
+ return Keyval::keyval_create<Win>(_copy_fn, _delete_fn, keyval, extra_state);
+}
+
+int PMPI_Win_free_keyval(int* keyval) {
+ return Keyval::keyval_free<Win>(keyval);
}
int PMPI_Info_create( MPI_Info *info){