Re: [Gems-users] porting CMP-DNUCA to gems 2.0... problem with MOESI_CMP_NUCA-L1cache.sm file and non_constant_msg_hack="yes" token


Date: Sun, 23 Mar 2008 18:17:41 -0500
From: "Dimitris Kaseridis" <kaseridi@xxxxxxxxxxxxxx>
Subject: Re: [Gems-users] porting CMP-DNUCA to gems 2.0... problem with MOESI_CMP_NUCA-L1cache.sm file and non_constant_msg_hack="yes" token
Hi again,

I managed to solve my problem.

Slicc code although for both version (1.2 and 2.0) is version 0.3 the
one included in gems1.2 had some extra stuff for NUCA
including the parsing for the token and I also had to add the
MessageBuffer::getMutableHeadOfQueue() in the MessageBuffer.

I hope you didn't spend time on my problem.

Thanks,
Dimitris


On Sat, Mar 22, 2008 at 8:57 PM, Dimitris Kaseridis
<kaseridi@xxxxxxxxxxxxxx> wrote:
> Hi
>
>  I am porting DNUCA to gems 2.0 and I have a problem with a "special"
>  command in MOESI_CMP_NUCA-L1cache.sm file.
>  I used the protocol files of gems1.2 version and I have included in
>  gems 2.0  source all the necessary parts
>  of the code from gems1.2 that is necessary to implement the NUCA protocol.
>
>  My problem is that in the MOESI_CMP_NUCA-L1cache.sm in line 520 you
>  can find this piece of code:
>
>  in_port(triggerQueue_in, NUCAPotentialMoveMsg, triggerQueue) {
>     if(triggerQueue_in.isReady()) {
>       peek(triggerQueue_in, NUCAPotentialMoveMsg, non_constant_msg_hack="yes") {
>
>  The "non_constant_msg_hack" is somekind of hack that is not used
>  elsewhere and it is not possible to pass through the compile.
>  If I try to compile I have the following error message:
>
>  ####################################################
>
>  mkdir -p generated/MOESI_CMP_NUCA/
>  mkdir -p html/MOESI_CMP_NUCA/
>  touch generated/MOESI_CMP_NUCA/created
>  touch html/MOESI_CMP_NUCA/created
>  Generating protocol handlers
>  /opt/gems-2.0//slicc/amd64-linux/bin/slicc.exec
>  generated/MOESI_CMP_NUCA html/MOESI_CMP_NUCA MOESI_CMP_NUCA "html"
>  ../protocols/RubySlicc_Exports.sm ../protocols/RubySlicc_Types.sm
>  ../protocols/RubySlicc_Util.sm
>  ../protocols/RubySlicc_ComponentMapping.sm
>  ../protocols/RubySlicc_Profiler.sm ../protocols/RubySlicc_Defines.sm
>  ../protocols/MOESI_CMP_NUCA-msg.sm
>  ../protocols/MOESI_CMP_NUCA-L1cache.sm
>  ../protocols/MOESI_CMP_NUCA-L2cache.sm
>  ../protocols/MOESI_CMP_NUCA-dir.sm ../protocols/MOESI_CMP_NUCA-col.sm
>  ../protocols/NUCA_CMP-node.sm
>  SLICC v0.3
>  Parsing...
>   ../protocols/RubySlicc_Exports.sm
>   ../protocols/RubySlicc_Types.sm
>   ../protocols/RubySlicc_Util.sm
>   ../protocols/RubySlicc_ComponentMapping.sm
>   ../protocols/RubySlicc_Profiler.sm
>   ../protocols/RubySlicc_Defines.sm
>   ../protocols/MOESI_CMP_NUCA-msg.sm
>   ../protocols/MOESI_CMP_NUCA-L1cache.sm
>  ../protocols/MOESI_CMP_NUCA-L1cache.sm:522: syntax error, unexpected
>  ',', expecting ')' at ,
>  make[1]: *** [generated/MOESI_CMP_NUCA/generated] Error 1
>  make[1]: Leaving directory `/local/opt/gems-2.0/ruby'
>  make: *** [all] Error 2
>
>  ###############################################################
>
>  If I take out this special part of the protocol and I use it like the following
>
>  ##############################################################
>
>  in_port(triggerQueue_in, NUCAPotentialMoveMsg, triggerQueue) {
>     if(triggerQueue_in.isReady()) {
>       peek(triggerQueue_in, NUCAPotentialMoveMsg) {
>
>  ###########################################################
>
>  Then I am able to compile and have a running version of ruby but after
>  a couple of instructions I have a segmentation fault. After debugging
>  ruby I have this error message:
>
>  ######################################################
>
>  Debug: in fn bool CacheMemory<ENTRY>::isTagPresent(const Address&)
>  const [with ENTRY = L1Cache_Entry] in system/CacheMemory.h:482:
>  address is [0x3882c0c0, line 0x3882c0c0]
>  Debug: in fn bool CacheMemory<ENTRY>::isTagPresent(const Address&)
>  const [with ENTRY = L1Cache_Entry] in system/CacheMemory.h:483: found
>  Debug: in fn bool CacheMemory<ENTRY>::isTagPresent(const Address&)
>  const [with ENTRY = L1Cache_Entry] in system/CacheMemory.h:478:
>  address is [0x3882c0c0, line 0x3882c0c0]
>  Debug: in fn bool CacheMemory<ENTRY>::isTagPresent(const Address&)
>  const [with ENTRY = L1Cache_Entry] in system/CacheMemory.h:479: No tag
>  match
>
>  Debug: in fn const Message* MessageBuffer::peekAtHeadOfQueue() const
>  in buffers/MessageBuffer.C:166: Peeking at head of queue [Chip 0 7,
>  L1Cache, triggerQueue_in] time: 314.
>  Debug: in fn const Message* MessageBuffer::peekAtHeadOfQueue() const
>  in buffers/MessageBuffer.C:172: *msg_ptr is [NUCAPotentialMoveMsg:
>  Address=[0x3882c0c0, line 0x3882c0c0] PC=[0x1055454, line 0x1055440]
>  requestType=LD respondingMach=Directory-3 currentTokens=1024
>  Request=NULL-NULL-610931536  NULL-NULL-0 Persistent=1
>  collectorMergeResponse=0 L2HomeBank=NULL--1294385057 Time=313 ]
>
>  Fatal Error: in fn std::string MachineType_to_string(const
>  MachineType&) in generated/MOESI_CMP_NUCA/MachineType.C:27: Invalid
>  range for type MachineType
>  Error: iFatal Error: in fn std::string MachineType_to_string(const
>  MachineType&) in generated/MOESI_CMP_NUCA/MachineType.C:27: Invalid
>  range for type MachineType
>  Abort (SIGABRT) in main thread
>  The simulation state has been corrupted. Simulation cannot continue.
>
>  ####################################################3
>
>  Going through the documentation site you propose to other people to
>  take out the ERROR_MSG(\"Invalid range for type ")  that has to do
>  with the MachineType through the slicc/symbols/Type.C file.
>
>  After doing that I pass the previous point but during the allocation
>  that follows I receive the following error message:
>
>  #####################################################
>
>  Debug: in fn bool CacheMemory<ENTRY>::isTagPresent(const Address&)
>  const [with ENTRY = L1Cache_Entry] in system/CacheMemory.h:482:
>  address is [0x3882c0c0, line 0x3882c0c0]
>  Debug: in fn bool CacheMemory<ENTRY>::isTagPresent(const Address&)
>  const [with ENTRY = L1Cache_Entry] in system/CacheMemory.h:483: found
>  Debug: in fn bool CacheMemory<ENTRY>::isTagPresent(const Address&)
>  const [with ENTRY = L1Cache_Entry] in system/CacheMemory.h:478:
>  address is [0x3882c0c0, line 0x3882c0c0]
>  Debug: in fn bool CacheMemory<ENTRY>::isTagPresent(const Address&)
>  const [with ENTRY = L1Cache_Entry] in system/CacheMemory.h:479: No tag
>  match
>
>  Debug: in fn const Message* MessageBuffer::peekAtHeadOfQueue() const
>  in buffers/MessageBuffer.C:166: Peeking at head of queue [Chip 0 7,
>  L1Cache, triggerQueue_in] time: 314.
>  Debug: in fn const Message* MessageBuffer::peekAtHeadOfQueue() const
>  in buffers/MessageBuffer.C:172: *msg_ptr is [NUCAPotentialMoveMsg:
>  Address=[0x3882c0c0, line 0x3882c0c0] PC=[0x1055454, line 0x1055440]
>  requestType=LD respondingMach=Directory-3 currentTokens=1024
>  Request=NULL-NULL-355557312  NULL-NULL-0 Persistent=1
>  collectorMergeResponse=0 L2HomeBank=NULL--1216606833 Time=313 ]
>
>  Error: i
>  INDEX= -1
>  failed assertion 'index >= 0' at fn TYPE& Vector<TYPE>::ref(int) [with
>  TYPE = Set] in /opt/gems-2.0//common/Vector.h:171
>  failed assertion 'index >= 0' at fn TYPE& Vector<TYPE>::ref(int) [with
>  TYPE = Set] in /opt/gems-2.0//common/Vector.h:171
>  ##############################################
>
>  Notice that the index is coming out to be -1. In previous examples of
>  such an error you say that it is probably a misconfiguration but
>  I can't find any errors in my configuration.
>
>  I use the default values you have in the CMP-NUCA wiki pages and
>  everytime I start simics I apply the following values:
>
>  ###############################################3
>
>  instruction-fetch-mode instruction-fetch-trace
>  istc-disable
>  dstc-disable
>  magic-break-enable
>
>  # Load modules
>  load-module ruby
>
>  # Setup
>  ruby0.setparam g_NUM_PROCESSORS 8
>  ruby0.setparam g_MEMORY_SIZE_BYTES 4294967296
>  ruby0.setparam g_PROCS_PER_CHIP 8
>  ruby0.setparam g_NUM_L2_BANKS 256
>  ruby0.setparam g_NUM_MEMORIES 8
>  ruby0.setparam g_NUM_DNUCA_BANK_SETS 16
>  ruby0.setparam L1_CACHE_ASSOC 2
>  ruby0.setparam L2_CACHE_ASSOC 16
>  ruby0.setparam_str g_NETWORK_TOPOLOGY FILE_SPECIFIED
>  ruby0.setparam_str g_DYNAMIC_TIMEOUT_ENABLED false
>  ruby0.setparam_str REMOVE_SINGLE_CYCLE_DCACHE_FAST_PATH true
>  ruby0.setparam_str g_CACHE_DESIGN NUCACOL
>  ruby0.setparam_str g_adaptive_routing false
>  ruby0.setparam NUMBER_OF_VIRTUAL_NETWORKS 7
>  ruby0.setparam g_endpoint_bandwidth 1000
>  ruby0.setparam_str g_NUCA_PREDICTOR_CONFIG DNUCA
>  ruby0.setparam_str ENABLE_MIGRATION true
>  ruby0.setparam_str COLLECTOR_HANDLES_OFF_CHIP_REQUESTS true
>  #ruby0.setparam_str PERFECT_DNUCA_SEARCH true
>  ruby0.setparam_str PERFECT_DNUCA_SEARCH false
>
>  # Initialization
>  ruby0.init
>  #####################################################
>
>  this is the reason I believe that it has sth to do with the   "
>  peek(triggerQueue_in, NUCAPotentialMoveMsg,
>  non_constant_msg_hack="yes") { " command that I describe in the
>  beginning of the email and it is not obvious to me
>  neither what it is doing nor the place in the slicc (?) code that it
>  is handled.
>
>  Any help would be really appreciated
>
>  Thanks,
>  Dimitris
>



-- 
Dimitris
[← Prev in Thread] Current Thread [Next in Thread→]