Scheduler
simpleTemperatureModel.cpp
Go to the documentation of this file.
1 
10 #include "simpleTemperatureModel.h"
11 
12 #include <cmath>
13 #include <iostream>
14 #include <utility>
15 
16 #include <utils/log.h>
17 
18 #include <scheduler/time.h>
19 
20 using namespace Scheduler;
21 
22 
23 SimpleTemperatureModel::SimpleTemperatureModel(std::shared_ptr<Utils::Configuration> c)
24  : R(c->getDoubleValue("scheduler", "thermalResistance"))
25  , C(c->getDoubleValue("scheduler", "thermalCapacitance"))
26  , temperatureHistory(Utils::Record(c, "temperature"))
27  , energyHistory(Utils::Record(c, "energy"))
28  , endTime(c->getDoubleValue("scheduler","runningTime"))
29  , recordingTimeRatio(c->getDoubleValue("scheduler", "onlyLogTempAfterRatio"))
30 {
31  logTemperature = c->getBoolValue("scheduler", "logTemperature", false);
32  logEnergy = c->getBoolValue("scheduler", "logEnergy", false);
33  std::cerr << "temperature and aging model initialized\n";
34 }
35 
37  , struct PowerParams *params
38  , double taskPowerCoeff
39  , double freq)
40 {
41  /*T(t) = [T0 - (Ta + RP)]exp(-t/(RC)) + (Ta + RP)*/
42  Utils::Log log;
43  if (params->powered)
44  {
45  params->power = params->voltage*params->voltage*freq*params->capa*taskPowerCoeff + params->leakage;
46  }
47  else
48  {
49  params->power = 0.0;
50  }
51  power = params->power;
52  params->energy += params->power*timeInterval;
53  computeAndLog();
54  return T;
55 }
56 
57 
59 {
60  if (logTemperature)
61  temperatureHistory.printToFile(filename);
62 }
63 
65 {
66  if (logEnergy)
67  energyHistory.printToFile(filename);
68 }
69 
70 
71 void SimpleTemperatureModel::computeAndLog()
72 {
73  double currentTime = Time::getTime();
74  double timeInterval = currentTime - previousTime;
75  previousTime = currentTime;
76  A = Ta + R*power;
77  T = (T0 - A)*exp(-timeInterval/(R*C)) + A;
78  T0 = T;
79  if (logTemperature)
80  {
81  if (Time::getTime() > recordingTimeRatio * endTime)
82  {
83  temperatureHistory.add(currentTime, T);
84  }
85  }
86  if (logEnergy)
87  energyHistory.add(currentTime, power);
88 }
89 
91 {
92  return T;
93 }
94 
double updateTemperature(double timeInterval, struct PowerParams *params, double taskPowerCoeff, double freq) override
static double getTime()
Definition: time.cpp:16
SimpleTemperatureModel(std::shared_ptr< Utils::Configuration > conf)
void printToFile(std::string folder) const
Definition: record.cpp:23
void add(double time, double element)
Definition: record.cpp:41
string filename
Definition: aging.py:5
void printEnergyHistory(std::string filename) override
Definition: log.h:18
void printTemperatureHistory(std::string filename) override
Definition: context.h:16