int pm_cgi (HTTP_INFO *info){ int i; tPM *conf; tPM temp; int ret = 0; conf = &sPm; memcpy (&temp, conf, sizeof (temp)); for (i = 0; i < info->argc; i ++) { char *ptr = info->argv[i]; //VOLTAGE if (strncmp (ptr, "PM_L1_VOLTAGE=", 14) == 0) temp.sLines[0].voltage = atol (ptr + 14); else if (strncmp (ptr, "PM_L2_VOLTAGE=", 14) == 0) temp.sLines[1].voltage = atol (ptr + 14); else if (strncmp (ptr, "PM_L3_VOLTAGE=", 14) == 0) temp.sLines[2].voltage = atol (ptr + 14); //CURRENT else if (strncmp (ptr, "PM_L1_CURRENT=", 14) == 0) temp.sLines[0].current = atol (ptr + 14); else if (strncmp (ptr, "PM_L2_CURRENT=", 14) == 0) temp.sLines[1].current = atol (ptr + 14); else if (strncmp (ptr, "PM_L3_CURRENT=", 14) == 0) temp.sLines[2].current = atol (ptr + 14); //POWER else if (strncmp (ptr, "PM_L1_POWER=", 12) == 0) temp.sLines[0].power = atol (ptr + 12); else if (strncmp (ptr, "PM_L2_POWER=", 12) == 0) temp.sLines[1].power = atol (ptr + 12); else if (strncmp (ptr, "PM_L3_POWER=", 12) == 0) temp.sLines[2].power = atol (ptr + 12); //ENERGY else if (strncmp (ptr, "PM_L1_ENERGY=", 13) == 0) temp.sLines[0].energy = atol (ptr + 13); else if (strncmp (ptr, "PM_L1_ENERGY=", 13) == 0) temp.sLines[1].energy = atol (ptr + 13); else if (strncmp (ptr, "PM_L1_ENERGY=", 13) == 0) temp.sLines[2].energy = atol (ptr + 13); } if (ret == 0) { if (memcmp (conf, &temp, sizeof (temp)) != 0) { if (pm_write_config (&temp) == 0) { memcpy (conf, &temp, sizeof (temp)); pm_stop(); pm_start(); } } } return ret; }
int user_stop (void) { // terminate_process (httpd_pidfile, 0); sys_stop (); net_stop (); io_stop (); pm_stop (); return 0; }
int pm_start (void){ pm_stop (); //nastaveni pocatecnich hodnot pm_default_config (&sPm); //precteni hodnot ze souboru a jejich nastaveni pm_read_config (&sPm); return 0; }
void do_profiling(const int *sizes, const size_t count) { const int repetitions = 50; const int size_field_width = 5; const int result_field_width = 15; const plan_constructor_t plan_constructors[] = { interpolate_plan_3d_naive_interleaved, interpolate_plan_3d_padding_aware_interleaved, interpolate_plan_3d_phase_shift_interleaved, }; const papi_event_t counters[] = { PAPI_TOT_CYC, PAPI_L3_TCM, PAPI_DP_OPS }; const size_t num_plan_constructors = sizeof(plan_constructors)/sizeof(plan_constructors[0]); const size_t num_counters = sizeof(counters)/sizeof(counters[0]); printf("%*s", size_field_width, ""); for(size_t constructor_index = 0; constructor_index < num_plan_constructors; ++constructor_index) { interpolate_plan plan = plan_constructors[constructor_index](1, 1, 1, 0); assert(plan != NULL); printf("%*s", (int) (result_field_width * num_counters), interpolate_get_name(plan)); interpolate_destroy_plan(plan); } printf("\n"); printf("%*s", size_field_width, ""); for(size_t constructor_index = 0; constructor_index < num_plan_constructors; ++constructor_index) { char name[PAPI_MAX_STR_LEN]; for(size_t i=0; i < num_counters; ++i) { PAPI_CHECK(PAPI_event_code_to_name(counters[i], name)); printf("%*s", result_field_width, name); } } printf("\n"); for(size_t size_index = 0; size_index < count; ++size_index) { const int layout = INTERLEAVED; const size_t size = sizes[size_index]; const size_t block_size = size * size * size; storage_t coarse, fine; storage_allocate(&coarse, layout, block_size); storage_allocate(&fine, layout, 8 * block_size); printf("%5zd", size); for(size_t constructor_index = 0; constructor_index < num_plan_constructors; ++constructor_index) { interpolate_plan plan = plan_constructors[constructor_index](size, size, size, 0); assert(plan != NULL); papi_multiplex_t multiplex; PAPI_CHECK(pm_init(&multiplex)); for(size_t i=0; i < num_counters; ++i) PAPI_CHECK(pm_add_event(&multiplex, counters[i])); for(int repetition = 0; repetition < repetitions; ++repetition) { PAPI_CHECK(pm_start(&multiplex)); execute_interpolate(plan, &coarse, &fine); PAPI_CHECK(pm_stop(&multiplex)); } for(size_t i=0; i < num_counters; ++i) { long long value; PAPI_CHECK(pm_count(&multiplex, counters[i], &value)); printf("%15lld", value); } PAPI_CHECK(pm_destroy(&multiplex)); interpolate_destroy_plan(plan); } printf("\n"); storage_free(&coarse); storage_free(&fine); } }