Ignore:
Timestamp:
Feb 15, 2015, 8:44:35 PM (10 years ago)
Author:
cfuguet
Message:

reconf: add new mode to the dspin_router

  • Modes are:

+ NORMAL : normal X-first routing

+ PATH_RECOVERY : create contour around the blackhole.

If the destination is the blackhole, send
packet to recovery direction, else use normal
X-first routing.

+ SEGMENT_RECOVERY: Like PATH_RECOVERY but do not create contour, only

reroute packets with the blackhole as destination.

  • Remove deprecated unitary test simple_recovery_routing_test
  • Update the simple_segment_recovery unitary test.
Location:
branches/reconfiguration/modules/dspin_router/caba/source
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/reconfiguration/modules/dspin_router/caba/source/include/dspin_router.h

    r934 r947  
    141141
    142142    // fault-recovery methods
    143     bool    need_reroute( size_t xdest, size_t ydest, int bhpos );
     143    bool    is_destination_blackhole( size_t xdest, size_t ydest, int bhpos );
    144144    int     recovery_route( size_t xdest, size_t ydest );
    145145
     
    149149    {
    150150        m_disable_mask = mask;
     151    }
     152
     153    inline bool is_network_recovery_enable()
     154    {
     155        return (((p_recovery_cfg->read() >> 7) & 0x1) != 0);
     156    }
     157
     158    inline int migration_route()
     159    {
     160        return ((p_recovery_cfg->read() >> 4) & 0x7);
     161    }
     162
     163    inline int blackhole_position()
     164    {
     165        return (p_recovery_cfg->read() & 0xF);
    151166    }
    152167
  • branches/reconfiguration/modules/dspin_router/caba/source/src/dspin_router.cpp

    r934 r947  
    138138    {
    139139        if (p_recovery_cfg == NULL) {
    140             p_recovery_cfg = new sc_core::sc_in<uint32_t>;
     140            p_recovery_cfg = new sc_core::sc_in<uint32_t> ("p_recovery_cfg");
    141141        }
    142142        (*p_recovery_cfg)(s);
     
    144144
    145145    ///////////////////////////////////////////////////
    146     tmpl(bool)::need_reroute( size_t xdest, size_t ydest, int bhpos )
     146    tmpl(bool)::is_destination_blackhole( size_t xdest, size_t ydest, int bhpos )
    147147    {
    148148        size_t xhole, yhole;
     
    189189    tmpl(int)::recovery_route( size_t xdest, size_t ydest )
    190190    {
    191         int bhpos = p_recovery_cfg->read() & 0xF;
    192 
    193         // reroute the request if its destination is the blackhole (this is to
    194         // implement the segment recovery mechanism)
    195         if (need_reroute(xdest, ydest, bhpos)) {
    196             int recovery_direction = (p_recovery_cfg->read() >> 4) & 0xF;
    197 
    198 #if SOCLIB_MODULE_DEBUG
    199         std::cout << "<" << name() << "> reroute request to DIR = "
    200                   << recovery_direction << std::endl;
    201 #endif
    202 
    203             return recovery_direction;
    204         }
     191        int bhpos = blackhole_position();
    205192
    206193        if ( xdest > m_local_x ) {
     
    315302        if ( p_recovery_cfg != NULL )
    316303        {
    317             if ( (p_recovery_cfg->read() & 0xF) != BH_NONE )
    318             {
    319                 return recovery_route(xdest, ydest);
     304            if (blackhole_position() != BH_NONE )
     305            {
     306                // reroute the request if its destination is the blackhole (this
     307                // is to implement the segment recovery mechanism)
     308                if (is_destination_blackhole(xdest, ydest, blackhole_position()))
     309                {
     310                    int dir = migration_route();
     311
     312#if SOCLIB_MODULE_DEBUG
     313                    std::cout << "<" << name() << "> migration: "
     314                              << "route request to DIR = " << dir << std::endl;
     315#endif
     316                    return dir;
     317                }
     318
     319                if (is_network_recovery_enable())
     320                {
     321                    int dir = recovery_route(xdest, ydest);
     322
     323#if SOCLIB_MODULE_DEBUG
     324                    std::cout << "<" << name() << "> network recovery: "
     325                              << "route request to DIR = " << dir << std::endl;
     326#endif
     327                    return dir;
     328                }
    320329            }
    321330        }
Note: See TracChangeset for help on using the changeset viewer.