From 9a904478ebac5ae96bd9f8536cd589503ead0865 Mon Sep 17 00:00:00 2001 From: Jason Lowe-Power Date: Thu, 24 Oct 2024 13:54:25 -0700 Subject: [PATCH] mem-ruby: Use runtime protocol instead of #defines This removes two #defines: PARTIAL_FUNC_READS and PROTOCOL_. Instead, update the code to use the runtime information about which protocol we are using. Change-Id: Icb6f10fc2d3fd59128c62f9f6e37b52ef2581b61 Signed-off-by: Jason Lowe-Power --- src/mem/ruby/system/RubySystem.cc | 17 ++++++++++++----- src/mem/ruby/system/RubySystem.hh | 6 ++++++ src/mem/ruby/system/SConscript | 5 ----- src/mem/ruby/system/Sequencer.cc | 12 +++++++----- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/mem/ruby/system/RubySystem.cc b/src/mem/ruby/system/RubySystem.cc index 11f51161b0..fc4badcd72 100644 --- a/src/mem/ruby/system/RubySystem.cc +++ b/src/mem/ruby/system/RubySystem.cc @@ -504,9 +504,17 @@ RubySystem::resetStats() ClockedObject::resetStats(); } -#ifndef PARTIAL_FUNC_READS bool -RubySystem::functionalRead(PacketPtr pkt) +RubySystem::functionalRead(PacketPtr pkt) { + if (protocolInfo->getPartialFuncReads()) { + return partialFunctionalRead(pkt); + } else { + return simpleFunctionalRead(pkt); + } +} + +bool +RubySystem::simpleFunctionalRead(PacketPtr pkt) { Addr address(pkt->getAddr()); Addr line_address = makeLineAddress(address, m_block_size_bits); @@ -645,9 +653,9 @@ RubySystem::functionalRead(PacketPtr pkt) return false; } -#else + bool -RubySystem::functionalRead(PacketPtr pkt) +RubySystem::partialFunctionalRead(PacketPtr pkt) { Addr address(pkt->getAddr()); Addr line_address = makeLineAddress(address, m_block_size_bits); @@ -742,7 +750,6 @@ RubySystem::functionalRead(PacketPtr pkt) return bytes.isFull(); } -#endif // The function searches through all the buffers that exist in different // cache, directory and memory controllers, and in the network components diff --git a/src/mem/ruby/system/RubySystem.hh b/src/mem/ruby/system/RubySystem.hh index 4cce8b38c5..1ce6954f17 100644 --- a/src/mem/ruby/system/RubySystem.hh +++ b/src/mem/ruby/system/RubySystem.hh @@ -137,6 +137,12 @@ class RubySystem : public ClockedObject uint64_t uncompressed_trace_size); void processRubyEvent(); + + // Called from `functionalRead` depending on if the protocol needs + // partial functional reads. + bool simpleFunctionalRead(PacketPtr pkt); + bool partialFunctionalRead(PacketPtr pkt); + private: // configuration parameters bool m_randomization; diff --git a/src/mem/ruby/system/SConscript b/src/mem/ruby/system/SConscript index 9aa3f78da8..08a21ec4fc 100644 --- a/src/mem/ruby/system/SConscript +++ b/src/mem/ruby/system/SConscript @@ -43,11 +43,6 @@ Import('*') if not env['CONF']['RUBY']: Return() -env.Append(CPPDEFINES=['PROTOCOL_' + env['CONF']['PROTOCOL']]) - -if env['CONF']['NEED_PARTIAL_FUNC_READS']: - env.Append(CPPDEFINES=['PARTIAL_FUNC_READS']) - if env['CONF']['BUILD_GPU']: SimObject('GPUCoalescer.py', sim_objects=['RubyGPUCoalescer']) SimObject('RubySystem.py', sim_objects=['RubySystem']) diff --git a/src/mem/ruby/system/Sequencer.cc b/src/mem/ruby/system/Sequencer.cc index 6160f6b6db..7cf0dc76df 100644 --- a/src/mem/ruby/system/Sequencer.cc +++ b/src/mem/ruby/system/Sequencer.cc @@ -963,11 +963,13 @@ Sequencer::makeRequest(PacketPtr pkt) if (pkt->isWrite()) { DPRINTF(RubySequencer, "Issuing SC\n"); primary_type = RubyRequestType_Store_Conditional; -#if defined (PROTOCOL_MESI_Three_Level) || defined (PROTOCOL_MESI_Three_Level_HTM) - secondary_type = RubyRequestType_Store_Conditional; -#else - secondary_type = RubyRequestType_ST; -#endif + const ProtocolInfo &protocol_info = + m_ruby_system->getProtocolInfo(); + if (protocol_info.getUseSecondaryStoreConditional()) { + secondary_type = RubyRequestType_Store_Conditional; + } else { + secondary_type = RubyRequestType_ST; + } } else { DPRINTF(RubySequencer, "Issuing LL\n"); assert(pkt->isRead());