Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 5 Jul 2018 13:08:51 +0000 (15:08 +0200)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 5 Jul 2018 13:08:51 +0000 (15:08 +0200)
1  2 
src/smpi/include/private.hpp
src/smpi/internals/smpi_process.cpp

@@@ -6,7 -6,7 +6,7 @@@
  #ifndef SMPI_PRIVATE_HPP
  #define SMPI_PRIVATE_HPP
  
 -#include "simgrid/msg.h" // msg_bar_t
 +#include "simgrid/s4u/Barrier.hpp"
  #include "smpi/smpi.h"
  #include "smpi/smpi_helpers_internal.h"
  #include "src/instr/instr_smpi.hpp"
@@@ -66,7 -66,7 +66,7 @@@ XBT_PRIVATE int smpi_process_count()
  XBT_PRIVATE void smpi_deployment_register_process(const std::string instance_id, int rank,
                                                    simgrid::s4u::ActorPtr actor);
  XBT_PRIVATE MPI_Comm* smpi_deployment_comm_world(const std::string instance_id);
 -XBT_PRIVATE msg_bar_t smpi_deployment_finalization_barrier(const std::string instance_id);
 +XBT_PRIVATE simgrid::s4u::Barrier* smpi_deployment_finalization_barrier(const std::string instance_id);
  XBT_PRIVATE void smpi_deployment_cleanup_instances();
  
  XBT_PRIVATE void smpi_comm_copy_buffer_callback(smx_activity_t comm, void* buff, size_t buff_size);
@@@ -427,6 -427,11 +427,11 @@@ XBT_PRIVATE smpi_privatization_region_
  
  #if HAVE_PAPI
  typedef std::vector<std::pair</* counter name */ std::string, /* counter value */ long long>> papi_counter_t;
+ struct papi_process_data {
+   papi_counter_t counter_data;
+   int event_set;
+ };
+ extern std::map</* computation unit name */ std::string, papi_process_data> units2papi_setup;
  #endif
  
  extern std::unordered_map<std::string, double> location2speedup;
  #include "src/msg/msg_private.hpp"
  #include "src/simix/smx_private.hpp"
  
+ #if HAVE_PAPI
+ #include "papi.h"
+ extern std::string papi_default_config_name;
+ #endif
  XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_process, smpi, "Logging specific to SMPI (kernel)");
  
  namespace simgrid{
@@@ -18,7 -23,7 +23,7 @@@ namespace smpi
  using simgrid::s4u::Actor;
  using simgrid::s4u::ActorPtr;
  
 -Process::Process(ActorPtr actor, msg_bar_t finalization_barrier)
 +Process::Process(ActorPtr actor, simgrid::s4u::Barrier* finalization_barrier)
      : finalization_barrier_(finalization_barrier), actor_(actor)
  {
    mailbox_         = simgrid::s4u::Mailbox::by_name("SMPI-" + std::to_string(actor_->get_pid()));
@@@ -30,7 -35,7 +35,7 @@@
      MC_ignore_heap(timer_, xbt_os_timer_size());
  
  #if HAVE_PAPI
-   if (simgrid::config::get_value<std::string>("smpi/papi-events")[0] != '\0') {
+   if (not simgrid::config::get_value<std::string>("smpi/papi-events").empty()) {
      // TODO: Implement host/process/thread based counters. This implementation
      // just always takes the values passed via "default", like this:
      // "default:COUNTER1:COUNTER2:COUNTER3;".
      if (it != units2papi_setup.end()) {
        papi_event_set_    = it->second.event_set;
        papi_counter_data_ = it->second.counter_data;
-       XBT_DEBUG("Setting PAPI set for process %i", i);
+       XBT_DEBUG("Setting PAPI set for process %li", actor->get_pid());
      } else {
        papi_event_set_ = PAPI_NULL;
-       XBT_DEBUG("No PAPI set for process %i", i);
+       XBT_DEBUG("No PAPI set for process %li", actor->get_pid());
      }
    }
  #endif
@@@ -61,7 -66,7 +66,7 @@@ void Process::set_data(int* argc, char*
  {
    instance_id_      = std::string((*argv)[1]);
    comm_world_       = smpi_deployment_comm_world(instance_id_);
 -  msg_bar_t barrier = smpi_deployment_finalization_barrier(instance_id_);
 +  simgrid::s4u::Barrier* barrier = smpi_deployment_finalization_barrier(instance_id_);
    if (barrier != nullptr) // don't overwrite the current one if the instance has none
      finalization_barrier_ = barrier;
  
@@@ -91,7 -96,7 +96,7 @@@ void Process::finalize(
    if(MC_is_active() || MC_record_replay_is_active())
      return;
    // wait for all pending asynchronous comms to finish
 -  MSG_barrier_wait(finalization_barrier_);
 +  finalization_barrier_->wait();
  }
  
  /** @brief Check if a process is finalized */