Summary of the network-related files in Flexus:
components/Nic/NicXImpl.hpp
components/Common/Transports/NetworkTransport.hpp
components/Common/Slices/NetworkMessage.hpp
src, dest, vc, size, src_port, dst_port
components/ProtocolEngine/he_exec_engine.hpp/cpp
components/ProtocolEngine/ServiceFlexus.hpp
translateMemoryTransport (trans): create a tPacket (protocol packet) from a memory transport
send (…): creates the protocol packet and NetworkMessage for the requested
NetworkMessage payload size: 64 or 0 bytes
components/NetShim: interconnection network
Translates NetworkMessage to MessageStage (network packet) upon receiving the network message
allocMessageState ()
transmit latency = transport[NetworkMessageTag]→size: i.e. flit size = 1 byte (when flexusInFastMode; this is the default setting)
If not in fast mode (netcontainer.cpp): latency = channelLatencyData (32) or channelLatencyControl (1)
Actual channel busy time = transmit latency / localLatencyDivider (8)
components/NetShim/netcommon.hpp: defines MessageState
Paper survey stuff moved to the Research Survey section.
NUCA Non-uniform cache architecture
If a link has multi-cycle latency (say N), does that mean we can only send one flit every N cycles? (probably not. The link acts as a pipeline)
Things to try:
crossbar resource utilization (variable sizes and data widths)
router arbitration resource util. (Schelle claims this is one of the major reasons why VC routers are not suitable for FPGAs)
time-decompose the crossbar into multi-cycle arbitrations (done)
allow TGs to drift behind to minimize injection queue size (see booksim) (done)
compact flits at FQ (since flits arrive in streams)
Back to top