예제 #1
0
void cmpif2readwin_( MPI_Fint *fwin, MPI_Fint *fkey, MPI_Aint *expected, 
		     MPI_Fint *errs, const char *msg, int msglen )
{
    void *attrval;
    int  flag, result;
    MPI_Win win = MPI_Win_f2c( *fwin );
    char lmsg[MAX_ATTRTEST_MSG];

    if (msglen > sizeof(lmsg)- 1) {
	fprintf( stderr, "Message too long for buffer (%d)\n", msglen );
	MPI_Abort( MPI_COMM_WORLD, 1 );
    }

    MPI_Win_get_attr( win, *fkey, &attrval, &flag );
    if (!flag) {
	*errs = *errs + 1;
	strncpy( lmsg, msg, msglen );
	lmsg[msglen] = 0;
	printf( " Error: flag false for Win_get_attr (set in F2): %s\n", lmsg );
	return;
    }
    ccompareaint2void_( expected, attrval, &result );
    if (!result) {
	*errs = *errs + 1;
	strncpy( lmsg, msg, msglen );
	lmsg[msglen] = 0;
	printf( " Error: (set in F2/Win) expected %ld but saw %ld: %s\n", 
		(long)*expected, (long)*(MPI_Aint*)attrval, lmsg );
	return;
    }
    return;
}
예제 #2
0
void mpi_win_set_name_f(MPI_Fint *win, char *win_name, MPI_Fint *ierr,
			int name_len)
{
    int ret, c_err;
    char *c_name;
    MPI_Win c_win;

    c_win = MPI_Win_f2c(*win);

    /* Convert the fortran string */

    if (OMPI_SUCCESS != (ret = ompi_fortran_string_f2c(win_name, name_len,
                                                       &c_name))) {
        c_err = OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, ret,
				       "MPI_WIN_SET_NAME");
	*ierr = OMPI_INT_2_FINT(c_err);
        return;
    }

    /* Call the C function */

    *ierr = OMPI_INT_2_FINT(MPI_Win_set_name(c_win, c_name));

    /* Free the C name */

    free(c_name);
}
예제 #3
0
void csetmpiwin_( MPI_Fint *fwin, MPI_Fint *fkey, MPI_Aint *val, 
		  MPI_Fint *errs )
{
    MPI_Win win = MPI_Win_f2c( *fwin );
    
    MPI_Win_set_attr( win, *fkey, (void *)*val );
}
void ompi_win_flush_local_f(MPI_Fint *rank, MPI_Fint *win, MPI_Fint *ierr)
{
    int c_ierr;
    MPI_Win c_win = MPI_Win_f2c(*win);

    c_ierr = MPI_Win_flush_local(OMPI_FINT_2_INT(*rank), c_win);
    if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
}
예제 #5
0
void ompi_win_fence_f(MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr)
{
    int c_ierr;
    MPI_Win c_win = MPI_Win_f2c(*win);
    
    c_ierr = MPI_Win_fence(OMPI_FINT_2_INT(*assert), c_win);
    if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
}
예제 #6
0
void ompi_win_wait_f(MPI_Fint *win, MPI_Fint *ierr)
{
    int c_ierr;
    MPI_Win c_win = MPI_Win_f2c(*win);

    c_ierr = MPI_Win_wait(c_win);
    if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
}
예제 #7
0
void ompi_win_delete_attr_f(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Fint *ierr)
{
    int c_ierr;
    MPI_Win c_win = MPI_Win_f2c(*win);

    c_ierr = MPI_Win_delete_attr(c_win, OMPI_FINT_2_INT(*win_keyval));
    if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
}
void mpi_win_set_errhandler_f(MPI_Fint *win, MPI_Fint *errhandler,
			      MPI_Fint *ierr)
{
    MPI_Win c_win = MPI_Win_f2c(*win);
    MPI_Errhandler c_err = MPI_Errhandler_f2c(*errhandler);

    *ierr = OMPI_INT_2_FINT(MPI_Win_set_errhandler(c_win, c_err));
}
예제 #9
0
void ompi_win_set_errhandler_f(MPI_Fint *win, MPI_Fint *errhandler,
			      MPI_Fint *ierr)
{
    int c_ierr;
    MPI_Win c_win = MPI_Win_f2c(*win);
    MPI_Errhandler c_err = MPI_Errhandler_f2c(*errhandler);

    c_ierr = MPI_Win_set_errhandler(c_win, c_err);
    if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
}
예제 #10
0
파일: win_post_f.c 프로젝트: aosm/openmpi
void mpi_win_post_f(MPI_Fint *group, MPI_Fint *assert,
		    MPI_Fint *win, MPI_Fint *ierr)
{
    MPI_Win c_win = MPI_Win_f2c(*win);
    MPI_Group c_grp = MPI_Group_f2c(*group);

    *ierr = OMPI_INT_2_FINT(MPI_Win_post(c_grp, 
					 OMPI_FINT_2_INT(*assert),
					 c_win));
}
예제 #11
0
void ompi_win_get_info_f(MPI_Fint *win, MPI_Fint *info, MPI_Fint *ierr)
{
    int c_ierr;
    MPI_Win c_win;
    MPI_Info c_info;

    c_win = MPI_Win_f2c(*win);
    c_ierr = MPI_Win_get_info(c_win, &c_info);
    if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
    *info = MPI_Info_c2f(c_info);
}
예제 #12
0
void ompi_win_lock_f(MPI_Fint *lock_type, MPI_Fint *rank,
		    MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr)
{
    int c_ierr;
    MPI_Win c_win = MPI_Win_f2c(*win);

    c_ierr = MPI_Win_lock(OMPI_FINT_2_INT(*lock_type),
                          OMPI_FINT_2_INT(*rank),
                          OMPI_FINT_2_INT(*assert),
                          c_win);
    if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
}
예제 #13
0
void ompi_win_free_f(MPI_Fint *win, MPI_Fint *ierr)
{
    int c_ierr;
    MPI_Win c_win = MPI_Win_f2c(*win);

    c_ierr = MPI_Win_free(&c_win);
    if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);

    if (MPI_SUCCESS == c_ierr) {
       *win = MPI_Win_c2f(c_win);
    }
}
예제 #14
0
void ompi_win_post_f(MPI_Fint *group, MPI_Fint *assert,
		    MPI_Fint *win, MPI_Fint *ierr)
{
    int c_ierr;
    MPI_Win c_win = MPI_Win_f2c(*win);
    MPI_Group c_grp = MPI_Group_f2c(*group);

    c_ierr = MPI_Win_post(c_grp, 
                          OMPI_FINT_2_INT(*assert),
                          c_win);
    if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
}
예제 #15
0
void ompi_win_get_errhandler_f(MPI_Fint *win, MPI_Fint *errhandler,
			      MPI_Fint *ierr)
{
    int c_ierr;
    MPI_Errhandler c_err;
    MPI_Win c_win = MPI_Win_f2c(*win);

    c_ierr = MPI_Win_get_errhandler(c_win, &c_err);
    if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);

    if (MPI_SUCCESS == c_ierr) {
        *errhandler = MPI_Errhandler_c2f(c_err);
    }
}
예제 #16
0
void mpi_win_get_attr_f(MPI_Fint *win, MPI_Fint *win_keyval,
                        MPI_Aint *attribute_val, MPI_Flogical *flag, MPI_Fint *ierr)
{
    int c_err;
    MPI_Win c_win = MPI_Win_f2c(*win);
    OMPI_LOGICAL_NAME_DECL(flag);

    /* This stuff is very confusing.  Be sure to see the comment at
       the top of src/attributes/attributes.c. */

    c_err = ompi_attr_get_fortran_mpi2(c_win->w_keyhash,
                                       OMPI_FINT_2_INT(*win_keyval),
                                       attribute_val,
                                       OMPI_LOGICAL_SINGLE_NAME_CONVERT(flag));
    *ierr = OMPI_INT_2_FINT(c_err);
    OMPI_SINGLE_INT_2_LOGICAL(flag);
}
예제 #17
0
void mpi_win_set_attr_f(MPI_Fint *win, MPI_Fint *win_keyval,
			MPI_Aint *attribute_val, MPI_Fint *ierr)
{
    int c_err;
    MPI_Win c_win = MPI_Win_f2c(*win);

    /* This stuff is very confusing.  Be sure to see the comment at
       the top of src/attributes/attributes.c. */

    c_err = ompi_attr_set_fortran_mpi2(WIN_ATTR,
                                       c_win,
                                       &c_win->w_keyhash,
                                       OMPI_FINT_2_INT(*win_keyval), 
                                       *attribute_val,
                                       false);
    *ierr = OMPI_INT_2_FINT(c_err);
}
예제 #18
0
void ompi_accumulate_f(char *origin_addr, MPI_Fint *origin_count,
		      MPI_Fint *origin_datatype, MPI_Fint *target_rank,
		      MPI_Aint *target_disp, MPI_Fint *target_count,
		      MPI_Fint *target_datatype, MPI_Fint *op, MPI_Fint *win,
		      MPI_Fint *ierr)
{
    int ierr_c;

    MPI_Datatype c_origin_datatype = MPI_Type_f2c(*origin_datatype);
    MPI_Datatype c_target_datatype = MPI_Type_f2c(*target_datatype);
    MPI_Win c_win = MPI_Win_f2c(*win);
    MPI_Op c_op = MPI_Op_f2c(*op);

    ierr_c = MPI_Accumulate(OMPI_F2C_BOTTOM(origin_addr), 
                            OMPI_FINT_2_INT(*origin_count),
                            c_origin_datatype, 
                            OMPI_FINT_2_INT(*target_rank),
                            *target_disp,
                            OMPI_FINT_2_INT(*target_count),
                            c_target_datatype, c_op, c_win);

    if (NULL != ierr) *ierr = OMPI_INT_2_FINT(ierr_c);
}
예제 #19
0
void mpi_win_fence_f(MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr)
{
    MPI_Win c_win = MPI_Win_f2c(*win);
    
    *ierr = OMPI_INT_2_FINT(MPI_Win_fence(OMPI_FINT_2_INT(*assert), c_win));
}
예제 #20
0
파일: win_wait_f.c 프로젝트: aosm/openmpi
void mpi_win_wait_f(MPI_Fint *win, MPI_Fint *ierr)
{
    MPI_Win c_win = MPI_Win_f2c(*win);

    *ierr = OMPI_INT_2_FINT(MPI_Win_wait(c_win));
}
예제 #21
0
EXPORT_MPI_API void FORTRAN_API mpi_win_fence_ (MPI_Fint *assert, MPI_Fint *win, MPI_Fint *__ierr)
{
	*__ierr = MPI_Win_fence ((int)*assert, MPI_Win_f2c(*win));
}