geopm
3.1.1.dev272+gdfb40a8d
GEOPM - Global Extensible Open Power Manager
|
#include <Agent.hpp>
Public Member Functions | |
Agent ()=default | |
virtual | ~Agent ()=default |
virtual void | init (int level, const std::vector< int > &fan_in, bool is_level_root)=0 |
Set the level where this Agent is active and push signals/controls for that level. More... | |
virtual void | validate_policy (std::vector< double > &policy) const =0 |
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... | |
virtual void | split_policy (const std::vector< double > &in_policy, std::vector< std::vector< double > > &out_policy)=0 |
Called by Controller to split policy for children at next level down the tree. More... | |
virtual bool | do_send_policy (void) const =0 |
Called by Controller to determine if new policy values should be sent down the tree to the Agent's children. More... | |
virtual void | aggregate_sample (const std::vector< std::vector< double > > &in_sample, std::vector< double > &out_sample)=0 |
Aggregate samples from children for the next level up the tree. More... | |
virtual bool | do_send_sample (void) const =0 |
virtual void | adjust_platform (const std::vector< double > &in_policy)=0 |
Adjust the platform settings based the policy from above. More... | |
virtual bool | do_write_batch (void) const =0 |
Called by the Controller to decide whether to call write_batch() to update platform controls. More... | |
virtual void | sample_platform (std::vector< double > &out_sample)=0 |
Read signals from the platform and interpret/aggregate these signals to create a sample which can be sent up the tree. More... | |
virtual void | wait (void)=0 |
Called by Controller to wait for sample period to elapse. This controls the cadence of the Controller main loop. More... | |
virtual std::vector< std::pair< std::string, std::string > > | report_header (void) const =0 |
Custom fields that will be added to the report header when this agent is used. More... | |
virtual std::vector< std::pair< std::string, std::string > > | report_host (void) const =0 |
Custom fields for the host section of the report. More... | |
virtual std::map< uint64_t, std::vector< std::pair< std::string, std::string > > > | report_region (void) const =0 |
Custom fields for each region in the report. More... | |
virtual std::vector< std::string > | trace_names (void) const =0 |
Column headers to be added to the trace. More... | |
virtual std::vector< std::function< std::string(double)> > | trace_formats (void) const |
Returns format string for each column added to the trace. More... | |
virtual void | trace_values (std::vector< double > &values)=0 |
Called by Controller to get latest values to be added to the trace. More... | |
virtual void | enforce_policy (const std::vector< double > &policy) const =0 |
Enforce the policy one time with PlatformIO::write_control(). Called to enforce static policies in the absence of a Controller. More... | |
Static Public Member Functions | |
static std::vector< std::string > | agent_names (void) |
static std::unique_ptr< Agent > | make_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... | |
Static Public Attributes | |
static const std::string | M_PLUGIN_PREFIX = "libgeopmagent_" |
|
default |
|
virtualdefault |
|
pure virtual |
Adjust the platform settings based the policy from above.
[in] | policy | Settings for each control in the policy. |
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
static |
|
static |
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.
[in] | in_sample | Vector over children of the sample vector received from each child. |
[in] | agg_func | A vector over agent samples of the aggregation function that is applied. |
[out] | out_sample | Sample vector resulting from the applying the aggregation across child samples. |
|
pure virtual |
Aggregate samples from children for the next level up the tree.
[in] | in_sample | Vector of sample vectors, one from each child. |
[out] | out_sample | Aggregated sample values to be sent up to the parent. |
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
pure virtual |
Called by Controller to determine if new policy values should be sent down the tree to the Agent's children.
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
pure virtual |
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
pure virtual |
Called by the Controller to decide whether to call write_batch() to update platform controls.
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
pure virtual |
Enforce the policy one time with PlatformIO::write_control(). Called to enforce static policies in the absence of a Controller.
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
pure virtual |
Set the level where this Agent is active and push signals/controls for that level.
[in] | level | Level of the tree where this agent is active. Note that only agents at level zero execute sample_platform() and adjust_platform(). |
[in] | fan_in | Vector over level giving the the number of Agents that report to each root Agent operating at the level. |
[in] | is_level_root | True if the agent plays the role of root of the level. Only root agents for a level execute ascend() and descend(). |
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
static |
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.
|
static |
|
static |
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.
[in] | dictionary | Factory dictionary for the agent. |
|
static |
Used to look up the number of values in the policy vector sent down the tree for a specific Agent.
[in] | agent_name | Name of the agent. |
|
static |
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.
[in] | dictionary | Factory dictionary for the agent. |
|
static |
Used to look up the number of values in the sample vector sent up the tree for a specific Agent.
[in] | agent_name | Name of the agent. |
|
static |
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.
[in] | dictionary | Factory dictionary for the agent. |
|
static |
Used to look up the names of values in the policy vector sent down the tree for a specific Agent.
[in] | agent_name | Name of the agent. |
|
pure virtual |
Custom fields that will be added to the report header when this agent is used.
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
pure virtual |
Custom fields for the host section of the report.
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
pure virtual |
Custom fields for each region in the report.
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
static |
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.
[in] | dictionary | Factory dictionary for the agent. |
|
static |
Used to look up the names of values in the sample vector sent up the tree for a specific Agent.
[in] | agent_name | Name of the agent. |
|
pure virtual |
Read signals from the platform and interpret/aggregate these signals to create a sample which can be sent up the tree.
[out] | sample | Vector of agent specific sample values to be sent up the tree. |
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
pure virtual |
Called by Controller to split policy for children at next level down the tree.
[in] | in_policy | Policy values from the parent. |
[out] | out_policy | Vector of policies to be sent to each child. |
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
virtual |
Returns format string for each column added to the trace.
Reimplemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
pure virtual |
Column headers to be added to the trace.
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
pure virtual |
Called by Controller to get latest values to be added to the trace.
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
pure virtual |
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.
[in,out] | policy | Policy 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. |
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::FrequencyMapAgent, geopm::GPUActivityAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
pure virtual |
Called by Controller to wait for sample period to elapse. This controls the cadence of the Controller main loop.
Implemented in geopm::PowerGovernorAgent, geopm::PowerBalancerAgent, geopm::MonitorAgent, geopm::GPUActivityAgent, geopm::FrequencyMapAgent, geopm::FFNetAgent, and geopm::CPUActivityAgent.
|
static |