> [ 16.000000] (1:dvfs_test@MyHost1) Sleep for 4 seconds
> [ 20.000000] (1:dvfs_test@MyHost1) Done sleeping (duration: 4.00 s). Current peak speed=2E+07 flop/s; Energy dissipated=2310 J
> [ 20.000000] (1:dvfs_test@MyHost1) Turning MyHost2 off, and sleeping another 10 seconds. MyHost2 dissipated 2000 J so far.
+> [ 30.000000] (1:dvfs_test@MyHost1) Done sleeping (duration: 10.00 s). Current peak speed=2E+07 flop/s; Energy dissipated=3210 J
> [ 30.000000] (0:@) Total simulation time: 30.00
> [ 30.000000] (0:@) Total energy of host MyHost1: 3210.000000 Joules
> [ 30.000000] (0:@) Total energy of host MyHost2: 2100.000000 Joules
> [ 30.000000] (0:@) Total energy of host MyHost3: 3000.000000 Joules
-> [ 30.000000] (1:dvfs_test@MyHost1) Done sleeping (duration: 10.00 s). Current peak speed=2E+07 flop/s; Energy dissipated=3210 J
return lmm_constraint_used(getModel()->getMaxminSystem(), getConstraint());
}
+/** @brief take into account changes of speed (either load or max) */
+void CpuL07::onSpeedChange() {
+ lmm_variable_t var = NULL;
+ lmm_element_t elem = NULL;
+
+ lmm_update_constraint_bound(getModel()->getMaxminSystem(), getConstraint(), m_speedPeak * m_speedScale);
+ while ((var = lmm_get_var_from_cnst
+ (getModel()->getMaxminSystem(), getConstraint(), &elem))) {
+ Action *action = static_cast<Action*>(lmm_variable_id(var));
+
+ lmm_update_variable_bound(getModel()->getMaxminSystem(),
+ action->getVariable(),
+ m_speedScale * m_speedPeak);
+ }
+
+ Cpu::onSpeedChange();
+}
+
+
bool LinkL07::isUsed(){
return lmm_constraint_used(getModel()->getMaxminSystem(), getConstraint());
}
void CpuL07::updateState(tmgr_trace_event_t event_type, double value, double /*date*/){
XBT_DEBUG("Updating cpu %s (%p) with value %g", getName(), this, value);
if (event_type == p_speedEvent) {
- m_speedScale = value;
- lmm_update_constraint_bound(getModel()->getMaxminSystem(), getConstraint(), m_speedPeak * m_speedScale);
+ m_speedScale = value;
+ onSpeedChange();
if (tmgr_trace_event_free(event_type))
p_speedEvent = NULL;
} else if (event_type == p_stateEvent) {
void updateState(tmgr_trace_event_t event_type, double value, double date) override;
Action *execute(double size) override;
Action *sleep(double duration) override;
+protected:
+ void onSpeedChange() override;
};
class LinkL07 : public Link {