Пример #1
0
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;
}