geopm
Public Types | Public Member Functions | Static Public Member Functions | List of all members
geopm::PowerGovernorAgent Class Reference

#include <PowerGovernorAgent.hpp>

Inheritance diagram for geopm::PowerGovernorAgent:
Inheritance graph
[legend]
Collaboration diagram for geopm::PowerGovernorAgent:
Collaboration graph
[legend]

Public Types

enum  m_policy_e { M_POLICY_POWER, M_NUM_POLICY }
 
enum  m_plat_signal_e { M_PLAT_SIGNAL_PKG_POWER, M_PLAT_NUM_SIGNAL }
 
enum  m_trace_sample_e { M_TRACE_SAMPLE_PWR_BUDGET, M_TRACE_NUM_SAMPLE }
 
enum  m_sample_e { M_SAMPLE_POWER, M_SAMPLE_IS_CONVERGED, M_SAMPLE_POWER_ENFORCED, M_NUM_SAMPLE }
 

Public Member Functions

 PowerGovernorAgent ()
 
 PowerGovernorAgent (PlatformIO &platform_io, const PlatformTopo &platform_topo, std::unique_ptr< PowerGovernor > power_gov)
 
virtual ~PowerGovernorAgent ()
 
void init (int level, const std::vector< int > &fan_in, bool is_level_root) override
 Set the level where this Agent is active and push signals/controls for that level. More...
 
void validate_policy (std::vector< double > &policy) const override
 Called by Controller to validate incoming policy values and configure defaults requested in incoming policy. Policy sender can request default value with 'NaN' at the desired offset in the policy vector. Returned policy should not contain 'NaN's and be consumeable by descend and adjust_platform. More...
 
void split_policy (const std::vector< double > &in_policy, std::vector< std::vector< double > > &out_policy) override
 Called by Controller to split policy for children at next level down the tree. More...
 
bool do_send_policy (void) const override
 Called by Controller to determine if new policy values should be sent down the tree to the Agent's children. More...
 
void aggregate_sample (const std::vector< std::vector< double > > &in_sample, std::vector< double > &out_sample) override
 Aggregate samples from children for the next level up the tree. More...
 
bool do_send_sample (void) const override
 
void adjust_platform (const std::vector< double > &in_policy) override
 Adjust the platform settings based the policy from above. More...
 
bool do_write_batch (void) const override
 Called by the Controller to decide whether to call write_batch() to update platform controls. More...
 
void sample_platform (std::vector< double > &out_sample) override
 Read signals from the platform and interpret/aggregate these signals to create a sample which can be sent up the tree. More...
 
void wait (void) override
 Called by Controller to wait for sample period to elapse. This controls the cadence of the Controller main loop. More...
 
std::vector< std::pair< std::string, std::string > > report_header (void) const override
 Custom fields that will be added to the report header when this agent is used. More...
 
std::vector< std::pair< std::string, std::string > > report_host (void) const override
 Custom fields for the host section of the report. More...
 
std::map< uint64_t, std::vector< std::pair< std::string, std::string > > > report_region (void) const override
 Custom fields for each region in the report. More...
 
std::vector< std::string > trace_names (void) const override
 Column headers to be added to the trace. More...
 
std::vector< std::function< std::string(double)> > trace_formats (void) const override
 Returns format string for each column added to the trace. More...
 
void trace_values (std::vector< double > &values) override
 Called by Controller to get latest values to be added to the trace. More...
 
void enforce_policy (const std::vector< double > &policy) const override
 Enforce the policy one time with PlatformIO::write_control(). Called to enforce static policies in the absence of a Controller. More...
 
- Public Member Functions inherited from geopm::Agent
 Agent ()=default
 
virtual ~Agent ()=default
 

Static Public Member Functions

static std::string plugin_name (void)
 
static std::unique_ptr< Agentmake_plugin (void)
 
static std::vector< std::string > policy_names (void)
 
static std::vector< std::string > sample_names (void)
 
- Static Public Member Functions inherited from geopm::Agent
static std::vector< std::string > agent_names (void)
 
static std::unique_ptr< Agentmake_unique (const std::string &agent_name)
 
static int num_policy (const std::map< std::string, std::string > &dictionary)
 Used to look up the number of values in the policy vector sent down the tree for a specific Agent. This should be called with the dictionary returned by agent_factory().dictionary(agent_name) for the Agent of interest. More...
 
static int num_policy (const std::string &agent_name)
 Used to look up the number of values in the policy vector sent down the tree for a specific Agent. More...
 
