+int PMPI_Win_start(MPI_Group group, int assert, MPI_Win win){
+ int retval = 0;
+ smpi_bench_end();
+ if (win == MPI_WIN_NULL) {
+ retval = MPI_ERR_WIN;
+ } else if (group==MPI_GROUP_NULL){
+ retval = MPI_ERR_GROUP;
+ }
+ else {
+#ifdef HAVE_TRACING
+ int rank = smpi_process_index();
+ TRACE_smpi_collective_in(rank, -1, __FUNCTION__, NULL);
+#endif
+ retval = smpi_mpi_win_start(group,assert,win);
+#ifdef HAVE_TRACING
+ TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
+#endif
+ }
+ smpi_bench_begin();
+ return retval;
+}
+
+
+int PMPI_Win_complete(MPI_Win win){
+ int retval = 0;
+ smpi_bench_end();
+ if (win == MPI_WIN_NULL) {
+ retval = MPI_ERR_WIN;
+ }
+ else {
+#ifdef HAVE_TRACING
+ int rank = smpi_process_index();
+ TRACE_smpi_collective_in(rank, -1, __FUNCTION__, NULL);
+#endif
+ retval = smpi_mpi_win_complete(win);
+#ifdef HAVE_TRACING
+ TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
+#endif
+ }
+ smpi_bench_begin();
+ return retval;
+}
+
+int PMPI_Win_wait(MPI_Win win){
+ int retval = 0;
+ smpi_bench_end();
+ if (win == MPI_WIN_NULL) {
+ retval = MPI_ERR_WIN;
+ }
+ else {
+#ifdef HAVE_TRACING
+ int rank = smpi_process_index();
+ TRACE_smpi_collective_in(rank, -1, __FUNCTION__, NULL);
+#endif
+ retval = smpi_mpi_win_wait(win);
+#ifdef HAVE_TRACING
+ TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
+#endif
+ }
+ smpi_bench_begin();
+ return retval;
+}
+
+int PMPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr){
+ void *ptr = xbt_malloc(size);
+ if(!ptr)
+ return MPI_ERR_NO_MEM;
+ else {
+ *(void **)baseptr = ptr;
+ return MPI_SUCCESS;
+ }
+}
+
+int PMPI_Free_mem(void *baseptr){
+ xbt_free(baseptr);
+ return MPI_SUCCESS;
+}
+
+int PMPI_Type_set_name(MPI_Datatype datatype, char * name)
+{
+ int retval = 0;
+ if (datatype == MPI_DATATYPE_NULL) {
+ retval = MPI_ERR_TYPE;
+ } else if (name == NULL) {
+ retval = MPI_ERR_ARG;
+ } else {
+ smpi_datatype_set_name(datatype, name);
+ retval = MPI_SUCCESS;
+ }
+ return retval;
+}
+
+int PMPI_Type_get_name(MPI_Datatype datatype, char * name, int* len)
+{
+ int retval = 0;
+
+ if (datatype == MPI_DATATYPE_NULL) {
+ retval = MPI_ERR_TYPE;
+ } else if (name == NULL) {
+ retval = MPI_ERR_ARG;
+ } else {
+ smpi_datatype_get_name(datatype, name, len);
+ retval = MPI_SUCCESS;
+ }
+ return retval;
+}
+
+
+MPI_Datatype PMPI_Type_f2c(MPI_Fint datatype){
+ return smpi_type_f2c(datatype);
+}
+
+MPI_Fint PMPI_Type_c2f(MPI_Datatype datatype){
+ return smpi_type_c2f( datatype);
+}
+
+MPI_Group PMPI_Group_f2c(MPI_Fint group){
+ return smpi_group_f2c( group);
+}
+
+MPI_Fint PMPI_Group_c2f(MPI_Group group){
+ return smpi_group_c2f(group);
+}
+
+MPI_Request PMPI_Request_f2c(MPI_Fint request){
+ return smpi_request_f2c(request);
+}
+
+MPI_Fint PMPI_Request_c2f(MPI_Request request) {
+ return smpi_request_c2f(request);
+}
+
+MPI_Win PMPI_Win_f2c(MPI_Fint win){
+ return smpi_win_f2c(win);
+}
+
+MPI_Fint PMPI_Win_c2f(MPI_Win win){
+ return smpi_win_c2f(win);
+}
+
+MPI_Op PMPI_Op_f2c(MPI_Fint op){
+ return smpi_op_f2c(op);
+}
+
+MPI_Fint PMPI_Op_c2f(MPI_Op op){
+ return smpi_op_c2f(op);
+}
+
+MPI_Comm PMPI_Comm_f2c(MPI_Fint comm){
+ return smpi_comm_f2c(comm);
+}
+
+MPI_Fint PMPI_Comm_c2f(MPI_Comm comm){
+ return smpi_comm_c2f(comm);
+}
+
+MPI_Info PMPI_Info_f2c(MPI_Fint info){
+ return smpi_info_f2c(info);
+}
+
+MPI_Fint PMPI_Info_c2f(MPI_Info info){
+ return smpi_info_c2f(info);
+}
+
+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);
+}
+
+int PMPI_Keyval_free(int* keyval) {
+ return smpi_comm_keyval_free(keyval);
+}
+
+int PMPI_Attr_delete(MPI_Comm comm, int keyval) {
+ if(keyval == MPI_TAG_UB||keyval == MPI_HOST||keyval == MPI_IO
+ ||keyval == MPI_WTIME_IS_GLOBAL||keyval == MPI_APPNUM
+ ||keyval == MPI_UNIVERSE_SIZE||keyval == MPI_LASTUSEDCODE)
+ return MPI_ERR_ARG;
+ else if (comm==MPI_COMM_NULL)
+ return MPI_ERR_COMM;
+ else
+ return smpi_comm_attr_delete(comm, keyval);
+}
+
+int PMPI_Attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag) {
+ if (comm==MPI_COMM_NULL){
+ *flag=0;
+ return MPI_ERR_COMM;
+ } else if(keyval == MPI_TAG_UB||keyval == MPI_HOST||keyval == MPI_IO
+ ||keyval == MPI_WTIME_IS_GLOBAL||keyval == MPI_APPNUM
+ ||keyval == MPI_UNIVERSE_SIZE||keyval == MPI_LASTUSEDCODE){
+ *flag=1;
+ //FIXME : not ideal and leaky, but should not be called too much
+ int* res = xbt_new(int, 1);
+ *res=keyval;
+ *(int**)attr_value=res;
+ return MPI_SUCCESS;
+ } else
+ return smpi_comm_attr_get(comm, keyval, attr_value, flag);
+}
+
+int PMPI_Attr_put(MPI_Comm comm, int keyval, void* attr_value) {
+ if(keyval == MPI_TAG_UB||keyval == MPI_HOST||keyval == MPI_IO
+ ||keyval == MPI_WTIME_IS_GLOBAL||keyval == MPI_APPNUM
+ ||keyval == MPI_UNIVERSE_SIZE||keyval == MPI_LASTUSEDCODE)
+ return MPI_ERR_ARG;
+ else if (comm==MPI_COMM_NULL)
+ return MPI_ERR_COMM;
+ else
+ return smpi_comm_attr_put(comm, keyval, attr_value);