Expand description

A policy defined to what output queue/port to request among the ones returned as possible by the routing function. Policies are designed to be applied in sequence so that there remains at most a single candidate.

One should include always the policy EnforceFlowControl or equivalent at some point. To ensure at most one candidate you may use the Random policy.

see new_virtual_channel_policy for documentation on the configuration syntax of predefined policies.

Structs

Only allows those candidates whose vc is in the allowed list.

Apply a different policy to each hop.

Select virtual channel=packet.hops.

Does not do anything. Just a placeholder for some operations.

New label = min{old_label,value} or max{old_label,value} (value,bottom)

New label = old_label*multplier+summand. (multiplier,summand,saturate_bottom,saturate_top,minimum,maximum)

Select the egresses with lowest label.

Select the lowest value of the product of the queue length (that is, consumed credits) times the estimated hop count (usually 1 plus the distance from next router to target router) This was initially proposed for the UGAL routing. parameters=(extra_congestion,extra_distance,aggregate_buffers), which are added in the formula to allow tuning. Firth two default to 0. aggregate_buffers indicates to use all buffers instead of just the selected one.

Apply a different policy to candidates from each entry virtual channel.

Apply a different policy to each hop.

Apply a different policy to candidates with each label.

New label = -old_label Just until I fix the grammar to accept preceding minuses.

Transform (l,q) into new label al+bq+clq+d where l is the label and q is the occupancy.

Request a port+virtual channel at random from all available.

Extra information to be used by the policies of virtual channels.

Only allows those candidates whose vc equals their entry vc plus some s in shifts.

Request the port+virtual channel with more credits. Does not solve ties, so it needs to be followed by Random or something.

Vector of labels new_label = vector[old_label]

Select virtual channel in (widthpacket.hops..width(packet.hops+1)).

Traits

How virtual channels are selected for a packet They provide the function filter(Vec) -> Vec It needs: rng, self.virtual_ports(credits and length), phit.packet.routing_info.borrow().hops, server_ports, topology.{distance,neighbour}, port_average_neighbour_queue_length, port_last_transmission We could also provide functions to declare which aspects must be computed. Thus allowing to both share when necessary and to not computing ti when unnecessary.

Functions

Build a new virtual channel policy. These policies are successive refinements over the available ones as returned by the routing function, to determine to which exit a request is done.