Ejemplo n.º 1
0
int main(int argc, char **argv, char **envp)
{
#ifdef CONFIG_SMP
  /* In the SMP case, configure the main thread as CPU 0 */

  sim_cpu0initialize();
#endif

#ifdef CONFIG_PM
  /* Power management should be initialized early in the (simulated) boot
   * sequence.
   */

  pm_initialize();
#endif

  /* Then start NuttX */

  if (setjmp(g_simabort) == 0)
    {
      os_start();
    }

  /* Restore the original terminal mode and return the exit code */

  simuart_teriminate();
  return g_exitcode;
}
Ejemplo n.º 2
0
void up_pminitialize(void)
{
  /* Then initialize the NuttX power management subsystem proper */

  pm_initialize();

#if defined(CONFIG_IDLE_CUSTOM) && defined(CONFIG_PM_BUTTONS)
  /* Initialize the buttons to wake up the system from low power modes */

  up_pmbuttons();
#endif

  /* Initialize the LED PM */

  up_ledpminitialize();
}
int main(int argc, char **argv, char **envp)
{
  /* Power management should be initialized early in the (simulated) boot
   * sequence.
   */

#ifdef CONFIG_PM
  pm_initialize();
#endif

  /* Then start NuttX */

  if (setjmp(sim_abort) == 0)
    {
      os_start();
    }
  return 0;
}
Ejemplo n.º 4
0
static void HWC_PARAVER_Labels (FILE * pcfFD)
{
#if defined(PAPI_COUNTERS)
	struct fcounter_t *fcounter=NULL;
#elif defined(PMAPI_COUNTERS)
	pm_info2_t ProcessorMetric_Info; /* On AIX pre 5.3 it was pm_info_t */
	pm_groups_info_t HWCGroup_Info;
	pm_events2_t *evp = NULL;
	int j;
	int rc;
#endif
	int cnt = 0;
	int AddedCounters = 0;
	CntQueue *queue;
	CntQueue *ptmp;

#if defined(PMAPI_COUNTERS)
	rc = pm_initialize (PM_VERIFIED|PM_UNVERIFIED|PM_CAVEAT|PM_GET_GROUPS, &ProcessorMetric_Info, &HWCGroup_Info, PM_CURRENT);
	if (rc != 0)
		pm_error ("pm_initialize", rc);
#endif

	queue = &CountersTraced;

	for (ptmp = (queue)->prev; ptmp != (queue); ptmp = ptmp->prev)
	{
		for (cnt = 0; cnt < MAX_HWC; cnt++)
		{
			if (ptmp->Traced[cnt])
			{
#if defined(PAPI_COUNTERS)
				if (!Exist_Counter(fcounter,ptmp->Events[cnt]))
				{
					unsigned position;
					char *description;

					INSERTAR_CONTADOR (fcounter, ptmp->Events[cnt]);

					if (Labels_LookForHWCCounter (ptmp->Events[cnt], &position, &description))
					{
						if (AddedCounters == 0)
							fprintf (pcfFD, "%s\n", TYPE_LABEL);
						AddedCounters++;

						/* fprintf (pcfFD, "%d  %d %s\n", 7, HWC_COUNTER_TYPE(position), description); */
						fprintf (pcfFD, "%d  %d %s\n", 7, HWC_COUNTER_TYPE(ptmp->Events[cnt]), description);
						if (get_option_merge_AbsoluteCounters())
							fprintf (pcfFD, "%d  %d Absolute %s\n", 7, (HWC_COUNTER_TYPE(ptmp->Events[cnt]))+HWC_DELTA_ABSOLUTE, description);
					}
				}
#elif defined(PMAPI_COUNTERS)
				/* find pointer to the event */
				for (j = 0; j < ProcessorMetric_Info.maxevents[cnt]; j++)
				{ 
					evp = ProcessorMetric_Info.list_events[cnt]+j;  
					if (EvCnt == evp->event_id)
						break;    
				}
				if (evp != NULL)
				{
					if (AddedCounters == 0)
						fprintf (pcfFD, "%s\n", TYPE_LABEL);

					fprintf (pcfFD, "%d  %d %s (%s)\n", 7, HWC_COUNTER_TYPE(cnt, EvCnt), evp->short_name, evp->long_name);
					if (get_option_merge_AbsoluteCounters())
						fprintf (pcfFD, "%d  %d Absolute %s (%s)\n", 7, (HWC_COUNTER_TYPE(cnt, EvCnt))+HWC_DELTA_ABSOLUTE, evp->short_name, evp->long_name);
					AddedCounters++;
				}
#endif
			}
		}
	}

	if (AddedCounters > 0)
		fprintf (pcfFD, "%d  %d %s\n", 7, HWC_GROUP_ID, "Active hardware counter set");

	LET_SPACES (pcfFD);
}
Ejemplo n.º 5
0
void up_pminitialize(void)
{
    pm_initialize();
}
Ejemplo n.º 6
0
void ipm_hpm_start() {
    int i,j,k,rv;


#ifndef HPM_DISABLED

#ifdef HPM_PAPI
    char errstring[PAPI_MAX_STR_LEN];
    char event_name[PAPI_MAX_STR_LEN];
#endif

    if(task.hpm_eventset < 0) {
	return;
    }

    for(i=0;i<MAXSIZE_REGION;i++) {
	for(j=0;j<MAXSIZE_NEVENTSETS;j++) {
	    for(k=0;k<MAXSIZE_HPMCOUNTERS;k++) { 
		task.hpm_count[i][j][k] = 0;
	    }
	}
    }

#ifdef HPM_PAPI
/* Initialize the low level PAPI library */

    rv = PAPI_library_init(PAPI_VER_CURRENT);
    if(rv != PAPI_VER_CURRENT) {
	printf("IPM: %d papi_error library_init in hpm_start rv=%d \"%s\"\n",
	       task.mpi_rank,
	       rv,
	       PAPI_strerror(rv));
	PAPI_perror(rv, errstring, PAPI_MAX_STR_LEN);
	perror("PAPI_library_init");
    } 
    if(rv == PAPI_OK) {
	if(task.flags & DEBUG && task.mpi_rank==0) {
	    printf("IPM: %d PAPI_library_init in hpm_start rv=%d \"%s\"\n",
		   task.mpi_rank,
		   rv,
		   PAPI_strerror(rv));
	}
    }

#ifdef CPU_PPC450D
/* then we are on a bluegene P*/
    if (node_rank != 0 ) return;
#endif

    rv = PAPI_num_counters();
    if(rv < 0) {
	PAPI_perror(rv, errstring, PAPI_MAX_STR_LEN);
	printf("IPM: %d papi_error num_counters in hpm_start rv=%d \"%s\"\n",
	       task.mpi_rank,
	       rv,
	       PAPI_strerror(rv));
    }

    if ((hwinfo = PAPI_get_hardware_info()) == NULL) {
	PAPI_perror(rv, errstring, PAPI_MAX_STR_LEN);
	printf("IPM: %d papi_error PAPI_get_hardware_info in hpm_start rv=%d \"%s\"\n",
	       task.mpi_rank,
	       rv,
	       PAPI_strerror(rv));
    } else {
	/* do something clever wrt. formal machine description */
    }

    rv = PAPI_create_eventset(&papi_eventset[0]);
    if(rv != PAPI_OK) {
	PAPI_perror(rv, errstring, PAPI_MAX_STR_LEN);
	printf("IPM: %d papi_error create_eventset in hpmstart rv=%d \"%s\"\n",
	       task.mpi_rank,
	       rv,
	       PAPI_strerror(rv));
    }

    if(0) {
	printf("PAPI: JIE_DEBUG:: rank %d task.hpm_eventset is %d.\n",
	       task.mpi_rank, task.hpm_eventset);
	fflush(stdout);
    }

    for(i=0;i<MAXSIZE_HPMCOUNTERS;i++) {
       
	if (papi_event[task.hpm_eventset][i] != -1) {
	    rv = PAPI_query_event(papi_event[task.hpm_eventset][i]);

	    if (rv != PAPI_OK) {
		PAPI_perror(rv, errstring, PAPI_MAX_STR_LEN);
		PAPI_event_code_to_name(papi_event[task.hpm_eventset][i],event_name);
		printf("IPM: %d papi_error query_event %s %d \"%s\"\n",
		       task.mpi_rank, 
		       event_name,
		       rv,
		       PAPI_strerror(rv));
	    }
	   
	    rv = PAPI_add_event(papi_eventset[0], papi_event[task.hpm_eventset][i]);
	    if(rv != PAPI_OK) {
		PAPI_perror(rv, errstring, PAPI_MAX_STR_LEN);
		PAPI_event_code_to_name(papi_event[task.hpm_eventset][i],event_name);
		printf("IPM: %d papi_error add_event %s %d \"%s\"\n",
		       task.mpi_rank, 
		       event_name,
		       rv,
		       PAPI_strerror(rv));
	    }

	    if(0) {
		PAPI_event_code_to_name(papi_event[task.hpm_eventset][i],event_name);
		printf("PAPI: JIE_DEBUG:: rank %d add event %s.\n",
		       task.mpi_rank, event_name);
		fflush(stdout);
	    }
	}
    }
    rv = PAPI_start(papi_eventset[0]);
    if (rv != PAPI_OK) {
	PAPI_perror(rv, errstring, PAPI_MAX_STR_LEN);
	printf("IPM: %d papi_error: start in hpm_start rv=%d \"%s\"\n",
	       task.mpi_rank,
	       rv,
	       PAPI_strerror(rv));
	task.flags &= ~IPM_HPM_ACTIVE;
    }

#endif

#ifdef HPM_PMAPI
#ifdef AIX51
    rv = pm_init(PM_VERIFIED|PM_UNVERIFIED|PM_CAVEAT|PM_GET_GROUPS, &pmapi_info, &pmapi_groups_info);
#else 
    rv = pm_initialize(PM_VERIFIED|PM_UNVERIFIED|PM_CAVEAT|PM_GET_GROUPS, &pmapi_info, &pmapi_groups_info,PM_CURRENT);
#endif
 
    if(rv) {
	printf("IPM: %d pmapi_error: pm_initialize \n",
	       task.mpi_rank);
	pm_error("IPM: pmapi : pm_initialize",rv);
    }

    for(i=0;i<pmapi_info.maxpmcs;i++)
	pmapi_prog.events[i]=COUNT_NOTHING;
    pmapi_prog.mode.w          = 0;
    pmapi_prog.mode.b.user     = 1;
    pmapi_prog.mode.b.proctree = 1;

#ifndef POWER3

#ifdef CPU_POWER4
    pmapi_prog.mode.b.is_group  = 1;
    if(task.hpm_eventset == 0) { pmapi_prog.events[0]       = 60; }
    if(task.hpm_eventset == 1) { pmapi_prog.events[0]       = 59; }
    if(task.hpm_eventset == 2) { pmapi_prog.events[0]       =  5; }
    if(task.hpm_eventset == 3) { pmapi_prog.events[0]       = 58; }
    if(task.hpm_eventset == 4) { pmapi_prog.events[0]       = 53; }
#endif

#ifdef CPU_POWER5
    pmapi_prog.mode.b.is_group  = 1;
    if(task.hpm_eventset == 0) { pmapi_prog.events[0]       = 137; }
#endif

#ifdef CPU_POWER6
    pmapi_prog.mode.b.is_group  = 1;
/* use all the pm_hpm* groups 186 - 195 */
    pmapi_prog.events[0] = 186 + task.hpm_eventset;
#endif

#else 

    for(i=0;i<MAXSIZE_HPMCOUNTERS;i++) {
	pmapi_prog.events[i] = pmapi_event[task.hpm_eventset][i];
    }
#endif

    rv = pm_set_program_mythread(&pmapi_prog);
    if(rv) {
	printf("IPM: %d pmapi_error: pm_set_program_mythread\n",
	       task.mpi_rank);
	pm_error("IPM: pmapi : pm_set_program_mythread",rv);
    }
    rv = pm_start_mythread();
    if(rv) {
	printf("IPM: %d pmapi_error: pm_start_mythread\n",
	       task.mpi_rank);
	pm_error("IPM: pmapi : pm_start_mythread",rv);
	task.flags &= ~IPM_HPM_ACTIVE;
    }
    rv = pm_reset_data_mythread();
    if(rv) {
	printf("IPM: %d pmapi_error: pm_reset_data_mythread\n",
	       task.mpi_rank);
    }
#endif


#endif
    return;
}