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; }
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; }
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); }
void up_pminitialize(void) { pm_initialize(); }
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; }