コード例 #1
0
ファイル: regstack.c プロジェクト: RSE-Cambridge/IPM
void ipm_region(int op, char *tag) 
{
  int i;
  struct region *reg;
  
  switch( op ) 
    {
    case -1: /* exit */
      
      ipm_region_end(ipm_rstackptr);
      ipm_rstackptr->nexecs++;

      if( ipm_rstackptr->parent ) {
	ipm_rstackptr=ipm_rstackptr->parent;
      }
      
      break;
      
    case 1: /* enter */
      
      /* find region among child regions of current ipm_rstackptr */
      reg = ipm_rstackptr->child;
      while(reg) {
	if( !(strncmp(reg->name, tag, MAXSIZE_REGLABEL)) ) {
	  ipm_rstackptr=reg;
	  break;
	}
	reg=reg->next;
      }
      if( !reg ) {
	/* region not found, create new one */
	reg=(region_t*)IPM_MALLOC(sizeof(region_t));
	rstack_init_region(reg, tag);
	reg->parent=ipm_rstackptr;
	
	if( !(ipm_rstackptr->child) ) {
	  ipm_rstackptr->child=reg;
	}
	else {
	  ipm_rstackptr=ipm_rstackptr->child;
	  while(ipm_rstackptr->next)
	    ipm_rstackptr=ipm_rstackptr->next;
	  ipm_rstackptr->next=reg;
	}

	ipm_rstackptr=reg;
      }
      ipm_region_begin(ipm_rstackptr);
      
      break;
    }
}
コード例 #2
0
ファイル: ipm_core.c プロジェクト: nerscadmin/IPM
int ipm_init(int flags)
{
    int i, state, rv;
    double t_init;
    char cmdline[MAXSIZE_CMDLINE];
    char realpath[MAXSIZE_CMDLINE];
    char *target;

    state=ipm_state;
    ipm_state=STATE_IN_INIT;

    /* check if IPM_TARGET is set and if it is,
       only monitor matching processes */
    target=getenv("IPM_TARGET");
    ipm_get_exec_cmdline(cmdline,realpath);

    /* IPM_TARGET specifies string that has to appear in cmdline */
    if( target && target[0]!='!' && !strstr(cmdline,target) ) {
        ipm_state=STATE_NOTACTIVE;
        return IPM_OK;
    }

    /* IPM_TARGET specifies string that must not appear in cmdline */
    if( target && target[0]=='!' && strstr(cmdline,target) ) {
        ipm_state=STATE_NOTACTIVE;
        return IPM_OK;
    }

    ipm_time_init(flags);

    rstack_init(flags);

    t_init = ipm_wtime();
    taskdata_init(&task);
    htable_init(ipm_htable);

    /* need to get env variables before modules init */
    ipm_get_env();

    /* init local data structures */
    for( i=0; i<MAXNUM_MODULES; i++ ) {
        ipm_module_init( &(modules[i]) );
    }

    /* --- initialize modules --- */

#ifdef HAVE_MPI
    modules[IPM_MODULE_MPI].init=mod_mpi_init;
#endif

#ifdef HAVE_POSIXIO
    modules[IPM_MODULE_POSIXIO].init=mod_posixio_init;
#endif

#ifdef HAVE_MPIIO
    modules[IPM_MODULE_MPIIO].init=mod_mpiio_init;
#endif

#ifdef HAVE_CALLPATH
    modules[IPM_MODULE_CALLPATH].init=mod_callpath_init;
#endif

#ifdef HAVE_KEYHIST
    modules[IPM_MODULE_KEYHIST].init=mod_keyhist_init;
#endif

#ifdef HAVE_PAPI
    modules[IPM_MODULE_PAPI].init=mod_papi_init;
#endif

#ifdef HAVE_SELFMONITOR
    modules[IPM_MODULE_SELFMONITOR].init=mod_selfmonitor_init;
#endif

#ifdef HAVE_PROCCTRL
    modules[IPM_MODULE_PROCCTRL].init=mod_procctrl_init;
#endif

#ifdef HAVE_CLUSTERING
    modules[IPM_MODULE_CLUSTERING].init=mod_clustering_init;
#endif

#ifdef HAVE_OMPTRACEPOINTS
    modules[IPM_MODULE_OMPTRACEPOINTS].init=mod_omptracepoints_init;
#endif

#ifdef HAVE_CUDA
    modules[IPM_MODULE_CUDA].init=mod_cuda_init;
#endif

#ifdef HAVE_CUFFT
    modules[IPM_MODULE_CUFFT].init=mod_cufft_init;
#endif

#ifdef HAVE_CUBLAS
    modules[IPM_MODULE_CUBLAS].init=mod_cublas_init;
#endif


    /* TODO: handle errors in module initialization, set
       ipm_state to STATE_ERROR */

    for( i=0; i<MAXNUM_MODULES; i++ ) {
        if( modules[i].init ) { /* call init function if it is set */
            rv=modules[i].init(&(modules[i]), flags);
            if(rv!=IPM_OK) {
                IPMERR("Error initializing module %d (%s), error %d\n",
                       i, modules[i].name?modules[i].name:"", rv);
            }

#ifdef HAVE_MPI
            if( i==IPM_MODULE_POSIXIO )
                modules[i].state=STATE_NOTACTIVE;
#endif
        }
    }

    /* --- done initializing modules --- */


#ifdef DELAYED_MPI_FINALIZE
    rv = atexit(ipm_atexit_handler);
    if(!rv) {
        task.flags|=FLAG_USING_ATEXIT;
    } else {
        IPMERR("Error installing atexit() handler\n");
        task.flags&=~FLAG_USING_ATEXIT;
    }
#endif

    signal(SIGXCPU, ipm_sig_handler);
    signal(SIGTERM, ipm_sig_handler);
    signal(SIGABRT, ipm_sig_handler);

#ifdef HAVE_SELFMONITOR
    ipm_selfmon.t_init = ipm_wtime()-t_init;
#endif

    /* this should be close to user code */
    ipm_region(1, "ipm_main");
    ipm_region_begin(&ipm_app);

    ipm_state=STATE_ACTIVE;
    return IPM_OK;
}