We have modified the DirectoryMemory.C to get more information about our error and we got the following: Warning: in fn Directory_Entry& DirectoryMemory::lookup(PhysAddress) in system/DirectoryMemory.C:134: m_chip_ptr->getID() is 0 Warning: in fn Directory_Entry& DirectoryMemory::lookup(PhysAddress) in system/DirectoryMemory.C:135: RubyConfig::numberOfDirectoryPerChip() is 64 Warning: in fn Directory_Entry& DirectoryMemory::lookup(PhysAddress) in system/DirectoryMemory.C:136: m_version is 55 Warning: in fn Directory_Entry& DirectoryMemory::lookup(PhysAddress) in system/DirectoryMemory.C:137: map_Address_to_DirectoryNode(address) is 23 Warning: in fn Directory_Entry& DirectoryMemory::lookup(PhysAddress) in system/DirectoryMemory.C:138: address.getAddress() is 25312 Warning: in fn Directory_Entry& DirectoryMemory::lookup(PhysAddress) in system/DirectoryMemory.C:139: index is 1 Warning: in fn
Directory_Entry& DirectoryMemory::lookup(PhysAddress) in system/DirectoryMemory.C:140: m_size is 131072 It seems that the mapping is done correctly since at least gives a value inside the range. What we don't know is from where the variables like m_version or m_chip_ptr come. Since they are used in the function isPresent maybe will help us to know what is wrong. bool DirectoryMemory::isPresent(PhysAddress address) { return (map_Address_to_DirectoryNode(address) == m_chip_ptr->getID()*RubyConfig::numberOfDirectoryPerChip()+m_version); } Thank you for your help, /Marco and Enric Enric Herrero <enricherrero@xxxxxxxx> escribió: Ok, we have seen that: g_MEMORY_MODULE_BITS = g_MEMORY_SIZE_BITS - g_DATA_BLOCK_BITS - g_NUM_MEMORIES_BITS; and that
g_MEMORY_SIZE_BYTES is the installed memory. Probably in the mapping function memoryBits() is g_NUM_MEMORIES_BITS. In this case our system should work but we still have a failed assertion. Maybe the problem is that we use a large number of memories since in configurations with 4,8,16 and 32 memories we don't have problems. We have 4096 Mb of main memory divided in 64 memories, so 64Mb/memory
ruby0.setparam g_NUM_PROCESSORS 64 ruby0.setparam g_NUM_L2_BANKS 64 ruby0.setparam g_NUM_MEMORIES 64 ruby0.setparam g_PROCS_PER_CHIP 64 ruby0.setparam L1_CACHE_NUM_SETS_BITS 8 ruby0.setparam DIR_CACHE_NUM_SETS_BITS 10 ruby0.setparam L2_CACHE_NUM_SETS_BITS 18 ruby0.setparam g_DATA_BLOCK_BYTES 32 ruby0.setparam g_MEMORY_SIZE_BYTES 4294967296 If we understand well all the memories in
ruby can access all positions in dram memory. It is the mapping function that determines which memory has access to each position. In this case a failed assertion when looking an address may not be a problem of the mapping function. Is it right? Any help is highly appreciated, Thanks /Marco and Enric Enric Herrero <enricherrero@xxxxxxxx> escribió: Hi, We have checked the L2->Dir mapping function and it's like that: if (RubyConfig::memoryBits() > 0) { dirNode = addr.bitSelect(RubyConfig::dataBlockBits(), RubyConfig::dataBlockBits()+RubyConfig::memoryBits()-1); }
We
would like to know which variable in ruby config is related with memoryBits(). We want to use interleaved memory so we would like to have a number of bits according to the number of memories. Also we would like to know better what some config parameters mean: g_MEMORY_SIZE_BYTES: 4294967296 (This means we have 4096 Mb of RAM) We have an address space size of 64 bits since we are working with Sarek g_MEMORY_MODULE_BITS: 0 How is this parameter calculated? Thank you, /Marco and Enric Mike Marty <mikem@xxxxxxxxxxx> escribió: This error appears when the mapping functions in Slicc don't agree with what the individual DirectoryMemory's range of memory.
See the map_Address_to_Directory and map_Address_to_DirectoryNode functions in
ruby/slicc_interface/RubySlicc_ComponentMapping.h
--Mike
Enric Herrero wrote:
>Hi, > >We are running simulations with a new protocol we have >written. It worked in the tester and also while >running SPLASH2 Water-Spatial with 4,8,16 and 32 >processors. But we have the following error when >simulating with 64 processors: > >Processors: 64 >Creating system done >Ruby initialization complete >failed assertion 'isPresent(address)' at fn >Directory_Entry& DirectoryMemory::lookup(PhysAddress) >in system/DirectoryMemory.C:132 >failed assertion 'isPresent(address)' at fn >Directory_Entry& DirectoryMemory::lookup(PhysAddress) >in system/DirectoryMemory.C:132 > >We think that maybe it is a problem of how we >configure the simulation since the protocol worked >with the other configurations. The problem appears >only when
we load ruby. We have defined the following >parameters: > >@boards = {0 : [[0, 4, 4096],[1, 4, 0],[2, 4, 0],[3, >4, 0],[4, 4, 0],[5, 4, 0]], > 1 : [[0, 4, 0],[1, 4, 0],[2, 4, 0],[3, 4, >0],[4, 4, 0],[5, 4, 0]], > 2 : [[0, 4, 0],[1, 4, 0],[2, 4, 0],[3, 4, >0]]} #4096 Mb of main memory > >@sarek_disk_size = 4256972800L > >ruby0.setparam L2_CACHE_NUM_SETS_BITS 18 #512kB/proc >ruby0.setparam g_MEMORY_SIZE_BYTES 4294967296 #32 bits > >We would be very grateful if someone knows why this >error appears. Thank you. > >/Marco and Enric
LLama Gratis a cualquier PC del Mundo. Llamadas a fijos y móviles desde 1 céntimo por minuto. http://es.voice.yahoo.com_______________________________________________ Gems-users mailing list Gems-users@xxxxxxxxxxx https://lists.cs.wisc.edu/mailman/listinfo/gems-users
__________________________________________________ Correo Yahoo! Espacio para todos tus mensajes, antivirus y antispam ¡gratis! Regístrate ya - http://correo.yahoo.es
|