Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
remove a useless dirty hack for SMPI+MSG
[simgrid.git] / src / surf / HostImpl.cpp
index c19465c..c7e5ec9 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2013-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2013-2016. 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. */
@@ -31,7 +30,7 @@ simgrid::xbt::Extension<simgrid::s4u::Host, HostImpl> HostImpl::EXTENSION_ID;
 /*********
  * Model *
  *********/
-HostImpl *HostModel::createHost(const char *name, routing::NetCard *netElm, Cpu *cpu){
+HostImpl *HostModel::createHost(const char *name, kernel::routing::NetCard *netElm, Cpu *cpu){
   xbt_dynar_t storageList = (xbt_dynar_t)xbt_lib_get_or_null(storage_lib, name, ROUTING_STORAGE_HOST_LEVEL);
 
   HostImpl *host = new simgrid::surf::HostImpl(surf_host_model, name, storageList, cpu);
@@ -76,7 +75,8 @@ Action *HostModel::executeParallelTask(int host_nb,
     sg_host_t *host_list,
     double *flops_amount,
     double *bytes_amount,
-    double rate){
+    double rate)
+{
 #define cost_or_zero(array,pos) ((array)?(array)[pos]:0.0)
   Action *action =nullptr;
   if ((host_nb == 1)
@@ -99,13 +99,17 @@ Action *HostModel::executeParallelTask(int host_nb,
         value = cost_or_zero(bytes_amount, i);
       }
     }
-    if (nb == 1){
+    if (nb == 1) {
       action = surf_network_model->communicate(host_list[0]->pimpl_netcard,
-                                           host_list[1]->pimpl_netcard,
-                         value, rate);
+                                              host_list[1]->pimpl_netcard,
+                                              value, rate);
+    } else if (nb == 0) {
+       xbt_die("Cannot have a communication with no flop to exchange in this model. You should consider using the ptask model");
+    } else {       
+       xbt_die("Cannot have a communication that is not a simple point-to-point in this model. You should consider using the ptask model");
     }
-  } else
-    THROW_UNIMPLEMENTED;      /* This model does not implement parallel tasks for more than 2 hosts */
+  } else 
+    xbt_die("This model only accepts one of the following. You should consider using the ptask model for the other cases.\n - execution with one host only and no communication\n - Self-comms with one host only\n - Communications with two hosts and no computation");
 #undef cost_or_zero
   xbt_free(host_list);
   return action;
@@ -147,10 +151,10 @@ HostImpl::~HostImpl()
 
 void HostImpl::attach(simgrid::s4u::Host* host)
 {
-  if (p_host != nullptr)
+  if (piface != nullptr)
     xbt_die("Already attached to host %s", host->name().c_str());
   host->extension_set(this);
-  p_host = host;
+  piface = host;
 }
 
 bool HostImpl::isOn() const {
@@ -162,13 +166,13 @@ bool HostImpl::isOff() const {
 void HostImpl::turnOn(){
   if (isOff()) {
     p_cpu->turnOn();
-    simgrid::s4u::Host::onStateChange(*this->p_host);
+    simgrid::s4u::Host::onStateChange(*this->piface);
   }
 }
 void HostImpl::turnOff(){
   if (isOn()) {
     p_cpu->turnOff();
-    simgrid::s4u::Host::onStateChange(*this->p_host);
+    simgrid::s4u::Host::onStateChange(*this->piface);
   }
 }
 
@@ -409,5 +413,4 @@ void HostImpl::setParams(vm_params_t params)
   p_params = *params;
 }
 
-}
-}
+}}