예제 #1
0
void ompi_compare_and_swap_f(char *origin_addr, char *compare_addr, char *result_addr,
                             MPI_Fint *datatype, MPI_Fint *target_rank, MPI_Aint *target_disp,
                             MPI_Fint *win, MPI_Fint *ierr)
{
    int c_ierr;
    MPI_Datatype c_datatype = PMPI_Type_f2c(*datatype);
    MPI_Win c_win = PMPI_Win_f2c(*win);

    c_ierr = PMPI_Compare_and_swap(OMPI_F2C_BOTTOM(origin_addr),
                                  OMPI_F2C_BOTTOM(compare_addr),
                                  OMPI_F2C_BOTTOM(result_addr),
                                  c_datatype,
                                  OMPI_FINT_2_INT(*target_rank),
                                  *target_disp, c_win);
    if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
}
예제 #2
0
파일: wrapper.c 프로젝트: rscohn2/MLSL
int MPI_Compare_and_swap(const void* origin_addr, const void* compare_addr, void* result_addr,
                         MPI_Datatype datatype, int target_rank, MPI_Aint target_disp, MPI_Win win)
{
    int ret;
    client_t* myclient = window_get_client(win);
    cqueue_t* mycqueue = client_get_cqueue(myclient);

    if (myclient == NULL)
        ret = PMPI_Compare_and_swap(origin_addr, compare_addr, result_addr, datatype,
                                    target_rank, target_disp, win);
    else
        ret = cqueue_compare_and_swap(mycqueue, origin_addr, compare_addr,
                                      result_addr, datatype, target_rank, target_disp, win);

    return ret;
}
int MPI_Compare_and_swap_C_Wrapper (void *origin_addr, void *compare_addr,
  void *result_addr, MPI_Datatype datatype, int target_rank,
  MPI_Aint target_disp, 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_COMPARE_AND_SWAP_EV, EVT_BEGIN, target_rank,
	  (datatype_size * target_disp), EMPTY, EMPTY, origin_addr);
	ierror = PMPI_Compare_and_swap (origin_addr, compare_addr, result_addr,
	  datatype, target_rank, target_disp, win);
	TRACE_MPIEVENT (TIME, MPI_COMPARE_AND_SWAP_EV, EVT_END, EMPTY, EMPTY,
	  EMPTY, EMPTY, EMPTY);

	updateStats_OTHER(global_mpi_stats);

	return ierror;
}