|
Virtual Channels |
Top Previous Next |
|
By default, if the tasks joined by a CONNECT statement are on different processors, the configurer attempts to use a virtual channel to connect the two tasks. Virtual channels are very flexible:
In short, any task can communicate with any other task, on any processor, irrespective of the physical network layout. This flexibility must clearly come at a price; a certain amount of software overhead is required to implement virtual channels.
The throughput of a virtual channel may be up to 50-55% of a physical channel for long messages sent to a procesor via an intermediate processor. Performance drops for shorter messages, down to about 30% of a physical channel for messages of 1KB, and below 10% for short messages of fewer than 100 words. Performance also drops when messages must be forwarded through many intermediate nodes. Note that these overheads are to a large extent inherent in any software message-routing system, especially when, like Diamond, the routing is managed in such a way as to prevent transmission deadlocks being introduced. It is possible to tune virtual channel performance for your application using the UPR MAX and UPR BUFFERS configuration language statements.
There is a current limitation in the use of virtual channels: a virtual channel can connect two processors only of the same general type, for example both must be C6000 processors; an FPGA cannot actively participate in supporting a virtual channel although it can support devices used by WIREs involved in the path. In addition, there must be a path of wires between these processors that passes through only other processors of the same type. For example, you cannot have a virtual channel between ROOT and N3 in the following example:
PROCESSOR ROOT TYPE=C6000 PROCESSOR N1 TYPE=ARM PROCESSOR N2 TYPE=C6000 PROCESSOR N3 TYPE=C6000 WIRE ? ROOT[DEV:0] N1[DEV:3] WIRE ? N1[DEV:0] N2[DEV:3] WIRE ? N2[DEV:0] N3[DEV:3]
However, if you added another WIRE from ROOT to N2, you would be able to have a virtual channel between ROOT and N3. |