Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix MSG_file_write bug
[simgrid.git] / src / surf / cpu.cpp
index 342c1bb..0c9a2f3 100644 (file)
@@ -13,7 +13,7 @@ CpuModelPtr surf_cpu_model_vm;
  * Model *
  *********/
 
-void CpuModel::updateActionsStateLazy(double now, double delta)
+void CpuModel::updateActionsStateLazy(double now, double /*delta*/)
 {
   void *_action;
   CpuActionLmmPtr action;
@@ -130,6 +130,33 @@ int Cpu::getCore()
   return m_core;
 }
 
+CpuLmm::CpuLmm(CpuModelPtr model, const char* name, xbt_dict_t properties, int core, double powerPeak, double powerScale)
+: ResourceLmm(), Cpu(model, name, properties, core, powerPeak, powerScale) {
+  /* At now, we assume that a VM does not have a multicore CPU. */
+  if (core > 1)
+    xbt_assert(model == surf_cpu_model_pm);
+
+  p_constraintCore = xbt_new(lmm_constraint_t, core);
+  p_constraintCoreId = xbt_new(void*, core);
+
+  int i;
+  for (i = 0; i < core; i++) {
+    /* just for a unique id, never used as a string. */
+    p_constraintCoreId[i] = bprintf("%s:%i", name, i);
+    p_constraintCore[i] = lmm_constraint_new(p_model->p_maxminSystem, p_constraintCoreId[i], m_powerScale * m_powerPeak);
+  }
+}
+
+CpuLmm::~CpuLmm(){
+  if (p_constraintCore){
+    for (int i = 0; i < m_core; i++) {
+         xbt_free(p_constraintCoreId[i]);
+    }
+    xbt_free(p_constraintCore);
+    xbt_free(p_constraintCoreId);
+  }
+}
+
 /**********
  * Action *
  **********/
@@ -195,10 +222,10 @@ void CpuActionLmm::setBound(double bound)
  * action object does not have the information about the location where the
  * action is being executed.
  */
-void CpuActionLmm::setAffinity(CpuLmmPtr cpu, unsigned long mask)
+void CpuActionLmm::setAffinity(CpuPtr _cpu, unsigned long mask)
 {
   lmm_variable_t var_obj = p_variable;
-
+  CpuLmmPtr cpu = reinterpret_cast<CpuLmmPtr>(_cpu);
   XBT_IN("(%p,%lx)", this, mask);
 
   {