thermal_domain.cc revision 11528
110259SAndrew.Bardsley@arm.com/*
210259SAndrew.Bardsley@arm.com * Copyright (c) 2015 ARM Limited
310259SAndrew.Bardsley@arm.com * All rights reserved
410259SAndrew.Bardsley@arm.com *
510259SAndrew.Bardsley@arm.com * The license below extends only to copyright in the software and shall
610259SAndrew.Bardsley@arm.com * not be construed as granting a license to any other intellectual
710259SAndrew.Bardsley@arm.com * property including but not limited to intellectual property relating
810259SAndrew.Bardsley@arm.com * to a hardware implementation of the functionality of the software
910259SAndrew.Bardsley@arm.com * licensed hereunder.  You may use the software subject to the license
1010259SAndrew.Bardsley@arm.com * terms below provided that you ensure that this notice is replicated
1110259SAndrew.Bardsley@arm.com * unmodified and in its entirety in all distributions of the software,
1210259SAndrew.Bardsley@arm.com * modified or unmodified, in source code or in binary form.
1310259SAndrew.Bardsley@arm.com *
1410259SAndrew.Bardsley@arm.com * Redistribution and use in source and binary forms, with or without
1510259SAndrew.Bardsley@arm.com * modification, are permitted provided that the following conditions are
1610259SAndrew.Bardsley@arm.com * met: redistributions of source code must retain the above copyright
1710259SAndrew.Bardsley@arm.com * notice, this list of conditions and the following disclaimer;
1810259SAndrew.Bardsley@arm.com * redistributions in binary form must reproduce the above copyright
1910259SAndrew.Bardsley@arm.com * notice, this list of conditions and the following disclaimer in the
2010259SAndrew.Bardsley@arm.com * documentation and/or other materials provided with the distribution;
2110259SAndrew.Bardsley@arm.com * neither the name of the copyright holders nor the names of its
2210259SAndrew.Bardsley@arm.com * contributors may be used to endorse or promote products derived from
2310259SAndrew.Bardsley@arm.com * this software without specific prior written permission.
2410259SAndrew.Bardsley@arm.com *
2510259SAndrew.Bardsley@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2610259SAndrew.Bardsley@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2710259SAndrew.Bardsley@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2810259SAndrew.Bardsley@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2910259SAndrew.Bardsley@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3010259SAndrew.Bardsley@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
3110259SAndrew.Bardsley@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
3210259SAndrew.Bardsley@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
3310259SAndrew.Bardsley@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3410259SAndrew.Bardsley@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3510259SAndrew.Bardsley@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3610259SAndrew.Bardsley@arm.com *
3710259SAndrew.Bardsley@arm.com * Authors: David Guillen Fandos
3810259SAndrew.Bardsley@arm.com */
3910259SAndrew.Bardsley@arm.com
4010259SAndrew.Bardsley@arm.com#include "sim/power/thermal_domain.hh"
4110259SAndrew.Bardsley@arm.com
4210259SAndrew.Bardsley@arm.com#include <algorithm>
4310259SAndrew.Bardsley@arm.com
4410259SAndrew.Bardsley@arm.com#include "base/statistics.hh"
4510259SAndrew.Bardsley@arm.com#include "debug/ThermalDomain.hh"
4610259SAndrew.Bardsley@arm.com#include "params/ThermalDomain.hh"
4710259SAndrew.Bardsley@arm.com#include "sim/power/thermal_model.hh"
4810259SAndrew.Bardsley@arm.com#include "sim/sim_object.hh"
4910259SAndrew.Bardsley@arm.com
5010259SAndrew.Bardsley@arm.comThermalDomain::ThermalDomain(const Params *p)
5110259SAndrew.Bardsley@arm.com    : SimObject(p), _initTemperature(p->initial_temperature),
5210259SAndrew.Bardsley@arm.com    node(NULL), subsystem(NULL)
5310259SAndrew.Bardsley@arm.com{
5410259SAndrew.Bardsley@arm.com}
5510259SAndrew.Bardsley@arm.com
5610259SAndrew.Bardsley@arm.comdouble
5710259SAndrew.Bardsley@arm.comThermalDomain::currentTemperature() const
5810259SAndrew.Bardsley@arm.com{
5910259SAndrew.Bardsley@arm.com    return node->temp;
6010259SAndrew.Bardsley@arm.com}
6110259SAndrew.Bardsley@arm.com
6210259SAndrew.Bardsley@arm.comvoid
6310259SAndrew.Bardsley@arm.comThermalDomain::setSubSystem(SubSystem * ss)
6410259SAndrew.Bardsley@arm.com{
6510259SAndrew.Bardsley@arm.com    assert(!this->subsystem);
6610259SAndrew.Bardsley@arm.com    this->subsystem = ss;
6710259SAndrew.Bardsley@arm.com
6810259SAndrew.Bardsley@arm.com    ppThermalUpdate = new ProbePointArg<double>(subsystem->getProbeManager(),
6910259SAndrew.Bardsley@arm.com                                                "thermalUpdate");
7010259SAndrew.Bardsley@arm.com}
7110259SAndrew.Bardsley@arm.com
7210259SAndrew.Bardsley@arm.comvoid
7310259SAndrew.Bardsley@arm.comThermalDomain::regStats()
7410259SAndrew.Bardsley@arm.com{
7510259SAndrew.Bardsley@arm.com    SimObject::regStats();
7610259SAndrew.Bardsley@arm.com
7710259SAndrew.Bardsley@arm.com    currentTemp
7810259SAndrew.Bardsley@arm.com        .method(this, &ThermalDomain::currentTemperature)
7910259SAndrew.Bardsley@arm.com        .name(params()->name + ".temp")
8010259SAndrew.Bardsley@arm.com        .desc("Temperature in centigrate degrees")
8110259SAndrew.Bardsley@arm.com        ;
8210259SAndrew.Bardsley@arm.com}
8310259SAndrew.Bardsley@arm.com
8410259SAndrew.Bardsley@arm.comvoid
8510259SAndrew.Bardsley@arm.comThermalDomain::emitUpdate()
8610259SAndrew.Bardsley@arm.com{
8710259SAndrew.Bardsley@arm.com    ppThermalUpdate->notify(node->temp);
8810259SAndrew.Bardsley@arm.com}
8910259SAndrew.Bardsley@arm.com
9010259SAndrew.Bardsley@arm.comThermalDomain *
9110259SAndrew.Bardsley@arm.comThermalDomainParams::create()
9210259SAndrew.Bardsley@arm.com{
9310259SAndrew.Bardsley@arm.com    return new ThermalDomain(this);
9410259SAndrew.Bardsley@arm.com}
9510259SAndrew.Bardsley@arm.com
9610259SAndrew.Bardsley@arm.comvoid
9710259SAndrew.Bardsley@arm.comThermalDomain::serialize(CheckpointOut &cp) const
9810259SAndrew.Bardsley@arm.com{
9910259SAndrew.Bardsley@arm.com    SERIALIZE_SCALAR(_initTemperature);
10010259SAndrew.Bardsley@arm.com}
10111341Sandreas.hansson@arm.com
10210259SAndrew.Bardsley@arm.comvoid
10310259SAndrew.Bardsley@arm.comThermalDomain::unserialize(CheckpointIn &cp)
10411341Sandreas.hansson@arm.com{
10510259SAndrew.Bardsley@arm.com    UNSERIALIZE_SCALAR(_initTemperature);
10611331Sandreas.hansson@arm.com}
10711331Sandreas.hansson@arm.com
10811341Sandreas.hansson@arm.com
10910259SAndrew.Bardsley@arm.comLinearEquation
11011331Sandreas.hansson@arm.comThermalDomain::getEquation(ThermalNode * tn, unsigned n, double step) const
11111341Sandreas.hansson@arm.com{
11210259SAndrew.Bardsley@arm.com    LinearEquation eq(n);
11310259SAndrew.Bardsley@arm.com    double power = subsystem->getDynamicPower() + subsystem->getStaticPower();
11410259SAndrew.Bardsley@arm.com    if (tn == node)
11510259SAndrew.Bardsley@arm.com        eq[eq.cnt()] = power;
11610259SAndrew.Bardsley@arm.com    return eq;
11710259SAndrew.Bardsley@arm.com}
11810259SAndrew.Bardsley@arm.com