Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Dynamic cast without checking result is slow and useless. Use static cast.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 15 Feb 2019 14:04:15 +0000 (15:04 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 15 Feb 2019 15:41:36 +0000 (16:41 +0100)
It brings for example > 1.2 speedup on s4u-dht-kademlia.

include/simgrid/s4u/Engine.hpp
src/instr/instr_paje_containers.cpp
src/kernel/activity/MailboxImpl.cpp
src/plugins/host_energy.cpp
src/plugins/host_load.cpp
src/s4u/s4u_Comm.cpp
src/s4u/s4u_Exec.cpp
src/s4u/s4u_Io.cpp
src/simix/ActorImpl.cpp
src/smpi/internals/smpi_global.cpp
src/xbt/config.cpp

index ae82253..cc6a2a8 100644 (file)
@@ -306,8 +306,9 @@ template <class T> XBT_PRIVATE void get_filtered_netzones_recursive(s4u::NetZone
                 "Filtering netzones is only possible for subclasses of kernel::routing::NetZoneImpl");
   for (auto const& elem : current->get_children()) {
     get_filtered_netzones_recursive(elem, whereto);
                 "Filtering netzones is only possible for subclasses of kernel::routing::NetZoneImpl");
   for (auto const& elem : current->get_children()) {
     get_filtered_netzones_recursive(elem, whereto);
-    if (elem->get_impl() == dynamic_cast<T*>(elem->get_impl()))
-      whereto->push_back(dynamic_cast<T*>(elem->get_impl()));
+    T* elem_impl = dynamic_cast<T*>(elem->get_impl());
+    if (elem_impl != nullptr)
+      whereto->push_back(elem_impl);
   }
 }
 #endif
   }
 }
 #endif
index e648aeb..4b23e35 100644 (file)
@@ -215,21 +215,21 @@ void Container::log_destruction()
 
 StateType* Container::get_state(const std::string& name)
 {
 
 StateType* Container::get_state(const std::string& name)
 {
-  StateType* ret = dynamic_cast<StateType*>(type_->by_name(name));
+  StateType* ret = static_cast<StateType*>(type_->by_name(name));
   ret->set_calling_container(this);
   return ret;
 }
 
 LinkType* Container::get_link(const std::string& name)
 {
   ret->set_calling_container(this);
   return ret;
 }
 
 LinkType* Container::get_link(const std::string& name)
 {
-  LinkType* ret = dynamic_cast<LinkType*>(type_->by_name(name));
+  LinkType* ret = static_cast<LinkType*>(type_->by_name(name));
   ret->set_calling_container(this);
   return ret;
 }
 
 VariableType* Container::get_variable(const std::string& name)
 {
   ret->set_calling_container(this);
   return ret;
 }
 
 VariableType* Container::get_variable(const std::string& name)
 {
-  VariableType* ret = dynamic_cast<VariableType*>(type_->by_name(name));
+  VariableType* ret = static_cast<VariableType*>(type_->by_name(name));
   ret->set_calling_container(this);
   return ret;
 }
   ret->set_calling_container(this);
   return ret;
 }
