X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/264b20e3055e1973adeaa5582716d32485dd1051..9bcd28fb0c558fbaa23ee46416f96baef5279045:/src/surf/cpu_ti.hpp diff --git a/src/surf/cpu_ti.hpp b/src/surf/cpu_ti.hpp index 48178a1a40..16dcd5f3da 100644 --- a/src/surf/cpu_ti.hpp +++ b/src/surf/cpu_ti.hpp @@ -1,14 +1,13 @@ -/* Copyright (c) 2013-2021. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2013-2022. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#ifndef SURF_MODEL_CPUTI_H_ -#define SURF_MODEL_CPUTI_H_ +#ifndef SURF_MODEL_CPUTI_HPP_ +#define SURF_MODEL_CPUTI_HPP_ +#include "src/kernel/resource/CpuImpl.hpp" #include "src/kernel/resource/profile/Profile.hpp" -#include "src/surf/cpu_interface.hpp" - #include #include @@ -21,21 +20,25 @@ namespace resource { ***********/ class XBT_PRIVATE CpuTiModel; class XBT_PRIVATE CpuTi; +class XBT_PRIVATE CpuTiAction; -/********* - * Trace * - *********/ +/*********** + * Profile * + ***********/ class CpuTiProfile { + std::vector time_points_; + std::vector integral_; + public: explicit CpuTiProfile(const profile::Profile* profile); + const std::vector& get_time_points() const { return time_points_; } + double integrate_simple(double a, double b) const; double integrate_simple_point(double a) const; double solve_simple(double a, double amount) const; - std::vector time_points_; - std::vector integral_; - static int binary_search(const std::vector& array, double a); + static long binary_search(const std::vector& array, double a); }; class CpuTiTmgr { @@ -43,6 +46,15 @@ class CpuTiTmgr { FIXED, /*< Trace fixed, no availability file */ DYNAMIC /*< Dynamic, have an availability file */ }; + Type type_ = Type::FIXED; + double value_ = 0.0; /*< Percentage of cpu speed available. Value fixed between 0 and 1 */ + + /* Dynamic */ + double last_time_ = 0.0; /*< Integral interval last point (discrete time) */ + double total_ = 0.0; /*< Integral total between 0 and last point */ + + std::unique_ptr profile_ = nullptr; + profile::Profile* speed_profile_ = nullptr; public: explicit CpuTiTmgr(double value) : value_(value){}; @@ -53,17 +65,6 @@ public: double integrate(double a, double b) const; double solve(double a, double amount) const; double get_power_scale(double a) const; - -private: - Type type_ = Type::FIXED; - double value_; /*< Percentage of cpu speed available. Value fixed between 0 and 1 */ - - /* Dynamic */ - double last_time_ = 0.0; /*< Integral interval last point (discrete time) */ - double total_ = 0.0; /*< Integral total between 0 and last point */ - - std::unique_ptr profile_ = nullptr; - profile::Profile* speed_profile_ = nullptr; }; /********** @@ -82,7 +83,6 @@ public: void cancel() override; void suspend() override; void resume() override; - void set_max_duration(double duration) override; void set_sharing_penalty(double sharing_penalty) override; double get_remains() override; @@ -98,22 +98,22 @@ using ActionTiList = boost::intrusive::list; /************ * Resource * ************/ -class CpuTi : public Cpu { +class CpuTi : public CpuImpl { public: CpuTi(s4u::Host* host, const std::vector& speed_per_pstate); CpuTi(const CpuTi&) = delete; CpuTi& operator&(const CpuTi&) = delete; ~CpuTi() override; - void set_speed_profile(profile::Profile* profile) override; + CpuImpl* set_speed_profile(profile::Profile* profile) override; void apply_event(profile::Event* event, double value) override; void update_actions_finish_time(double now); void update_remaining_amount(double now); bool is_used() const override; - CpuAction* execution_start(double size) override; - CpuAction* execution_start(double, int) override + CpuAction* execution_start(double size, double user_bound) override; + CpuAction* execution_start(double, int, double) override { THROW_UNIMPLEMENTED; return nullptr; @@ -142,10 +142,10 @@ class CpuTiModel : public CpuModel { public: static void create_pm_models(); // Make CPU PM model - CpuTiModel() = default; + using CpuModel::CpuModel; CpuTiModel(const CpuTiModel&) = delete; CpuTiModel& operator=(const CpuTiModel&) = delete; - Cpu* create_cpu(s4u::Host* host, const std::vector& speed_per_pstate) override; + CpuImpl* create_cpu(s4u::Host* host, const std::vector& speed_per_pstate) override; double next_occurring_event(double now) override; void update_actions_state(double now, double delta) override; @@ -156,4 +156,4 @@ public: } // namespace kernel } // namespace simgrid -#endif /* SURF_MODEL_CPUTI_H_ */ +#endif /* SURF_MODEL_CPUTI_HPP_ */