[Gems-users] FILE_SPECIFIED: Network Interconnect


Date: Tue, 23 Jan 2007 00:36:57 -0500
From: "Nitin Bhardwaj" <bhardwaj@xxxxxxxxxxxxxxxx>
Subject: [Gems-users] FILE_SPECIFIED: Network Interconnect
Thanks allot for resolving my queries. I am just ramping up, so really appreciate your responses. 

I have few other execution time failures with NUCA_Procs-8_ProcsPerChip-8_L2Banks-256_Memories-8.txt and below are few rubyconfig.default
parameters which i modified:

L2_CACHE_ASSOC: 4
L2_CACHE_NUM_SETS_BITS: 16
g_NETWORK_TOPOLOGY: FILE_SPECIFIED
g_CACHE_DESIGN: NUCA
g_NUM_DNUCA_BANK_SETS: 32
g_NUCA_PREDICTOR_CONFIG: DNUCA
ENABLE_MIGRATION: true
ENABLE_REPLICATION: false
COLLECTOR_HANDLES_OFF_CHIP_REQUESTS: true

1.) I get an error:

failed assertion 'RubyConfig::DNUCABankSetBits() > 0' at fn MachineID map_L1Cach
eMachId_to_L2Cache(const Address&, MachineID) in slicc_interface/RubySlicc_Compo
nentMapping.h:232

Which according to the code is g_NUM_BANKS_IN_BANK_SET_BITS which should be:
g_NUM_BANKS_IN_BANK_SET = g_NUM_L2_BANKS_PER_CHIP/g_NUM_DNUCA_BANK_SETS; // 256/32 = 8
g_NUM_BANKS_IN_BANK_SET_BITS = log_int(g_NUM_BANKS_IN_BANK_SET); // 3

2.) Now If I just set the "ENABLE_MIGRATION to false" then I get the following error:

failed assertion 'true == Protocol::m_NUCA' at fn void Profiler::printStats(std::ostream&, bool) in profiler/Profiler.C:449
failed assertion 'true == Protocol::m_NUCA' at fn void Profiler::printStats(std::ostream&, bool) in profiler/Profiler.C:449

Which according to the code is assigned a value FALSE in slicc_interface/AbstractProtocol.h

Further, If I set the "g_NUCA_PREDICTOR_CONFIG to NULL" then the tester.exec works fine. But if I enable the -c n option then it fails giving:

Debug: in fn void Check::initiateAction() in tester/Check.C:145: m_status is Idle
Debug: in fn bool Sequencer::doRequest(const CacheMsg&) in system/Sequencer.C:532: Fast path miss
Debug: in fn void Check::initiateAction() in tester/Check.C:149: m_status is Action_Pending
Debug: in fn virtual void PerfectSwitch::wakeup() in network/simple/PerfectSwitch.C:155: m_switch_id is 48
Debug: in fn virtual void PerfectSwitch::wakeup() in network/simple/PerfectSwitch.C:200: incoming is 4
Debug: in fn virtual void PerfectSwitch::wakeup() in network/simple/PerfectSwitch.C:205: *net_msg_ptr is [RequestMsg: Address=[0x62c0, line 0x62c0] Type=GETX Requestor=L1Cache-6Fatal Error: in fn std::string MachineType_to_string(const MachineType&) in generated/MOESI_CMP_directory/MachineType.C:23: Invalid range for type MachineType
RequestorMachine=Fatal Error: in fn std::string MachineType_to_string(const MachineType&) in generated/MOESI_CMP_directory/MachineType.C:23: Invalid range for type MachineType

-Thank You,
Nitin Bhardwaj

> I am trying to understand the Ruby code base, and is experimenting with

> FILE_SPECIFIED network interconnect and coherence protocol.
> I have few questions regarding the Ruby Network specification.


>
> 1.) In the rubyconfig.defaults when i specify
> (NUCA_Procs-8_ProcsPerChip-8_L2Banks-256_Memories-
8.txt I get an error:
>
> Warning: in fn MachineType string_to_MachineType(const std::string&) in


> generated/MOESI_CMP_directory/MachineType.C:38: str is Collector
>
> I looked at the code and can see that in the
Topology.C function
> makefilespecified() parses the NUCA*_*.txt file and gets the machine type


> info from the MachineType.C file. I haven't changed nything in the
> NUCA*_*.txt file.
>

This file is specific to the DNUCA SLICC protocol that implements a
controller called "Collector"



> 2.) What does the function call to shortest path do? If i am using a NUCA
> network specified file then does this shortest path from one node to the

> other is going to change my topology by finding a shortest path for node'x'


> to node'y' and creating a link between them? Or is it controlled by adaptive
> routing parameter?
>


It is used for adaptive routing to compute the routes


> 3.) When I specify a network using the NUCA_**** file does that create a


> physical link between the 2 nodes. Meaning if i want to route packets from

> L1:0 to {L1:1 or L1:2 or L2:0}, depending on some condition's and i specify
>
> bw_unit:1000
> ext_node:L1Cache:0 int_node:0 link_latency:1 bw_multiplier:64


> ext_node:L1Cache:1 int_node:1 link_latency:1 bw_multiplier:64

> ext_node:L1Cache:2 int_node:2 link_latency:1 bw_multiplier:64
> ext_node:L2Cache:0 int_node:0 link_latency:1 bw_multiplier:64

> ext_node:L2Cache:1 int_node:1 link_latency:1 bw_multiplier:64

> ext_node:L2Cache:2 int_node:2 link_latency:1 bw_multiplier:64

>
> int_node:0 int_node:1 link_latency:1 bw_multiplier:16
> int_node:0 int_node:2 link_latency:1 bw_multiplier:16

> int_node:1 int_node:2 link_latency:1 bw_multiplier:16

> ....................

>
> then my L1Cache0 to switch 0 [bandwidth is 64 bytes / cycle] and L1Cache1 to
> switch 1 [bandwidth is 64 bytes /cycle] and my switch0 to switch1 is

> connected with an internal bandwith of 16 bytes /cycle. Now, if i have to


> route the RequestMsg (packets) from L1:0 to {L1:1 or L1:2 or L2:0}? Then
> where should i specify the changes. Is it going to be in slicc/protocol/L1-

>
Cache.sm
?
>


Yes, thats correct.

The network will route the message to the destination you choose by

computing the shortest route. Adaptive routing also takes into account
network congestion. You can disable adaptive routing if you want.



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