コード例 #1
0
ファイル: mpi_pcontrol.c プロジェクト: RSE-Cambridge/IPM
int ipm_control(const int ctl, char *cmd, void *data) 
{
  char *reg;
  
  switch( ctl ) 
    {
    case 1:   /* enter region, IPM1 compatible */
      CHECK_REGION(reg, cmd);
      if(reg) 
	ipm_region(1, reg);
      break;
      
    case -1:  /* exit region, IPM1 compatible */
      if(reg) 
	CHECK_REGION(reg, cmd);
      ipm_region(-1, reg);
      break;
      
      /* general case */
    case 0:
    default:
      if( !strncmp(cmd, "enter", 5) ) {
	CHECK_REGION(reg, data);
	if(reg)
	  ipm_region(1, reg);
      }
      
      if( !strncmp(cmd, "exit", 4) ) {
	CHECK_REGION(reg, data);
	if(reg)
	  ipm_region(-1, reg);
      }  

#ifdef HAVE_POSIXIO_TRACE
      if( !strncmp(cmd, "traceoff", 8) )
	task.tracestate = 0;
      if( !strncmp(cmd, "traceon", 7) )
	task.tracestate = 1;
#endif  
    }
  
  return 0;
}
コード例 #2
0
ファイル: regstack.c プロジェクト: RSE-Cambridge/IPM
void foobar() {
  ipm_region(1, "foobar");
  foo();
  bar();
  ipm_region(-1, "foobar");
}
コード例 #3
0
ファイル: regstack.c プロジェクト: RSE-Cambridge/IPM
void bar() {
  ipm_region(1, "bar");
  foo();
  ipm_region(-1, "bar");
}
コード例 #4
0
ファイル: regstack.c プロジェクト: RSE-Cambridge/IPM
void foo() {
  ipm_region(1, "foo");
  usleep(10000);
  ipm_region(-1, "foo");
}
コード例 #5
0
ファイル: xhpm.c プロジェクト: nci-australia/ipm_nci
int main(int argc, char *argv[]) {
 int i,j,k,ii,ireg,three_reg=0;
 double gflops;
 volatile double a = 0.5, b = 2.2;
 double c = 0.11;
 long int nflop=128*1024*1024;
 long int nfma = 0;

 task.flags = 0;
 ipm_init(task.flags);
/*
 IPM_CLEAR_TASKDATA(task);
 task.mpi_rank = 0;
 task.mpi_size = 1;
 task.hpm_eventset = 0;
*/
 task.flags |= IPM_HPM_ACTIVE;

 while(--argc && argv++) {
  if(!strcmp("-v",*argv)) {
    task.flags |= VERBOSE;
  } else if(!strcmp("-x",*argv)) {
    task.hpm_eventset = -1;
    task.flags &= ~IPM_HPM_ACTIVE;
  } else if(!strcmp("-r",*argv)) {
    three_reg = 1;
  } else if(!strcmp("-s",*argv)) {
    --argc; argv++;
    task.hpm_eventset = (int)atol(*argv);
  } else if(!strcmp("-n",*argv)) {
    --argc; argv++;
    nflop = atol(*argv);
/*    printf("nflop = 2 * %ld\n", nflop); */
  } else if(!strcmp("-fma",*argv)) {
    --argc; argv++;
    nfma = atol(*argv);
  }
 }

 ipm_hpm_start();

 if(0) {
  printf("IPM: %d hpm_test eventset=%d events :", task.mpi_rank, task.hpm_eventset);
  for(i=0;i<MAXSIZE_HPMCOUNTERS;i++) {
    ii = ipm_hpm_eorder[task.hpm_eventset][i];
    printf("%s ", ipm_hpm_ename[task.hpm_eventset][ii]);
  }
  printf("\n");

  for(ireg=0;ireg<MAXSIZE_REGION;ireg++) {
    printf("IPM: %d hpm_test init region(%d) %s count",
        task.mpi_rank,ireg, task.region_label[ireg]);
   for(i=0;i<MAXSIZE_HPMCOUNTERS;i++) {
    ii = ipm_hpm_eorder[task.hpm_eventset][i];
	printf(" %lld", task.hpm_count[ireg][task.hpm_eventset][ii]);
   }
   printf("\n");
  }
 }

 if(!three_reg) {
  ipm_region(1,"ipm_noregion");
  ipm_region(-1,"ipm_noregion");

  do_flops(nflop);
  do_fmas(nfma);

  ipm_region(-1,"ipm_noregion");
 } else {

  ipm_region(1,"ipm_noregion");
  do_flops(nflop);
  ipm_region(-1,"ipm_noregion");

  ipm_region(1,"a");
  do_flops(nflop*2);
  ipm_region(-1,"a");

  ipm_region(1,"b");
  do_flops(nflop*3);
  ipm_region(-1,"b");

 }

 ipm_hpm_stop();

 IPM_PRINT_TASKDATA(task);

 return 0;
}
コード例 #6
0
ファイル: ipm_core.c プロジェクト: nerscadmin/IPM
int ipm_finalize(int flags)
{
    int rv, i;

    if(ipm_state!=STATE_ACTIVE &&
            ipm_state!=STATE_NOTACTIVE ) {
        IPMERR("ipm_finalize() called with ipm_state=%d\n", ipm_state);
        return IPM_EOTHER;
    }

    ipm_state = STATE_IN_FINALIZE;

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

    /* update global timing statistics */
    gettimeofday( &(task.t_stop), 0);
    task.wtime   = ipm_wtime()  -task.wtime;
    task.utime   = ipm_utime()  -task.utime;
    task.stime   = ipm_stime()  -task.stime;
    task.mtime   = ipm_mtime()  -task.mtime;
    task.iotime  = ipm_iotime() -task.iotime;
    task.omptime = ipm_omptime()-task.omptime;

    ipm_get_procmem(&(task.procmem));
    task.procmem /= (1024.0*1024.0*1024.0);

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

#ifdef HAVE_PAPI
    //rstack_adjust_ctrs();
#endif

    /* write out banner report */
    if( !(task.flags&FLAG_REPORT_NONE) ) {
        fflush(stdout);
        ipm_banner(stdout);
    }

#if defined(HAVE_MPI) && defined(HAVE_CALLPATH)
    ipm_unify_callsite_ids();
#endif

    /* call output routine for each module */
    for( i=0; i<MAXNUM_MODULES; i++ ) {
        if( i==IPM_MODULE_SELFMONITOR ||
                i==IPM_MODULE_MPI)
            continue;

        if( modules[i].output!=0 ) {
            IPMDBG("calling output() for module %d\n", i);
            rv = modules[i].output(&(modules[i]), flags);
        }
    }

    ipm_write_profile_log();

    rstack_cleanup(ipm_rstack);

#ifdef HAVE_SELFMONITOR
    mod_selfmonitor_output(&(modules[IPM_MODULE_SELFMONITOR]), flags);
#endif


    /* call finalization routine for each module */
    for( i=0; i<MAXNUM_MODULES; i++ ) {

        if( modules[i].finalize!=0 ) {
            IPMDBG("calling finalize() for module %d\n", i);
            rv = modules[i].finalize(&(modules[i]), flags);
        }
    }

    /* TODO: check errors in modules */
    ipm_state=STATE_FINALIZED;

    return IPM_OK;
}
コード例 #7
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;
}