Skip to content

Commit

Permalink
Adding PAPI RAPL power measurement
Browse files Browse the repository at this point in the history
  • Loading branch information
khuck committed Jun 3, 2019
1 parent 53a0b94 commit fd42adf
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 25 deletions.
21 changes: 10 additions & 11 deletions src/apex/apex.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -283,17 +283,7 @@ void apex::_initialize()
listeners.push_back(this->m_policy_handler);
}
}
#if APEX_HAVE_PROC
if (apex_options::use_proc_cpuinfo() ||
apex_options::use_proc_meminfo() ||
apex_options::use_proc_net_dev() ||
apex_options::use_proc_self_status() ||
apex_options::use_proc_stat()) {
pd_reader = new proc_data_reader();
} else {
pd_reader = nullptr;
}
#endif
pd_reader = nullptr;
this->resize_state(1);
this->set_state(0, APEX_BUSY);
}
Expand Down Expand Up @@ -414,6 +404,15 @@ uint64_t init(const char * thread_name, uint64_t comm_rank,
instance->listeners[i]->on_startup(data);
}
}
#if APEX_HAVE_PROC
if (apex_options::use_proc_cpuinfo() ||
apex_options::use_proc_meminfo() ||
apex_options::use_proc_net_dev() ||
apex_options::use_proc_self_status() ||
apex_options::use_proc_stat()) {
instance->pd_reader = new proc_data_reader();
}
#endif
if (apex_options::top_level_os_threads()) {
// start top-level timers for threads
if (thread_name) {
Expand Down
32 changes: 18 additions & 14 deletions src/apex/proc_read.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ namespace apex {
#include "papi.h"

static bool papi_initialized = false;
static int EventSet = PAPI_NULL;
static int EventSet;

void initialize_papi_events(void) {
char events[6][BUFSIZ] = {
Expand All @@ -74,7 +74,7 @@ void initialize_papi_events(void) {
return;
}
// do we have the RAPL components?
if (strstr(comp_info->name, "linux-rapl")) {
if (strstr(comp_info->name, "rapl")) {
printf("PAPI RAPL component found...\n");
if (comp_info->num_native_events == 0) {
fprintf(stderr, "No RAPL events found.\n");
Expand All @@ -87,6 +87,7 @@ void initialize_papi_events(void) {
if (!comp_found) {
return;
}
EventSet = PAPI_NULL;
int retval = PAPI_create_eventset(&EventSet);
if (retval != PAPI_OK) {
fprintf(stderr, "Error creating PAPI eventset.\n");
Expand Down Expand Up @@ -120,9 +121,9 @@ void read_papi_power(ProcData * data) {
return;
}
long long values[6];
int retval = PAPI_stop(EventSet, values);
int retval = PAPI_read(EventSet, values);
if (retval != PAPI_OK) {
fprintf(stderr, "Error stopping PAPI eventset.\n");
fprintf(stderr, "Error reading PAPI eventset.\n");
return;
}
data->package_energy_package0 = values[0];
Expand All @@ -131,8 +132,8 @@ void read_papi_power(ProcData * data) {
data->dram_energy_package1 = values[3];
data->pp0_energy_package0 = values[4];
data->pp0_energy_package1 = values[5];
data->uncore_energy_package0 = values[0]-values[4];
data->uncore_energy_package1 = values[1]-values[5];
data->uncore_energy_package0 = data->package_energy_package0-data->pp0_energy_package0;
data->uncore_energy_package1 = data->package_energy_package1-data->pp0_energy_package1;
return;
}

Expand Down Expand Up @@ -422,14 +423,14 @@ void ProcData::sample_values(void) {
#endif
#if defined(APEX_HAVE_PAPI)
if (papi_initialized) {
sample_value("PACKAGE_ENERGY_PACKAGE_0", package_energy_package0);
sample_value("PACKAGE_ENERGY_PACKAGE_1", package_energy_package1);
sample_value("DRAM_ENERGY_PACKAGE_0", dram_energy_package0);
sample_value("DRAM_ENERGY_PACKAGE_1", dram_energy_package1);
sample_value("PP0_ENERGY_PACKAGE_0", pp0_energy_package0);
sample_value("PP0_ENERGY_PACKAGE_1", pp0_energy_package1);
sample_value("UNCORE_ENERGY_PACKAGE_0", uncore_energy_package0);
sample_value("UNCORE_ENERGY_PACKAGE_1", uncore_energy_package1);
sample_value("Package-0 Energy (J)", (double)(package_energy_package0)/1.0e9);
sample_value("Package-1 Energy (J)", (double)(package_energy_package1)/1.0e9);
sample_value("DRAM-0 Energy (J)", (double)(dram_energy_package0)/1.0e9);
sample_value("DRAM-1 Energy (J)", (double)(dram_energy_package1)/1.0e9);
sample_value("PowerPlane-0 Energy (J)", (double)(pp0_energy_package0)/1.0e9);
sample_value("PowerPlane-1 Energy (J)", (double)(pp0_energy_package1)/1.0e9);
sample_value("Uncore-0 Energy (J)", (double)(uncore_energy_package0)/1.0e9);
sample_value("Uncore-1 Energy (J)", (double)(uncore_energy_package1)/1.0e9);
}
#endif
}
Expand Down Expand Up @@ -704,6 +705,9 @@ void* proc_data_reader::read_proc(void * _ptw) {
tau_listener::Tau_start_wrapper("proc_data_reader::read_proc");
}
if (done) { return nullptr; }
#if defined(APEX_HAVE_PAPI)
initialize_papi_events();
#endif
#ifdef APEX_HAVE_LM_SENSORS
sensor_data * mysensors = new sensor_data();
#endif
Expand Down

0 comments on commit fd42adf

Please sign in to comment.