int MPI_Fetch_and_op(const void* origin_addr, void* result_addr, MPI_Datatype datatype, int target_rank, MPI_Aint target_disp, MPI_Op op, MPI_Win win) { int ret; client_t* myclient = window_get_client(win); cqueue_t* mycqueue = client_get_cqueue(myclient); if (myclient == NULL) ret = PMPI_Fetch_and_op(origin_addr, result_addr, datatype, target_rank, target_disp, op, win); else ret = cqueue_fetch_and_op(mycqueue, origin_addr, result_addr, datatype, target_rank, target_disp, op, win); return ret; }
int MPI_Fetch_and_op_C_Wrapper (void *origin_addr, void *result_addr, MPI_Datatype datatype, int target_rank, MPI_Aint target_disp, MPI_Op op, MPI_Win win) { int ierror; int datatype_size; ierror = PMPI_Type_size(datatype, &datatype_size); MPI_CHECK(ierror, PMPI_Type_size); TRACE_MPIEVENT (LAST_READ_TIME, MPI_FETCH_AND_OP_EV, EVT_BEGIN, target_rank, (datatype_size * target_disp), EMPTY, EMPTY, origin_addr); ierror = PMPI_Fetch_and_op (origin_addr, result_addr, datatype, target_rank, target_disp, op, win); TRACE_MPIEVENT (TIME, MPI_FETCH_AND_OP_EV, EVT_END, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY); updateStats_OTHER(global_mpi_stats); return ierror; }