static int num_sample (const std::map< std::string, std::string > &dictionary)
 Used to look up the number of values in the sample vector sent up the tree for a specific Agent. This should be called with the dictionary returned by agent_factory().dictionary(agent_name) for the Agent of interest. More...
 
static int num_sample (const std::string &agent_name)
 Used to look up the number of values in the sample vector sent up the tree for a specific Agent. More...
 
static std::vector< std::string > policy_names (const std::map< std::string, std::string > &dictionary)
 Used to look up the names of values in the policy vector sent down the tree for a specific Agent. This should be called with the dictionary returned by agent_factory().dictionary(agent_name) for the Agent of interest. More...
 
static std::vector< std::string > policy_names (const std::string &agent_name)
 Used to look up the names of values in the policy vector sent down the tree for a specific Agent. More...
 
static std::vector< std::string > sample_names (const std::map< std::string, std::string > &dictionary)
 Used to look up the names of values in the sample vector sent up the tree for a specific Agent. This should be called with the dictionary returned by agent_factory().dictionary(agent_name) for the Agent of interest. More...
 
static std::vector< std::string > sample_names (const std::string &agent_name)
 Used to look up the names of values in the sample vector sent up the tree for a specific Agent. More...
 
static std::map< std::string, std::string > make_dictionary (const std::vector< std::string > &policy_names, const std::vector< std::string > &sample_names)
 Used to create a correctly-formatted dictionary for an Agent at the time the Agent is registered with the factory. Concrete Agent classes may provide policy_names() and sample_names() methods to provide the vectors to be passed to this method. More...
 
static void aggregate_sample (const std::vector< std::vector< double > > &in_sample, const std::vector< std::function< double(const std::vector< double > &)> > &agg_func, std::vector< double > &out_sample)
 Generically aggregate a vector of samples given a vector of aggregation functions. This helper method applies a different aggregation function to each sample element while aggregating across child samples. More...
 

Additional Inherited Members

- Static Public Attributes inherited from geopm::Agent
static const std::string M_PLUGIN_PREFIX = "libgeopmagent_"
 

Member Enumeration Documentation

◆ m_plat_signal_e

Enumerator
M_PLAT_SIGNAL_PKG_POWER 
M_PLAT_NUM_SIGNAL 

◆ m_policy_e

Enumerator
M_POLICY_POWER 
M_NUM_POLICY 

◆ m_sample_e

Enumerator
M_SAMPLE_POWER 
M_SAMPLE_IS_CONVERGED 
M_SAMPLE_POWER_ENFORCED 
M_NUM_SAMPLE 

◆ m_trace_sample_e

Enumerator
M_TRACE_SAMPLE_PWR_BUDGET 
M_TRACE_NUM_SAMPLE 

Constructor & Destructor Documentation

◆ PowerGovernorAgent() [1/2]

geopm::PowerGovernorAgent::PowerGovernorAgent ( )

◆ PowerGovernorAgent() [2/2]

geopm::PowerGovernorAgent::PowerGovernorAgent ( PlatformIO platform_io,
const PlatformTopo platform_topo,
std::unique_ptr< PowerGovernor power_gov 
)

◆ ~PowerGovernorAgent()

geopm::PowerGovernorAgent::~PowerGovernorAgent ( )
virtualdefault

Member Function Documentation

◆ adjust_platform()

void geopm::PowerGovernorAgent::adjust_platform ( const std::vector< double > &  in_policy)
overridevirtual

Adjust the platform settings based the policy from above.

Parameters
[in]policySettings for each control in the policy.

Implements geopm::Agent.

◆ aggregate_sample()

void geopm::PowerGovernorAgent::aggregate_sample ( const std::vector< std::vector< double > > &  in_sample,
std::vector< double > &  out_sample 
)
overridevirtual

Aggregate samples from children for the next level up the tree.

Parameters
[in]in_sampleVector of sample vectors, one from each child.
[out]out_sampleAggregated sample values to be sent up to the parent.

Implements geopm::Agent.

◆ do_send_policy()

bool geopm::PowerGovernorAgent::do_send_policy ( void  ) const
overridevirtual

Called by Controller to determine if new policy values should be sent down the tree to the Agent's children.

Returns
True if the policy has been updated since last call.

Implements geopm::Agent.

◆ do_send_sample()

bool geopm::PowerGovernorAgent::do_send_sample ( void  ) const
overridevirtual
Returns
True if new samples were read since last call.

Implements geopm::Agent.

◆ do_write_batch()

