diff options
-rw-r--r-- | src/mem/ruby/config/config.hh | 1 | ||||
-rw-r--r-- | src/mem/ruby/config/rubyconfig.defaults | 1 | ||||
-rw-r--r-- | src/mem/ruby/config/tester.defaults | 1 | ||||
-rw-r--r-- | src/mem/ruby/system/DirectoryMemory.cc | 49 | ||||
-rw-r--r-- | src/mem/ruby/system/DirectoryMemory.hh | 5 | ||||
-rw-r--r-- | src/mem/ruby/system/Sequencer.cc | 151 | ||||
-rw-r--r-- | src/mem/ruby/tester/DeterministicDriver.cc | 4 | ||||
-rw-r--r-- | src/mem/ruby/tester/RaceyDriver.cc | 4 | ||||
-rw-r--r-- | src/mem/ruby/tester/SyntheticDriver.cc | 5 | ||||
-rw-r--r-- | src/mem/ruby/tester/Tester.cc | 4 | ||||
-rw-r--r-- | src/mem/ruby/tester/main.cc | 4 |
11 files changed, 35 insertions, 194 deletions
diff --git a/src/mem/ruby/config/config.hh b/src/mem/ruby/config/config.hh index 3c3d87ef5..3cad258a2 100644 --- a/src/mem/ruby/config/config.hh +++ b/src/mem/ruby/config/config.hh @@ -134,7 +134,6 @@ PARAM_BOOL( REMOVE_SINGLE_CYCLE_DCACHE_FAST_PATH ); // CACHE & MEMORY PARAMETERS // ********************************************* -PARAM_BOOL( g_SIMULATING ); PARAM( L1_CACHE_ASSOC ); PARAM( L1_CACHE_NUM_SETS_BITS ); diff --git a/src/mem/ruby/config/rubyconfig.defaults b/src/mem/ruby/config/rubyconfig.defaults index 52b6603fb..873192c05 100644 --- a/src/mem/ruby/config/rubyconfig.defaults +++ b/src/mem/ruby/config/rubyconfig.defaults @@ -36,7 +36,6 @@ // g_RANDOM_SEED: 1 -g_SIMULATING: true g_DEADLOCK_THRESHOLD: 500000 diff --git a/src/mem/ruby/config/tester.defaults b/src/mem/ruby/config/tester.defaults index c9e963bda..6ba655770 100644 --- a/src/mem/ruby/config/tester.defaults +++ b/src/mem/ruby/config/tester.defaults @@ -6,7 +6,6 @@ // Please: - Add new variables only to rubyconfig.defaults file. // - Change them here only when necessary. -g_SIMULATING: false DATA_BLOCK: true RANDOMIZATION: true g_SYNTHETIC_DRIVER: true diff --git a/src/mem/ruby/system/DirectoryMemory.cc b/src/mem/ruby/system/DirectoryMemory.cc index d4c85cbea..a5f1bcddc 100644 --- a/src/mem/ruby/system/DirectoryMemory.cc +++ b/src/mem/ruby/system/DirectoryMemory.cc @@ -51,6 +51,7 @@ DirectoryMemory::DirectoryMemory(Chip* chip_ptr, int version) // m_size = RubyConfig::memoryModuleBlocks()/RubyConfig::numberOfDirectory(); m_size = RubyConfig::memoryModuleBlocks(); assert(m_size > 0); + /********************************************************************* // allocates an array of directory entry pointers & sets them to NULL m_entries = new Directory_Entry*[m_size]; if (m_entries == NULL) { @@ -60,10 +61,12 @@ DirectoryMemory::DirectoryMemory(Chip* chip_ptr, int version) for (int i=0; i < m_size; i++) { m_entries[i] = NULL; } + *///////////////////////////////////////////////////////////////////// } DirectoryMemory::~DirectoryMemory() { + /********************************************************************* // free up all the directory entries for (int i=0; i < m_size; i++) { if (m_entries[i] != NULL) { @@ -74,6 +77,8 @@ DirectoryMemory::~DirectoryMemory() // free up the array of directory entries delete[] m_entries; + *////////////////////////////////////////////////////////////////////// + m_entries.clear(); } // Static method @@ -99,6 +104,10 @@ bool DirectoryMemory::isPresent(PhysAddress address) return (map_Address_to_DirectoryNode(address) == m_chip_ptr->getID()*RubyConfig::numberOfDirectoryPerChip()+m_version); } +void DirectoryMemory::readPhysMem(uint64 address, int size, void * data) +{ +} + Directory_Entry& DirectoryMemory::lookup(PhysAddress address) { assert(isPresent(address)); @@ -111,35 +120,29 @@ Directory_Entry& DirectoryMemory::lookup(PhysAddress address) WARN_EXPR(m_size); ERROR_MSG("Directory Memory Assertion: accessing memory out of range."); } - Directory_Entry* entry = m_entries[index]; + + map<Index, Directory_Entry*>::iterator iter = m_entries.find(index); + Directory_Entry* entry = m_entries.find(index)->second; // allocate the directory entry on demand. - if (entry == NULL) { + if (iter == m_entries.end()) { entry = new Directory_Entry; // entry->getProcOwner() = m_chip_ptr->getID(); // FIXME - This should not be hard coded // entry->getDirOwner() = true; // FIXME - This should not be hard-coded - // load the data from SimICS when first initalizing - if (g_SIMULATING) { - if (DATA_BLOCK) { - //physical_address_t physAddr = address.getAddress(); - - for(int j=0; j < RubyConfig::dataBlockBytes(); j++) { - //int8 data_byte = (int8) SIMICS_read_physical_memory( m_chip_ptr->getID(), - // physAddr + j, 1 ); - //printf("SimICS, byte %d: %lld\n", j, data_byte ); - int8 data_byte = 0; - entry->getDataBlk().setByte(j, data_byte); - } - DEBUG_EXPR(NODE_COMP, MedPrio,entry->getDataBlk()); - } - } + // load the data from physicalMemory when first initalizing + physical_address_t physAddr = address.getAddress(); + int8 * dataArray = (int8 * )malloc(RubyConfig::dataBlockBytes() * sizeof(int8)); + readPhysMem(physAddr, RubyConfig::dataBlockBytes(), dataArray); + for(int j=0; j < RubyConfig::dataBlockBytes(); j++) { + entry->getDataBlk().setByte(j, dataArray[j]); + } + DEBUG_EXPR(NODE_COMP, MedPrio,entry->getDataBlk()); // store entry to the table - m_entries[index] = entry; + m_entries.insert(make_pair(index, entry)); } - return (*entry); } @@ -165,11 +168,9 @@ void DirectoryMemory::invalidateBlock(PhysAddress address) void DirectoryMemory::print(ostream& out) const { out << "Directory dump: " << endl; - for (int i=0; i < m_size; i++) { - if (m_entries[i] != NULL) { - out << i << ": "; - out << *m_entries[i] << endl; - } + for(map<Index, Directory_Entry*>::const_iterator it = m_entries.begin(); it != m_entries.end(); ++it) { + out << it->first << ": "; + out << *(it->second) << endl; } } diff --git a/src/mem/ruby/system/DirectoryMemory.hh b/src/mem/ruby/system/DirectoryMemory.hh index 94b7de9aa..3307e77a7 100644 --- a/src/mem/ruby/system/DirectoryMemory.hh +++ b/src/mem/ruby/system/DirectoryMemory.hh @@ -42,6 +42,7 @@ #include "mem/ruby/common/Global.hh" #include "mem/ruby/common/Address.hh" #include "mem/protocol/Directory_Entry.hh" +#include <map> class Chip; @@ -56,6 +57,8 @@ public: // Public Methods static void printConfig(ostream& out); bool isPresent(PhysAddress address); + // dummy function + void readPhysMem(uint64 address, int size, void * data); Directory_Entry& lookup(PhysAddress address); void print(ostream& out) const; @@ -68,7 +71,7 @@ private: DirectoryMemory& operator=(const DirectoryMemory& obj); // Data Members (m_ prefix) - Directory_Entry **m_entries; + map<Index, Directory_Entry*> m_entries; Chip* m_chip_ptr; int m_size; // # of memory module blocks for this directory int m_version; diff --git a/src/mem/ruby/system/Sequencer.cc b/src/mem/ruby/system/Sequencer.cc index 0950741dc..87fbc66b5 100644 --- a/src/mem/ruby/system/Sequencer.cc +++ b/src/mem/ruby/system/Sequencer.cc @@ -939,157 +939,18 @@ void Sequencer::checkCoherence(const Address& addr) { bool Sequencer::getRubyMemoryValue(const Address& addr, char* value, unsigned int size_in_bytes ) { - if(g_SIMULATING){ - for(unsigned int i=0; i < size_in_bytes; i++) { - std::cerr << __FILE__ << "(" << __LINE__ << "): Not implemented. " << std::endl; - value[i] = 0; // _read_physical_memory( m_chip_ptr->getID()*RubyConfig::numberOfProcsPerChip()+m_version, - // addr.getAddress() + i, 1 ); - } - return false; // Do nothing? - } else { - bool found = false; - const Address lineAddr = line_address(addr); - DataBlock data; - PhysAddress paddr(addr); - DataBlock* dataPtr = &data; - Chip* n = dynamic_cast<Chip*>(m_chip_ptr); - // LUKE - use variable names instead of macros - assert(n->m_L1Cache_L1IcacheMemory_vec[m_version] != NULL); - assert(n->m_L1Cache_L1DcacheMemory_vec[m_version] != NULL); - - MachineID l2_mach = map_L2ChipId_to_L2Cache(addr, m_chip_ptr->getID() ); - int l2_ver = l2_mach.num%RubyConfig::numberOfL2CachePerChip(); - - if (Protocol::m_TwoLevelCache) { - if(Protocol::m_CMP){ - assert(n->m_L2Cache_L2cacheMemory_vec[l2_ver] != NULL); - } - else{ - assert(n->m_L1Cache_cacheMemory_vec[m_version] != NULL); - } - } - - if (n->m_L1Cache_L1IcacheMemory_vec[m_version]->tryCacheAccess(lineAddr, CacheRequestType_IFETCH, dataPtr)){ - n->m_L1Cache_L1IcacheMemory_vec[m_version]->getMemoryValue(addr, value, size_in_bytes); - found = true; - } else if (n->m_L1Cache_L1DcacheMemory_vec[m_version]->tryCacheAccess(lineAddr, CacheRequestType_LD, dataPtr)){ - n->m_L1Cache_L1DcacheMemory_vec[m_version]->getMemoryValue(addr, value, size_in_bytes); - found = true; - } else if (Protocol::m_CMP && n->m_L2Cache_L2cacheMemory_vec[l2_ver]->tryCacheAccess(lineAddr, CacheRequestType_LD, dataPtr)){ - n->m_L2Cache_L2cacheMemory_vec[l2_ver]->getMemoryValue(addr, value, size_in_bytes); - found = true; - // } else if (n->TBE_TABLE_MEMBER_VARIABLE->isPresent(lineAddr)){ - // ASSERT(n->TBE_TABLE_MEMBER_VARIABLE->isPresent(lineAddr)); - // L1Cache_TBE tbeEntry = n->TBE_TABLE_MEMBER_VARIABLE->lookup(lineAddr); - - // int offset = addr.getOffset(); - // for(int i=0; i<size_in_bytes; ++i){ - // value[i] = tbeEntry.getDataBlk().getByte(offset + i); - // } - - // found = true; - } else { - // Address not found - //cout << " " << m_chip_ptr->getID() << " NOT IN CACHE, Value at Directory is: " << (int) value[0] << endl; - n = dynamic_cast<Chip*>(g_system_ptr->getChip(map_Address_to_DirectoryNode(addr)/RubyConfig::numberOfDirectoryPerChip())); - int dir_version = map_Address_to_DirectoryNode(addr)%RubyConfig::numberOfDirectoryPerChip(); - for(unsigned int i=0; i<size_in_bytes; ++i){ - int offset = addr.getOffset(); - value[i] = n->m_Directory_directory_vec[dir_version]->lookup(lineAddr).m_DataBlk.getByte(offset + i); - } - // Address not found - //WARN_MSG("Couldn't find address"); - //WARN_EXPR(addr); - found = false; - } - return true; + for(unsigned int i=0; i < size_in_bytes; i++) { + std::cerr << __FILE__ << "(" << __LINE__ << "): Not implemented. " << std::endl; + value[i] = 0; // _read_physical_memory( m_chip_ptr->getID()*RubyConfig::numberOfProcsPerChip()+m_version, + // addr.getAddress() + i, 1 ); } + return false; // Do nothing? } bool Sequencer::setRubyMemoryValue(const Address& addr, char *value, unsigned int size_in_bytes) { char test_buffer[64]; - if(g_SIMULATING){ - return false; // Do nothing? - } else { - // idea here is that coherent cache should find the - // latest data, the update it - bool found = false; - const Address lineAddr = line_address(addr); - PhysAddress paddr(addr); - DataBlock data; - DataBlock* dataPtr = &data; - Chip* n = dynamic_cast<Chip*>(m_chip_ptr); - - MachineID l2_mach = map_L2ChipId_to_L2Cache(addr, m_chip_ptr->getID() ); - int l2_ver = l2_mach.num%RubyConfig::numberOfL2CachePerChip(); - // LUKE - use variable names instead of macros - //cout << "number of L2caches per chip = " << RubyConfig::numberOfL2CachePerChip(m_version) << endl; - //cout << "L1I cache vec size = " << n->m_L1Cache_L1IcacheMemory_vec.size() << endl; - //cout << "L1D cache vec size = " << n->m_L1Cache_L1DcacheMemory_vec.size() << endl; - //cout << "L1cache_cachememory size = " << n->m_L1Cache_cacheMemory_vec.size() << endl; - //cout << "L1cache_l2cachememory size = " << n->m_L1Cache_L2cacheMemory_vec.size() << endl; - // if (Protocol::m_TwoLevelCache) { - // if(Protocol::m_CMP){ - // cout << "CMP L2 cache vec size = " << n->m_L2Cache_L2cacheMemory_vec.size() << endl; - // } - // else{ - // cout << "L2 cache vec size = " << n->m_L1Cache_cacheMemory_vec.size() << endl; - // } - // } - - assert(n->m_L1Cache_L1IcacheMemory_vec[m_version] != NULL); - assert(n->m_L1Cache_L1DcacheMemory_vec[m_version] != NULL); - if (Protocol::m_TwoLevelCache) { - if(Protocol::m_CMP){ - assert(n->m_L2Cache_L2cacheMemory_vec[l2_ver] != NULL); - } - else{ - assert(n->m_L1Cache_cacheMemory_vec[m_version] != NULL); - } - } - - if (n->m_L1Cache_L1IcacheMemory_vec[m_version]->tryCacheAccess(lineAddr, CacheRequestType_IFETCH, dataPtr)){ - n->m_L1Cache_L1IcacheMemory_vec[m_version]->setMemoryValue(addr, value, size_in_bytes); - found = true; - } else if (n->m_L1Cache_L1DcacheMemory_vec[m_version]->tryCacheAccess(lineAddr, CacheRequestType_LD, dataPtr)){ - n->m_L1Cache_L1DcacheMemory_vec[m_version]->setMemoryValue(addr, value, size_in_bytes); - found = true; - } else if (Protocol::m_CMP && n->m_L2Cache_L2cacheMemory_vec[l2_ver]->tryCacheAccess(lineAddr, CacheRequestType_LD, dataPtr)){ - n->m_L2Cache_L2cacheMemory_vec[l2_ver]->setMemoryValue(addr, value, size_in_bytes); - found = true; - // } else if (n->TBE_TABLE_MEMBER_VARIABLE->isTagPresent(lineAddr)){ - // L1Cache_TBE& tbeEntry = n->TBE_TABLE_MEMBER_VARIABLE->lookup(lineAddr); - // DataBlock tmpData; - // int offset = addr.getOffset(); - // for(int i=0; i<size_in_bytes; ++i){ - // tmpData.setByte(offset + i, value[i]); - // } - // tbeEntry.setDataBlk(tmpData); - // tbeEntry.setDirty(true); - } else { - // Address not found - n = dynamic_cast<Chip*>(g_system_ptr->getChip(map_Address_to_DirectoryNode(addr)/RubyConfig::numberOfDirectoryPerChip())); - int dir_version = map_Address_to_DirectoryNode(addr)%RubyConfig::numberOfDirectoryPerChip(); - for(unsigned int i=0; i<size_in_bytes; ++i){ - int offset = addr.getOffset(); - n->m_Directory_directory_vec[dir_version]->lookup(lineAddr).m_DataBlk.setByte(offset + i, value[i]); - } - found = false; - } - - if (found){ - found = getRubyMemoryValue(addr, test_buffer, size_in_bytes); - assert(found); - if(value[0] != test_buffer[0]){ - WARN_EXPR((int) value[0]); - WARN_EXPR((int) test_buffer[0]); - ERROR_MSG("setRubyMemoryValue failed to set value."); - } - } - - return true; - } + return false; // Do nothing? } diff --git a/src/mem/ruby/tester/DeterministicDriver.cc b/src/mem/ruby/tester/DeterministicDriver.cc index bc27c2a35..7b7d0c9d2 100644 --- a/src/mem/ruby/tester/DeterministicDriver.cc +++ b/src/mem/ruby/tester/DeterministicDriver.cc @@ -45,10 +45,6 @@ DeterministicDriver::DeterministicDriver(RubySystem* sys_ptr) { - if (g_SIMULATING) { - ERROR_MSG("g_SIMULATING should not be defined."); - } - m_finish_time = 0; m_last_issue = -11; m_done_counter = 0; diff --git a/src/mem/ruby/tester/RaceyDriver.cc b/src/mem/ruby/tester/RaceyDriver.cc index 6ea9ec795..c56557645 100644 --- a/src/mem/ruby/tester/RaceyDriver.cc +++ b/src/mem/ruby/tester/RaceyDriver.cc @@ -41,10 +41,6 @@ RaceyDriver::RaceyDriver() { - if (g_SIMULATING) { - ERROR_MSG("g_SIMULATING should not be defined."); - } - // debug transition? if(false) { assert(g_debug_ptr); diff --git a/src/mem/ruby/tester/SyntheticDriver.cc b/src/mem/ruby/tester/SyntheticDriver.cc index 1d8dcb80a..081fc9d5e 100644 --- a/src/mem/ruby/tester/SyntheticDriver.cc +++ b/src/mem/ruby/tester/SyntheticDriver.cc @@ -42,11 +42,6 @@ SyntheticDriver::SyntheticDriver(RubySystem* sys_ptr) { - cout << "SyntheticDriver::SyntheticDriver" << endl; - if (g_SIMULATING) { - ERROR_MSG("g_SIMULATING should not be defined."); - } - m_finish_time = 0; m_done_counter = 0; diff --git a/src/mem/ruby/tester/Tester.cc b/src/mem/ruby/tester/Tester.cc index 53d6bc670..eafc04a92 100644 --- a/src/mem/ruby/tester/Tester.cc +++ b/src/mem/ruby/tester/Tester.cc @@ -42,10 +42,6 @@ Tester::Tester(RubySystem* sys_ptr) { - if (g_SIMULATING) { - ERROR_MSG("g_SIMULATING should not be defined."); - } - g_callback_counter = 0; // add the tester consumer to the global event queue diff --git a/src/mem/ruby/tester/main.cc b/src/mem/ruby/tester/main.cc index f36168c8e..5e77488e9 100644 --- a/src/mem/ruby/tester/main.cc +++ b/src/mem/ruby/tester/main.cc @@ -43,9 +43,5 @@ int main(int argc, char *argv[]) { - if (g_SIMULATING) { - ERROR_MSG("g_SIMULATING should not be defined."); - } - tester_main(argc, argv); } |