示例#1
0
文件: mtest.c 项目: mpoquet/simgrid
/* Free the storage associated with a window object */
void MTestFreeWin(MPI_Win * win)
{
    void *addr;
    int flag, merr;

    merr = MPI_Win_get_attr(*win, MPI_WIN_BASE, &addr, &flag);
    if (merr)
        MTestPrintError(merr);
    if (!flag) {
        MTestError("Could not get WIN_BASE from window");
    }
    if (addr) {
        void *val;
        merr = MPI_Win_get_attr(*win, mem_keyval, &val, &flag);
        if (merr)
            MTestPrintError(merr);
        if (flag) {
            if (val == (void *) 1) {
                free(addr);
            }
            else if (val == (void *) 2) {
                merr = MPI_Free_mem(addr);
                if (merr)
                    MTestPrintError(merr);
            }
            /* if val == (void *)0, then static data that must not be freed */
        }
    }
    merr = MPI_Win_free(win);
    if (merr)
        MTestPrintError(merr);
}
示例#2
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;
}
示例#3
0
int cmpi2readwin( MPI_Win win, int key, void *expected, const char *msg )
{
    void *attrval;
    int  flag;
    MPI_Win_get_attr( win, key, &attrval, &flag );
    if (!flag) {
	printf( " Error: flag false for Win_get_attr: %s\n", msg );
	return 1;
    }
    if (attrval != expected) {
	printf( " Error: expected %p but saw %p: %s\n", expected, attrval, msg );
	return 1;
    }
    return 0;
}
示例#4
0
文件: pio_server.c 项目: AZed/cdo
static
void getTimeStepData()
{
  int modelID;
  char text[1024];
  int nProcsModel = commInqNProcsModel ();
  void *getWinBaseAddr;
  int attrFound;

  xdebug("%s", "START");

  for ( modelID = 0; modelID < nProcsModel; modelID++ )
    clearModelWinBuffer(modelID);
  // todo put in correct lbs and ubs
  xmpi(MPI_Win_start(groupModel, 0, getWin));
  xmpi(MPI_Win_get_attr(getWin, MPI_WIN_BASE, &getWinBaseAddr, &attrFound));
  xassert(attrFound);
  for ( modelID = 0; modelID < nProcsModel; modelID++ )
    {
      xdebug("modelID=%d, nProcsModel=%d, rxWin[%d].size=%zu,"
             " getWin=%p, sizeof(int)=%u",
             modelID, nProcsModel, modelID, rxWin[modelID].size,
             getWinBaseAddr, (unsigned)sizeof(int));
      /* FIXME: this needs to use MPI_PACK for portability */
      xmpi(MPI_Get(rxWin[modelID].buffer, (int)rxWin[modelID].size,
                   MPI_UNSIGNED_CHAR, modelID, 0,
                   (int)rxWin[modelID].size, MPI_UNSIGNED_CHAR, getWin));
    }
  xmpi ( MPI_Win_complete ( getWin ));

  if ( ddebug > 2 )
    for ( modelID = 0; modelID < nProcsModel; modelID++ )
      {
        sprintf(text, "rxWin[%d].size=%zu from PE%d rxWin[%d].buffer",
                modelID, rxWin[modelID].size, modelID, modelID);
        xprintArray(text, rxWin[modelID].buffer,
                    (int)(rxWin[modelID].size / sizeof (double)),
                    DATATYPE_FLT);
      }
  readGetBuffers();

  xdebug("%s", "RETURN");
}
示例#5
0
/*
 * Class:     mpi_Win
 * Method:    getAttr_predefined
 * Signature: (JI)Ljava/lang/Object;
 */
JNIEXPORT jobject JNICALL Java_mpi_Win_getAttr(
        JNIEnv *env, jobject jthis, jlong win, jint keyval)
{
    int flag;
    void *val;
    int rc = MPI_Win_get_attr((MPI_Win)win, keyval, &val, &flag);

    if(ompi_java_exceptionCheck(env, rc) || !flag)
        return NULL;

    switch(keyval)
    {
        case MPI_WIN_SIZE:
            return ompi_java_Integer_valueOf(env, (jint)(*((MPI_Aint*)val)));
        case MPI_WIN_DISP_UNIT:
            return ompi_java_Integer_valueOf(env, (jint)(*((int*)val)));
        case MPI_WIN_BASE:
            return ompi_java_Long_valueOf(env, (jlong)val);
        default:
            return ompi_java_attrGet(env, val);
    }
}