Trait Routing

Source
pub trait Routing: Debug {
    // Required method
    fn next(
        &self,
        routing_info: &RoutingInfo,
        topology: &dyn Topology,
        current_router: usize,
        target_router: usize,
        target_server: Option<usize>,
        num_virtual_channels: usize,
        rng: &mut StdRng,
    ) -> Result<RoutingNextCandidates, Error>;

    // Provided methods
    fn initialize_routing_info(
        &self,
        _routing_info: &RefCell<RoutingInfo>,
        _topology: &dyn Topology,
        _current_router: usize,
        _target_touter: usize,
        _target_server: Option<usize>,
        _rng: &mut StdRng,
    ) { ... }
    fn update_routing_info(
        &self,
        _routing_info: &RefCell<RoutingInfo>,
        _topology: &dyn Topology,
        _current_router: usize,
        _current_port: usize,
        _target_router: usize,
        _target_server: Option<usize>,
        _rng: &mut StdRng,
    ) { ... }
    fn initialize(&mut self, _topology: &dyn Topology, _rng: &mut StdRng) { ... }
    fn performed_request(
        &self,
        _requested: &CandidateEgress,
        _routing_info: &RefCell<RoutingInfo>,
        _topology: &dyn Topology,
        _current_router: usize,
        _target_router: usize,
        _target_server: Option<usize>,
        _num_virtual_channels: usize,
        _rng: &mut StdRng,
    ) { ... }
    fn statistics(&self, _cycle: Time) -> Option<ConfigurationValue> { ... }
    fn reset_statistics(&mut self, _next_cycle: Time) { ... }
}
Expand description

A routing algorithm to provide candidate routes when the Router requires. It may store/use information in the RoutingInfo. A Routing does not receive information about the state of buffers or similar. Such a mechanism should be given as a VirtualChannelPolicy.

Required Methods§

Source

fn next( &self, routing_info: &RoutingInfo, topology: &dyn Topology, current_router: usize, target_router: usize, target_server: Option<usize>, num_virtual_channels: usize, rng: &mut StdRng, ) -> Result<RoutingNextCandidates, Error>

Compute the list of allowed exits. routing_info contains the information in the packet being routed. current_router is the index of the router in the topology that is performing the routing. target_router is the index of the router towards which we are routing. If target_server is not None it is the server destination of the packet, which must be attached to target_router. A routing that works without this can be more simply used as part of other routing algorithms, as it may be used to route to intermediate routers even on indirect topologies. num_virtual_channels is the number of virtual channels dedicated to this routing. rng is the global generator of random numbers.

Provided Methods§

Source

fn initialize_routing_info( &self, _routing_info: &RefCell<RoutingInfo>, _topology: &dyn Topology, _current_router: usize, _target_touter: usize, _target_server: Option<usize>, _rng: &mut StdRng, )

Initialize the routing info of the packet. Called when the first phit of the packet leaves the server and enters a router.

Source

fn update_routing_info( &self, _routing_info: &RefCell<RoutingInfo>, _topology: &dyn Topology, _current_router: usize, _current_port: usize, _target_router: usize, _target_server: Option<usize>, _rng: &mut StdRng, )

Updates the routing info of the packet. Called when the first phit of the packet leaves a router and enters another router. Values are of the router being entered into.

Source

fn initialize(&mut self, _topology: &dyn Topology, _rng: &mut StdRng)

Prepares the routing to be utilized. Perhaps by precomputing routing tables.

Source

fn performed_request( &self, _requested: &CandidateEgress, _routing_info: &RefCell<RoutingInfo>, _topology: &dyn Topology, _current_router: usize, _target_router: usize, _target_server: Option<usize>, _num_virtual_channels: usize, _rng: &mut StdRng, )

To be called by the router when one of the candidates is requested.

Source

fn statistics(&self, _cycle: Time) -> Option<ConfigurationValue>

To optionally write routing statistics into the simulation output.

Source

fn reset_statistics(&mut self, _next_cycle: Time)

Clears all collected statistics

Implementors§