Removed the last level cache support and MOESI_hammer's dependency on it.
Replaces the LLC support with the more generic MachineType count.
out_msg.Requestor := machineID;
out_msg.Destination.add(map_Address_to_Directory(address));
out_msg.MessageSize := MessageSizeType:Request_Control;
- TBEs[address].NumPendingMsgs := getNumberOfLastLevelCaches(); // One from each other cache (n-1) plus the memory (+1)
+ TBEs[address].NumPendingMsgs := machineCount(MachineType:L1Cache); // One from each other cache (n-1) plus the memory (+1)
}
}
out_msg.Requestor := machineID;
out_msg.Destination.add(map_Address_to_Directory(address));
out_msg.MessageSize := MessageSizeType:Request_Control;
- TBEs[address].NumPendingMsgs := getNumberOfLastLevelCaches(); // One from each other cache (n-1) plus the memory (+1)
+ TBEs[address].NumPendingMsgs := machineCount(MachineType:L1Cache); // One from each other cache (n-1) plus the memory (+1)
}
}
//
// One ack for each last-level cache
//
- TBEs[address].NumPendingMsgs := getNumberOfLastLevelCaches();
+ TBEs[address].NumPendingMsgs := machineCount(MachineType:L1Cache);
//
// Assume initially that the caches store a clean copy and that memory
// will provide the data
}
action(f_forwardRequest, "f", desc="Forward requests") {
- if (getNumberOfLastLevelCaches() > 1) {
+ if (machineCount(MachineType:L1Cache) > 1) {
peek(requestQueue_in, RequestMsg) {
enqueue(forwardNetwork_out, RequestMsg, latency=memory_controller_latency) {
out_msg.Address := address;
// Mapping functions
-int getNumberOfLastLevelCaches();
+int machineCount(MachineType machType);
// NodeID map_address_to_node(Address addr);
MachineID mapAddressToRange(Address addr, MachineType type, int low, int high);
#include "mem/ruby/slicc_interface/RubySlicc_ComponentMapping.hh"
#include "mem/ruby/system/CacheMemory.hh"
-int getNumberOfLastLevelCaches()
-{
- return CacheMemory::numberOfLastLevelCaches();
-}
#include "mem/ruby/common/NetDest.hh"
#include "mem/protocol/GenericMachineType.hh"
#include "mem/ruby/system/DirectoryMemory.hh"
+#include "mem/protocol/MachineType.hh"
#ifdef MACHINETYPE_L1Cache
#define MACHINETYPE_L1CACHE_ENUM MachineType_L1Cache
#define MACHINETYPE_DMA_ENUM MachineType_NUM
#endif
-// used to determine the number of acks to wait for
-int getNumberOfLastLevelCaches();
-
// used to determine the home directory
// returns a value between 0 and total_directories_within_the_system
inline
}
}
+extern inline int machineCount(MachineType machType) {
+ return MachineType_base_count(machType);
+}
#endif // COMPONENTMAPPINGFNS_H
#include "mem/ruby/system/CacheMemory.hh"
-int CacheMemory::m_num_last_level_caches = 0;
-MachineType CacheMemory::m_last_level_machine_type = MachineType_FIRST;
-
// ******************* Definitions *******************
// Output operator definition
else
assert(false);
- m_num_last_level_caches =
- MachineType_base_count(MachineType_FIRST);
-#if 0
- for (uint32 i=0; i<argv.size(); i+=2) {
- if (m_last_level_machine_type < m_controller->getMachineType()) {
- m_num_last_level_caches =
- MachineType_base_count(m_controller->getMachineType());
- m_last_level_machine_type =
- m_controller->getMachineType();
- }
- }
-#endif
-
m_cache.setSize(m_cache_num_sets);
m_locked.setSize(m_cache_num_sets);
for (int i = 0; i < m_cache_num_sets; i++) {
}
}
-int
-CacheMemory::numberOfLastLevelCaches()
-{
- return m_num_last_level_caches;
-}
-
-
void CacheMemory::printConfig(ostream& out)
{
out << "Cache config: " << m_cache_name << endl;
AccessPermission getPermission(const Address& address) const;
void changePermission(const Address& address, AccessPermission new_perm);
- static int numberOfLastLevelCaches();
-
int getLatency() const { return m_latency; }
// Hook for checkpointing the contents of the cache
int m_cache_num_sets;
int m_cache_num_set_bits;
int m_cache_assoc;
-
- static Vector< CacheMemory* > m_all_caches;
-
- static int m_num_last_level_caches;
- static MachineType m_last_level_machine_type;
-
};
#endif //CACHEMEMORY_H