8803J - High Performance Communication (Spring 2002)

January 28, 2002


TOPIC: Mesh Routing, MRC, Alewife, ...
 

Reading:


The first paper addresses mesh routing chips (MRCs) which are organized as shown in the following diagram:

TRC (Torus Routing Chip)/Mosaic: J-Machine, M-Machine.
MRC (Mesh Routing Chip): Caltech Machines, Intel "Delta", Alewife.

Each chip has 10 ports:

Issues dealt with in this class are:


(A) SIGNALING CONVENTIONS:

no clock, only ACK, min. number of transactions: 2-phase asynchronous protocol.
 

(B) PACKET FORMAT:

            Packet format:

X and Y indicate the number of hops in the x- and y-direction in the network, followed by the data and the tail.
Example: X=+2 and Y=+1. The packet is forwarded twice in the x-direction from W(est) to E(ast) (+2) and then once in the y-direction from S(outh) to N(orth) (+1):

The routing mechanism is implemented in two levels, first packets are forwarded in their x-direction, then in their y-direction:

"Wormhole routing" allows for sending out long messages at a router before all of the message has been received.
 

(C) FLOW CONTROL/RELIABILITY/DEADLOCKS:

    (i)   Flow Control: ACKs in hardware.
    (ii)  Reliability: assumed :-)
    (iii) Deadlocks...

     DEADLOCKS:

Compare to OS: deadlocks are possible if 'circular waiting' occurs. Solution: ordering of locks (ordering of the 'resources'). Here: Routers forward packet in x direction until x=0, then in y-direction until y=0 ===> ordering achieved by first forwarding in X and then in Y. Disadvantage: no other routing decisions possible, e.g., if a path is congested, router can not decide to go around (less freedom).

Possible deadlocks:


(i) Protocol deadlocks: e.g.: RPC: request message followed by reply message, e.g.:

    req_handler {                    while (i) {   /* outer loop */
        send reply;                      poll (i);
    };                                   do request;
                                     };


e.g.: try to send before we receive next message and don't get any reply...
    ---->   more buffer
    ----> req_handler {
                        while (! ready to send)
                            buffer message;
                        reply;
                    };

that is, implement your own buffering.

(ii) Duplicate network: 1 network for request, 1 network for replies (shared-memory machines)
DASH-> 2 sets of networks
multiplexing wires, one wire says which network ("virtual lanes")

(iii) Drop messages (TCP/IP)