Skip to content
Snippets Groups Projects
Select Git revision
  • 155e09b221dbe68847a520f438519be16c4f98a0
  • master default
  • add-pmdusb
  • 1.3.1
  • 1.3.0
  • 1.2.0
  • 1.1.0
  • 1.0.0
8 results

RaplImpl.cpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    RaplImpl.cpp 6.71 KiB
    #include <algorithm>
    #include <iostream>
    #include <fstream>
    #include <stdexcept>
    
    #include <unistd.h>
    
    #include "RaplImpl.h"
    
    namespace {
    std::vector<int> GetActiveCPUs() {
      cpu_set_t cpu_set;
      CPU_ZERO(&cpu_set);
    
      const int result = sched_getaffinity(0, sizeof(cpu_set), &cpu_set);
      if (result == -1) {
        throw std::system_error(errno, std::generic_category(),
                                "sched_getaffinity");
      }
    
      const int n_cpus = sysconf(_SC_NPROCESSORS_ONLN);
    
      std::vector<int> active_cpus;
      for (int cpu = 0; cpu < n_cpus; ++cpu) {
        if (CPU_ISSET(cpu, &cpu_set)) {
          active_cpus.push_back(cpu);
        }
      }
    
      return active_cpus;
    }
    
    template <typename T>
    void RemoveDuplicates(std::vector<T>& v) {
      std::sort(v.begin(), v.end());
      v.erase(std::unique(v.begin(), v.end()), v.end());
    }
    }  // namespace
    
    namespace pmt::rapl {
    
    RaplState::operator pmt::State() {
      State state;
      state.timeAtRead = timeAtRead;
      state.joulesAtRead = consumedEnergyTotal;
      state.misc.reserve(measurements.size());
      for (size_t i = 0; i < measurements.size(); i++) {
        const rapl::RaplMeasurement& m = measurements[i];
        const std::string name = m.name;
        const double value = measurements[i].value;
        state.misc.push_back({name, value});
      }
      return state;
    }
    
    RaplImpl::RaplImpl() {
      Init();
      StartThread();
    }
    
    RaplImpl::~RaplImpl() {
      stopDumpThread();
      StopThread();
    }
    
    std::vector<int> RaplImpl::DetectPackages() {
      std::string filename;
      std::ifstream file;
    
      const int n_cpus = sysconf(_SC_NPROCESSORS_ONLN);