From e3f60933585cb5a8f73e1204211840e0d29ff6b3 Mon Sep 17 00:00:00 2001 From: Iron Prando da Silva Date: Wed, 2 Feb 2022 10:36:37 +0100 Subject: [PATCH] Started refactoring for dependency calculation skipping. --- DRAMSys/traceAnalyzer/CMakeLists.txt | 1 + .../activatewindowpoolcontroller.h | 1 - .../dramTimeDependencies/commonstructures.h | 29 +-------------- .../dbEntries/DDR3dbphaseentry.cpp | 33 +++++++++++++++++ .../dbEntries/DDR3dbphaseentry.h | 14 +++++++ .../dbEntries/dbphaseentryIF.h | 22 +++++++++++ .../dramTimeDependencies/dbEntries/includes.h | 5 +++ .../phasedependenciestracker.cpp | 37 ++++--------------- .../phasedependenciestracker.h | 4 +- .../dramTimeDependencies/timedependency.h | 23 ++++++++++++ 10 files changed, 109 insertions(+), 60 deletions(-) create mode 100644 DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/DDR3dbphaseentry.cpp create mode 100644 DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/DDR3dbphaseentry.h create mode 100644 DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/dbphaseentryIF.h create mode 100644 DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/includes.h create mode 100644 DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/timedependency.h diff --git a/DRAMSys/traceAnalyzer/CMakeLists.txt b/DRAMSys/traceAnalyzer/CMakeLists.txt index d2aad098..9a56cd93 100644 --- a/DRAMSys/traceAnalyzer/CMakeLists.txt +++ b/DRAMSys/traceAnalyzer/CMakeLists.txt @@ -114,6 +114,7 @@ add_executable(TraceAnalyzer businessObjects/dramTimeDependencies/activatewindowpoolcontroller.cpp businessObjects/dramTimeDependencies/dramtimedependenciesIF.cpp + businessObjects/dramTimeDependencies/dbEntries/DDR3dbphaseentry.cpp businessObjects/dramTimeDependencies/DDR3TimeDependencies.cpp businessObjects/dramTimeDependencies/dramtimedependencyfactory.cpp businessObjects/dramTimeDependencies/phasedependenciestracker.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/activatewindowpoolcontroller.h b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/activatewindowpoolcontroller.h index 1fb349a7..778f1af3 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/activatewindowpoolcontroller.h +++ b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/activatewindowpoolcontroller.h @@ -37,7 +37,6 @@ #include "commonstructures.h" -// TODO class ActivateWindowPoolController { public: ActivateWindowPoolController(const std::map& poolSizes); diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/commonstructures.h b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/commonstructures.h index 768b49c0..42365aa5 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/commonstructures.h +++ b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/commonstructures.h @@ -45,22 +45,8 @@ #include #include "businessObjects/phases/phasedependency.h" - -class TimeDependency { -public: - TimeDependency() = default; - TimeDependency(size_t timeValue, QString phaseDep, DependencyType depType, - QString timeDepName, bool considerIntraRank = false) - : timeValue{timeValue}, phaseDep{phaseDep}, depType{depType}, - timeDepName{timeDepName}, considerIntraRank{considerIntraRank} {} - - size_t timeValue; - QString phaseDep; - DependencyType depType; - QString timeDepName; - bool considerIntraRank = false; // Used only for InterRank skip check in PhaseDependenciesTracker::mCalculateDependencies - -}; +#include "timedependency.h" +#include "businessObjects/dramTimeDependencies/dbEntries/includes.h" struct PhaseTimeDependencies { explicit PhaseTimeDependencies(std::initializer_list d) : dependencies(d) {} @@ -76,17 +62,6 @@ struct QStringsComparator { typedef std::map DependencyMap; - -struct DBPhaseEntry { - size_t id; - QString phaseName; - size_t phaseBegin; - size_t phaseEnd; - size_t transact; - size_t tBank; - size_t tRank; -}; - struct DBDependencyEntry { size_t delayedPhaseID; QString delayedPhaseName; diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/DDR3dbphaseentry.cpp b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/DDR3dbphaseentry.cpp new file mode 100644 index 00000000..c58a336e --- /dev/null +++ b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/DDR3dbphaseentry.cpp @@ -0,0 +1,33 @@ + +#include "DDR3dbphaseentry.h" + +DDR3DBPhaseEntry::DDR3DBPhaseEntry(const QSqlQuery& query) { + id = query.value(0).toLongLong(); + phaseName = query.value(1).toString(); + phaseBegin = query.value(2).toLongLong(); + phaseEnd = query.value(3).toLongLong(); + transact = query.value(4).toLongLong(); + tBank = query.value(5).toLongLong(); + // tBankgroup = query.value(6).toLongLong(); + tRank = query.value(7).toLongLong(); +} + +bool DDR3DBPhaseEntry::potentialDependency(const TimeDependency& dep, const std::shared_ptr otherPhase) const { + auto other = std::dynamic_pointer_cast(otherPhase); + if (!other) return false; + + bool const skipOnIntraBankAndDifferentBanks = { + dep.depType == DependencyType::IntraBank + && tBank != other->tBank + }; + bool const skipOnIntraRankAndDifferentRanks = { + dep.depType == DependencyType::IntraRank + && tRank != other->tRank + }; + bool const skipOnInterRankAndSameRank = { + dep.depType == DependencyType::InterRank + && tRank == other->tRank + }; + + return !(skipOnIntraBankAndDifferentBanks || skipOnIntraRankAndDifferentRanks || skipOnInterRankAndSameRank); +} diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/DDR3dbphaseentry.h b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/DDR3dbphaseentry.h new file mode 100644 index 00000000..fd7b6b99 --- /dev/null +++ b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/DDR3dbphaseentry.h @@ -0,0 +1,14 @@ + +#pragma once + +#include "dbphaseentryIF.h" + +class DDR3DBPhaseEntry : public DBPhaseEntryIF { + public: + DDR3DBPhaseEntry(const QSqlQuery&); + + // size_t tBankgroup; + size_t tRank; + + bool potentialDependency(const TimeDependency& dep, const std::shared_ptr otherPhase) const override; +}; diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/dbphaseentryIF.h b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/dbphaseentryIF.h new file mode 100644 index 00000000..3711cd28 --- /dev/null +++ b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/dbphaseentryIF.h @@ -0,0 +1,22 @@ + +#pragma once + +#include + +#include "businessObjects/phases/phasedependency.h" +#include "businessObjects/dramTimeDependencies/timedependency.h" + +class DBPhaseEntryIF { + public: + DBPhaseEntryIF() = default; + ~DBPhaseEntryIF() = default; + + virtual bool potentialDependency(const TimeDependency& dep, const std::shared_ptr otherPhase) const { return false; } + + size_t id; + QString phaseName; + size_t phaseBegin; + size_t phaseEnd; + size_t transact; + size_t tBank; +}; diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/includes.h b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/includes.h new file mode 100644 index 00000000..0fe63cf4 --- /dev/null +++ b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/dbEntries/includes.h @@ -0,0 +1,5 @@ + +#pragma once + +#include "dbphaseentryIF.h" +#include "DDR3dbphaseentry.h" diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.cpp b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.cpp index f9cbb420..1ca19c6b 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.cpp +++ b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.cpp @@ -120,11 +120,11 @@ void PhaseDependenciesTracker::mInsertIntoTable(TraceDB& tdb, const std::vector< } -const std::vector> +const std::vector> PhaseDependenciesTracker::mGetFilteredPhases(TraceDB& tdb, const std::vector& commands) { - std::vector> phases; + std::vector> phases; - QString queryStr = "SELECT Phases.*, Transactions.TBank, Transactions.TRank " + QString queryStr = "SELECT Phases.*, Transactions.TBank, Transactions.TBankgroup, Transactions.TRank " " FROM Phases " " INNER JOIN Transactions " " ON Phases.Transact=Transactions.ID " @@ -159,16 +159,9 @@ PhaseDependenciesTracker::mGetFilteredPhases(TraceDB& tdb, const std::vector(query); - phases[rowIt] = std::make_shared(phase); ++rowIt; } while (query.next()); @@ -182,7 +175,7 @@ PhaseDependenciesTracker::mGetFilteredPhases(TraceDB& tdb, const std::vector -PhaseDependenciesTracker::mCalculateDependencies(const TraceDB& tdb, const std::vector>& phases, std::vector& commands) { +PhaseDependenciesTracker::mCalculateDependencies(const TraceDB& tdb, const std::vector>& phases, std::vector& commands) { std::vector entries; entries.reserve((size_t) (0.4 * phases.size())); @@ -198,8 +191,6 @@ PhaseDependenciesTracker::mCalculateDependencies(const TraceDB& tdb, const std:: // Auxiliary variables const auto& phase = phases[i]; - const size_t cmdBank = phase->tBank; - const size_t cmdRank = phase->tRank; // Get time dependency descriptions for the current phase const auto& deps = deviceDependencies.at(phase->phaseName); @@ -219,21 +210,7 @@ PhaseDependenciesTracker::mCalculateDependencies(const TraceDB& tdb, const std:: int poolSubstrPos = dep.phaseDep.indexOf("_POOL", 3); if (poolSubstrPos == -1 && dep.phaseDep != otherPhase->phaseName) continue; - bool const skipOnIntraBankAndDifferentBanks = { - dep.depType == DependencyType::IntraBank - && cmdBank != otherPhase->tBank - }; - bool const skipOnIntraRankAndDifferentRanks = { - dep.depType == DependencyType::IntraRank - && cmdRank != otherPhase->tRank - }; - bool const skipOnInterRankAndSameRank = { - dep.depType == DependencyType::InterRank - && cmdRank == otherPhase->tRank - && !dep.considerIntraRank - }; - - if (skipOnIntraBankAndDifferentBanks || skipOnIntraRankAndDifferentRanks || skipOnInterRankAndSameRank) { + if (!phase->potentialDependency(dep, otherPhase)) { continue; } diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.h b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.h index 9edfebf0..074c5503 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.h +++ b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/phasedependenciestracker.h @@ -52,8 +52,8 @@ private: static void mCreateTable(TraceDB& tdb); static void mInsertIntoTable(TraceDB& tdb, const std::vector& entries); - static const std::vector> mGetFilteredPhases(TraceDB& tdb, const std::vector& commands); - static const std::vector mCalculateDependencies(const TraceDB& tdb, const std::vector>& phases, std::vector& commands); + static const std::vector> mGetFilteredPhases(TraceDB& tdb, const std::vector& commands); + static const std::vector mCalculateDependencies(const TraceDB& tdb, const std::vector>& phases, std::vector& commands); static QSqlQuery mExecuteQuery(TraceDB& tdb, const QString queryStr); diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/timedependency.h b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/timedependency.h new file mode 100644 index 00000000..f012353f --- /dev/null +++ b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/timedependency.h @@ -0,0 +1,23 @@ + +#pragma once + +#include + +#include "businessObjects/phases/phasedependency.h" + +class TimeDependency { +public: + TimeDependency() = default; + TimeDependency(size_t timeValue, QString phaseDep, DependencyType depType, + QString timeDepName, bool considerIntraRank = false) + : timeValue{timeValue}, phaseDep{phaseDep}, depType{depType}, + timeDepName{timeDepName}, considerIntraRank{considerIntraRank} {} + + size_t timeValue; + QString phaseDep; + DependencyType depType; + QString timeDepName; + bool considerIntraRank = false; // Used only for InterRank skip check in PhaseDependenciesTracker::mCalculateDependencies + +}; +