XBT_LOG_EXTERNAL_CATEGORY(surf_kernel);
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu, surf, "Logging specific to the SURF cpu module");
-void_f_void_t surf_cpu_model_init_preparse = nullptr;
-
simgrid::surf::CpuModel *surf_cpu_model_pm;
simgrid::surf::CpuModel *surf_cpu_model_vm;
namespace simgrid {
namespace surf {
-/*************
- * Callbacks *
- *************/
-
-simgrid::xbt::signal<void(CpuAction*, Action::State, Action::State)> cpuActionStateChangedCallbacks;
-
/*********
* Model *
*********/
-CpuModel::~CpuModel() = default;
-
void CpuModel::updateActionsStateLazy(double now, double /*delta*/)
{
while ((xbt_heap_size(getActionHeap()) > 0)
&& (double_equals(xbt_heap_maxkey(getActionHeap()), now, sg_surf_precision))) {
+
CpuAction *action = static_cast<CpuAction*>(xbt_heap_pop(getActionHeap()));
XBT_CDEBUG(surf_kernel, "Something happened to action %p", action);
if (TRACE_is_enabled()) {
Cpu *cpu = static_cast<Cpu*>(lmm_constraint_id(lmm_get_cnst_from_var(getMaxminSystem(), action->getVariable(), 0)));
- TRACE_surf_host_set_utilization(cpu->getName(), action->getCategory(),
- lmm_variable_getvalue(action->getVariable()),
- action->getLastUpdate(),
- now - action->getLastUpdate());
+ TRACE_surf_host_set_utilization(cpu->cname(), action->getCategory(), lmm_variable_getvalue(action->getVariable()),
+ action->getLastUpdate(), now - action->getLastUpdate());
}
action->finish();
/* set the remains to 0 due to precision problems when updating the remaining amount */
action->setRemains(0);
action->setState(Action::State::done);
- action->heapRemove(getActionHeap()); //FIXME: strange call since action was already popped
}
if (TRACE_is_enabled()) {
//defining the last timestamp that we can safely dump to trace file
if (TRACE_is_enabled()) {
Cpu *cpu = static_cast<Cpu*> (lmm_constraint_id(lmm_get_cnst_from_var(getMaxminSystem(), action->getVariable(), 0)) );
- TRACE_surf_host_set_utilization(cpu->getName(),
- action->getCategory(),
- lmm_variable_getvalue(action->getVariable()),
- now - delta,
- delta);
+ TRACE_surf_host_set_utilization(cpu->cname(), action->getCategory(), lmm_variable_getvalue(action->getVariable()),
+ now - delta, delta);
TRACE_last_timestamp_to_dump = now - delta;
}
}
}
-bool CpuModel::next_occuring_event_isIdempotent()
-{
- return true;
-}
-
/************
* Resource *
************/
{
}
-Cpu::Cpu(Model *model, simgrid::s4u::Host *host, lmm_constraint_t constraint,
- std::vector<double> * speedPerPstate, int core)
- : Resource(model, host->name().c_str(), constraint)
- , coresAmount_(core)
- , host_(host)
+Cpu::Cpu(Model* model, simgrid::s4u::Host* host, lmm_constraint_t constraint, std::vector<double>* speedPerPstate,
+ int core)
+ : Resource(model, host->cname(), constraint), coresAmount_(core), host_(host)
{
- xbt_assert(core > 0, "Host %s must have at least one core, not 0.", host->name().c_str());
+ xbt_assert(core > 0, "Host %s must have at least one core, not 0.", host->cname());
speed_.peak = speedPerPstate->front();
speed_.scale = 1;
host->pimpl_cpu = this;
- xbt_assert(speed_.scale > 0, "Speed of host %s must be >0", host->name().c_str());
+ xbt_assert(speed_.scale > 0, "Speed of host %s must be >0", host->cname());
// Copy the power peak array:
for (double value : *speedPerPstate) {
void Cpu::setPState(int pstate_index)
{
xbt_assert(pstate_index <= static_cast<int>(speedPerPstate_.size()),
- "Invalid parameters for CPU %s (pstate %d > length of pstates %d)", getName(), pstate_index,
- static_cast<int>(speedPerPstate_.size()));
+ "Invalid parameters for CPU %s (pstate %d > length of pstates %d)", cname(), pstate_index,
+ static_cast<int>(speedPerPstate_.size()));
double new_peak_speed = speedPerPstate_[pstate_index];
pstate_ = pstate_index;
}
void Cpu::onSpeedChange() {
- TRACE_surf_host_set_speed(surf_get_clock(), getName(), coresAmount_ * speed_.scale * speed_.peak);
+ TRACE_surf_host_set_speed(surf_get_clock(), cname(), coresAmount_ * speed_.scale * speed_.peak);
}
-int Cpu::getCoreCount()
+int Cpu::coreCount()
{
return coresAmount_;
}
void Cpu::setStateTrace(tmgr_trace_t trace)
{
- xbt_assert(stateEvent_==nullptr,"Cannot set a second state trace to Host %s", host_->name().c_str());
+ xbt_assert(stateEvent_ == nullptr, "Cannot set a second state trace to Host %s", host_->cname());
stateEvent_ = future_evt_set->add_trace(trace, 0.0, this);
}
void Cpu::setSpeedTrace(tmgr_trace_t trace)
{
- xbt_assert(speed_.event==nullptr,"Cannot set a second speed trace to Host %s", host_->name().c_str());
+ xbt_assert(speed_.event == nullptr, "Cannot set a second speed trace to Host %s", host_->cname());
speed_.event = future_evt_set->add_trace(trace, 0.0, this);
}
if (TRACE_is_enabled()) {
Cpu *cpu = static_cast<Cpu*>(lmm_constraint_id(lmm_get_cnst_from_var(getModel()->getMaxminSystem(), getVariable(), 0)));
- TRACE_surf_host_set_utilization(cpu->getName(), getCategory(), lastValue_, lastUpdate_, now - lastUpdate_);
+ TRACE_surf_host_set_utilization(cpu->cname(), getCategory(), lastValue_, lastUpdate_, now - lastUpdate_);
}
XBT_CDEBUG(surf_kernel, "Updating action(%p): remains is now %f", this, remains_);
}
lmm_system_t sys = getModel()->getMaxminSystem();
int llen = lmm_get_number_of_cnst_from_var(sys, getVariable());
- for(int i = 0; i<llen; i++)
- retlist.push_back( (Cpu*)(lmm_constraint_id( lmm_get_cnst_from_var(sys, getVariable(), i) )) );
+ for (int i = 0; i < llen; i++) {
+ /* Beware of composite actions: ptasks put links and cpus together */
+ // extra pb: we cannot dynamic_cast from void*...
+ Resource* resource = static_cast<Resource*>(lmm_constraint_id(lmm_get_cnst_from_var(sys, getVariable(), i)));
+ Cpu* cpu = dynamic_cast<Cpu*>(resource);
+ if (cpu != nullptr)
+ retlist.push_back(cpu);
+ }
return retlist;
}