index 8ad9e02..5060404 100644 (file)
@@ -132,7 +132,7 @@ CommImplPtr MailboxImpl::find_matching_comm(CommImpl::Type type, int (*match_fun
     deque = &comm_queue_;
 
   for (auto it = deque->begin(); it != deque->end(); it++) {
     deque = &comm_queue_;
 
   for (auto it = deque->begin(); it != deque->end(); it++) {
-    CommImplPtr comm = boost::dynamic_pointer_cast<CommImpl>(std::move(*it));
+    CommImplPtr comm = boost::static_pointer_cast<CommImpl>(std::move(*it));
 
     if (comm->type == CommImpl::Type::SEND) {
       other_user_data = comm->src_data_;
 
     if (comm->type == CommImpl::Type::SEND) {
       other_user_data = comm->src_data_;
index 82417f7..3a81ebe 100644 (file)
@@ -497,8 +497,9 @@ void sg_host_energy_plugin_init()
   simgrid::kernel::activity::ExecImpl::on_creation.connect([](simgrid::kernel::activity::ExecImplPtr activity){
     if (activity->host_ != nullptr) { // We only run on one host
       simgrid::s4u::Host* host = activity->host_;
   simgrid::kernel::activity::ExecImpl::on_creation.connect([](simgrid::kernel::activity::ExecImplPtr activity){
     if (activity->host_ != nullptr) { // We only run on one host
       simgrid::s4u::Host* host = activity->host_;
-      if (dynamic_cast<simgrid::s4u::VirtualMachine*>(activity->host_))
-        host = dynamic_cast<simgrid::s4u::VirtualMachine*>(activity->host_)->get_pm();
+      simgrid::s4u::VirtualMachine* vm = dynamic_cast<simgrid::s4u::VirtualMachine*>(host);
+      if (vm != nullptr)
+        host = vm->get_pm();
 
       host->extension<HostEnergy>()->update();
     }
 
       host->extension<HostEnergy>()->update();
     }
index 0769bd2..c529ac8 100644 (file)
@@ -207,8 +207,9 @@ void sg_host_load_plugin_init()
   simgrid::kernel::activity::ExecImpl::on_creation.connect([](simgrid::kernel::activity::ExecImplPtr activity){
     if (activity->host_ != nullptr) { // We only run on one host
       simgrid::s4u::Host* host = activity->host_;
   simgrid::kernel::activity::ExecImpl::on_creation.connect([](simgrid::kernel::activity::ExecImplPtr activity){
     if (activity->host_ != nullptr) { // We only run on one host
       simgrid::s4u::Host* host = activity->host_;
-      if (dynamic_cast<simgrid::s4u::VirtualMachine*>(activity->host_))
-        host = dynamic_cast<simgrid::s4u::VirtualMachine*>(activity->host_)->get_pm();
+      simgrid::s4u::VirtualMachine* vm = dynamic_cast<simgrid::s4u::VirtualMachine*>(host);
+      if (vm != nullptr)
+        host = vm->get_pm();
 
       host->extension<HostLoad>()->add_activity(activity);
       host->extension<HostLoad>()->update(); // If the system was idle until now, we need to update *before*
 
       host->extension<HostLoad>()->add_activity(activity);
       host->extension<HostLoad>()->update(); // If the system was idle until now, we need to update *before*
@@ -222,8 +223,9 @@ void sg_host_load_plugin_init()
   simgrid::kernel::activity::ExecImpl::on_completion.connect([](simgrid::kernel::activity::ExecImplPtr activity){
     if (activity->host_ != nullptr) { // We only run on one host
       simgrid::s4u::Host* host = activity->host_;
   simgrid::kernel::activity::ExecImpl::on_completion.connect([](simgrid::kernel::activity::ExecImplPtr activity){
     if (activity->host_ != nullptr) { // We only run on one host
       simgrid::s4u::Host* host = activity->host_;
-      if (dynamic_cast<simgrid::s4u::VirtualMachine*>(activity->host_))
-        host = dynamic_cast<simgrid::s4u::VirtualMachine*>(activity->host_)->get_pm();
+      simgrid::s4u::VirtualMachine* vm = dynamic_cast<simgrid::s4u::VirtualMachine*>(host);
+      if (vm != nullptr)
+        host = vm->get_pm();
 
       host->extension<HostLoad>()->update();
     }
 
       host->extension<HostLoad>()->update();
     }
index a5e19da..3f59ca2 100644 (file)
@@ -201,7 +201,7 @@ Comm* Comm::detach()
 
 Comm* Comm::cancel()
 {
 
 Comm* Comm::cancel()
 {
-  simgrid::simix::simcall([this] { dynamic_cast<kernel::activity::CommImpl*>(pimpl_.get())->cancel(); });
+  simgrid::simix::simcall([this] { static_cast<kernel::activity::CommImpl*>(pimpl_.get())->cancel(); });
   state_ = State::CANCELED;
   return this;
 }
   state_ = State::CANCELED;
   return this;
 }
index 0ecdc72..1860395 100644 (file)
@@ -26,9 +26,8 @@ Exec::Exec(sg_host_t host, double flops_amount) : Activity(), host_(host), flops
 
 Exec* Exec::start()
 {
 
 Exec* Exec::start()
 {
-  simix::simcall([this] {
-    dynamic_cast<kernel::activity::ExecImpl*>(pimpl_.get())->start(flops_amount_, 1. / priority_, bound_);
-  });
+  simix::simcall(
+      [this] { static_cast<kernel::activity::ExecImpl*>(pimpl_.get())->start(flops_amount_, 1. / priority_, bound_); });
   state_ = State::STARTED;
   on_start(Actor::self());
   return this;
   state_ = State::STARTED;
   on_start(Actor::self());
   return this;
@@ -36,7 +35,7 @@ Exec* Exec::start()
 
 Exec* Exec::cancel()
 {
 
 Exec* Exec::cancel()
 {
-  simgrid::simix::simcall([this] { dynamic_cast<kernel::activity::ExecImpl*>(pimpl_.get())->cancel(); });
+  simgrid::simix::simcall([this] { static_cast<kernel::activity::ExecImpl*>(pimpl_.get())->cancel(); });
   state_ = State::CANCELED;
   return this;
 }
   state_ = State::CANCELED;
   return this;
 }
index 27ff69f..86d6303 100644 (file)
@@ -23,14 +23,14 @@ Io::Io(sg_storage_t storage, sg_size_t size, OpType type) : Activity(), storage_
 
 Io* Io::start()
 {
 
 Io* Io::start()
 {
-  simix::simcall([this] { dynamic_cast<kernel::activity::IoImpl*>(pimpl_.get())->start(size_, type_); });
+  simix::simcall([this] { static_cast<kernel::activity::IoImpl*>(pimpl_.get())->start(size_, type_); });
   state_ = State::STARTED;
   return this;
 }
 
 Io* Io::cancel()
 {
   state_ = State::STARTED;
   return this;
 }
 
 Io* Io::cancel()
 {
-  simgrid::simix::simcall([this] { dynamic_cast<kernel::activity::IoImpl*>(pimpl_.get())->cancel(); });
+  simgrid::simix::simcall([this] { static_cast<kernel::activity::IoImpl*>(pimpl_.get())->cancel(); });
   state_ = State::CANCELED;
   return this;
 }
   state_ = State::CANCELED;
   return this;
 }
index 57dc7a1..4fc435d 100644 (file)
@@ -631,7 +631,7 @@ void SIMIX_process_sleep_destroy(smx_activity_t synchro)
 {
   XBT_DEBUG("Destroy sleep synchro %p", synchro.get());
   simgrid::kernel::activity::SleepImplPtr sleep =
 {
   XBT_DEBUG("Destroy sleep synchro %p", synchro.get());
   simgrid::kernel::activity::SleepImplPtr sleep =
-      boost::dynamic_pointer_cast<simgrid::kernel::activity::SleepImpl>(synchro);
+      boost::static_pointer_cast<simgrid::kernel::activity::SleepImpl>(synchro);
 
   if (sleep->surf_action_) {
     sleep->surf_action_->unref();
 
   if (sleep->surf_action_) {
     sleep->surf_action_->unref();
index c9604a5..c8253ee 100644 (file)
@@ -168,7 +168,7 @@ static void check_blocks(std::vector<std::pair<size_t, size_t>> &private_blocks,
 void smpi_comm_copy_buffer_callback(smx_activity_t synchro, void *buff, size_t buff_size)
 {
   simgrid::kernel::activity::CommImplPtr comm =
 void smpi_comm_copy_buffer_callback(smx_activity_t synchro, void *buff, size_t buff_size)
 {
   simgrid::kernel::activity::CommImplPtr comm =
-      boost::dynamic_pointer_cast<simgrid::kernel::activity::CommImpl>(synchro);
+      boost::static_pointer_cast<simgrid::kernel::activity::CommImpl>(synchro);
   int src_shared                        = 0;
   int dst_shared                        = 0;
   size_t src_offset                     = 0;
   int src_shared                        = 0;
   int dst_shared                        = 0;
   size_t src_offset                     = 0;
index 6d7db52..c69b636 100644 (file)
@@ -157,15 +157,15 @@ public:
 
   template <class T> T const& get_value() const
   {
 
   template <class T> T const& get_value() const
   {
-    return dynamic_cast<const TypedConfigurationElement<T>&>(*this).get_value();
+    return static_cast<const TypedConfigurationElement<T>&>(*this).get_value();
   }
   template <class T> void set_value(T value)
   {
   }
   template <class T> void set_value(T value)
   {
-    dynamic_cast<TypedConfigurationElement<T>&>(*this).set_value(std::move(value));
+    static_cast<TypedConfigurationElement<T>&>(*this).set_value(std::move(value));
   }
   template <class T> void set_default_value(T value)
   {
   }
   template <class T> void set_default_value(T value)
   {
-    dynamic_cast<TypedConfigurationElement<T>&>(*this).set_default_value(std::move(value));
+    static_cast<TypedConfigurationElement<T>&>(*this).set_default_value(std::move(value));
   }
   void unset_default() { isdefault = false; }
   bool is_default() const { return isdefault; }
   }
   void unset_default() { isdefault = false; }
   bool is_default() const { return isdefault; }