#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"
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);
#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{
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()));
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
{
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;
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 */