bool geopm::PowerGovernorAgent::do_write_batch ( void  ) const
overridevirtual

Called by the Controller to decide whether to call write_batch() to update platform controls.

Returns
True if platform was adjusted, false otherwise.

Implements geopm::Agent.

◆ enforce_policy()

void geopm::PowerGovernorAgent::enforce_policy ( const std::vector< double > &  policy) const
overridevirtual

Enforce the policy one time with PlatformIO::write_control(). Called to enforce static policies in the absence of a Controller.

Reimplemented from geopm::Agent.

◆ init()

void geopm::PowerGovernorAgent::init ( int  level,
const std::vector< int > &  fan_in,
bool  is_level_root 
)
overridevirtual

Set the level where this Agent is active and push signals/controls for that level.

Parameters
[in]levelLevel of the tree where this agent is active. Note that only agents at level zero execute sample_platform() and adjust_platform().
[in]fan_inVector over level giving the the number of Agents that report to each root Agent operating at the level.
[in]is_level_rootTrue if the agent plays the role of root of the level. Only root agents for a level execute ascend() and descend().

Implements geopm::Agent.

◆ make_plugin()

std::unique_ptr< Agent > geopm::PowerGovernorAgent::make_plugin ( void  )
static

◆ plugin_name()

std::string geopm::PowerGovernorAgent::plugin_name ( void  )
static

◆ policy_names()

std::vector< std::string > geopm::PowerGovernorAgent::policy_names ( void  )
static

◆ report_header()

std::vector< std::pair< std::string, std::string > > geopm::PowerGovernorAgent::report_header ( void  ) const
overridevirtual

Custom fields that will be added to the report header when this agent is used.

Implements geopm::Agent.

◆ report_host()

std::vector< std::pair< std::string, std::string > > geopm::PowerGovernorAgent::report_host ( void  ) const
overridevirtual

Custom fields for the host section of the report.

Implements geopm::Agent.

◆ report_region()

std::map< uint64_t, std::vector< std::pair< std::string, std::string > > > geopm::PowerGovernorAgent::report_region ( void  ) const
overridevirtual

Custom fields for each region in the report.

Implements geopm::Agent.

◆ sample_names()

std::vector< std::string > geopm::PowerGovernorAgent::sample_names ( void  )
static

◆ sample_platform()

void geopm::PowerGovernorAgent::sample_platform ( std::vector< double > &  out_sample)
overridevirtual

Read signals from the platform and interpret/aggregate these signals to create a sample which can be sent up the tree.

Parameters
[out]sampleVector of agent specific sample values to be sent up the tree.
Todo:
should use EPOCH_ENERGY signal which doesn't currently exist

Implements geopm::Agent.

◆ split_policy()

void geopm::PowerGovernorAgent::split_policy ( const std::vector< double > &  in_policy,
std::vector< std::vector< double > > &  out_policy 
)
overridevirtual

Called by Controller to split policy for children at next level down the tree.

Parameters
[in]in_policyPolicy values from the parent.
[out]out_policyVector of policies to be sent to each child.

Implements geopm::Agent.

◆ trace_formats()

std::vector< std::function< std::string(double)> > geopm::PowerGovernorAgent::trace_formats ( void  ) const
overridevirtual

Returns format string for each column added to the trace.

Reimplemented from geopm::Agent.

◆ trace_names()

std::vector< std::string > geopm::PowerGovernorAgent::trace_names ( void  ) const
overridevirtual

Column headers to be added to the trace.

Implements geopm::Agent.

◆ trace_values()

void geopm::PowerGovernorAgent::trace_values ( std::vector< double > &  values)
overridevirtual

Called by Controller to get latest values to be added to the trace.

Implements geopm::Agent.

◆ validate_policy()

void geopm::PowerGovernorAgent::validate_policy ( std::vector< double > &  policy) const
overridevirtual

Called by Controller to validate incoming policy values and configure defaults requested in incoming policy. Policy sender can request default value with 'NaN' at the desired offset in the policy vector. Returned policy should not contain 'NaN's and be consumeable by descend and adjust_platform.

Parameters
[in,out]policyPolicy replace NaN's with defaults. If a value of policy is not NaN but the value is not supported by the Agent the method will throw a geopm::Exception with error code GEOPM_ERROR_INVALID.

Implements geopm::Agent.

◆ wait()

void geopm::PowerGovernorAgent::wait ( void  )
overridevirtual

Called by Controller to wait for sample period to elapse. This controls the cadence of the Controller main loop.

Implements geopm::Agent.


The documentation for this class was generated from the following files: