From 1742430ff178ea9b40cd5beb18817f79c46928db Mon Sep 17 00:00:00 2001 From: Caleb Schilly Date: Wed, 15 Jan 2025 14:30:50 -0500 Subject: [PATCH] #2387: trace: inherit virtual gather function from TraceLite --- src/vt/trace/trace.cc | 7 +++++++ src/vt/trace/trace.h | 5 +++++ src/vt/trace/trace_lite.cc | 4 ---- src/vt/trace/trace_lite.h | 5 +++++ src/vt/trace/trace_user_event.cc | 4 ++-- src/vt/trace/trace_user_event.h | 2 ++ 6 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/vt/trace/trace.cc b/src/vt/trace/trace.cc index c4d2ed0f1c..e675bd7f92 100644 --- a/src/vt/trace/trace.cc +++ b/src/vt/trace/trace.cc @@ -197,6 +197,12 @@ void Trace::addUserData(int32_t data) { ); } +void Trace::gatherUserEvents() { + vt::runInEpochCollective([&]{ + proxy.reduce(0, std::move(user_event_)); + }); +} + UserEventIDType Trace::registerUserEventRoot(std::string const& name) { return user_event_.rooted(name); } @@ -519,6 +525,7 @@ void Trace::setTraceEnabledCurrentPhase(PhaseType cur_phase) { // Go ahead and perform a trace flush when tracing is disabled (and was // previously enabled) to reduce memory footprint. if (not ret and theConfig()->vt_trace_flush_size != 0) { + gatherUserEvents(); writeTracesFile(incremental_flush_mode, true); } } diff --git a/src/vt/trace/trace.h b/src/vt/trace/trace.h index 232f36d4e5..ef7bd8d7b1 100644 --- a/src/vt/trace/trace.h +++ b/src/vt/trace/trace.h @@ -287,6 +287,11 @@ struct Trace : runtime::component::Component, TraceLite { */ void addUserData(int32_t data); + /** + * \brief Gathers all user-defined event hashes onto node 0. + */ + void gatherUserEvents() override; + /** * \brief Log a memory usage event * diff --git a/src/vt/trace/trace_lite.cc b/src/vt/trace/trace_lite.cc index db68dcd6e2..8777585e4b 100644 --- a/src/vt/trace/trace_lite.cc +++ b/src/vt/trace/trace_lite.cc @@ -543,10 +543,6 @@ void TraceLite::flushTracesFile(bool useGlobalSync) { void TraceLite::writeTracesFile(int flush, bool is_incremental_flush) { auto const node = theContext()->getNode(); - vt::runInEpochCollective([&]{ - proxy.reduce(0, std::move(user_event_)); - }); - size_t to_write = traces_.size(); if (traceWritingEnabled(node) and to_write > 0) { diff --git a/src/vt/trace/trace_lite.h b/src/vt/trace/trace_lite.h index 096a506b45..fc223e6201 100644 --- a/src/vt/trace/trace_lite.h +++ b/src/vt/trace/trace_lite.h @@ -82,6 +82,11 @@ struct TraceLite { virtual ~TraceLite(); + /** + * \brief Gathers all user-defined event hashes onto node 0. + */ + virtual void gatherUserEvents(); + /** * \brief Set zlib incremental flush mode for trace file. * diff --git a/src/vt/trace/trace_user_event.cc b/src/vt/trace/trace_user_event.cc index 3232ea0228..e0a13179d7 100644 --- a/src/vt/trace/trace_user_event.cc +++ b/src/vt/trace/trace_user_event.cc @@ -126,10 +126,10 @@ bool UserEventRegistry::insertEvent( std::forward_as_tuple(name) ); return true; - } else { + } else if (user_event_[event] != name){ user_event_[event] += " COLLISION " + name; - return false; } + return false; } UserEventRegistry operator+( diff --git a/src/vt/trace/trace_user_event.h b/src/vt/trace/trace_user_event.h index b5d0a8370d..de4f0bad52 100644 --- a/src/vt/trace/trace_user_event.h +++ b/src/vt/trace/trace_user_event.h @@ -123,6 +123,8 @@ struct UserEventRegistry { friend void insertNewUserEvent(UserEventIDType event, std::string const& name); + friend UserEventRegistry operator+(UserEventRegistry r1, UserEventRegistry const& r2); + template void serialize(Serializer& s) { s | cur_root_event_