CPI085@ibm.southampton.ac.uk (Nick Clarke 595000 x3009, 0703) (06/29/89)
It is not altogether surprising that it is possible to send messages between two Transputer links on the same Transputer. What is more interesting is that there is a useful (if somewhat obscure) application for this. The basic idea is to use the two links as a parallel block-moving engine for the Transputer in question. Consider the following piece of pseudo code :- NB: is a left square bracket is a right square bracket N INT a,b: PROC P(........) ... : SEQ a:=b P(not involving a or b) This may be transformed into the following equivalent pseudo code :- (eqivalent if the two links are connected) CHAN linkout,linkin: PLACE linkout AT spare.out.link: -- these two spare links PLACE linkin AT spare.in.link: -- should be different ones N INT a,b: PROC P(........) ... : PAR linkout ! b linkin ? a P(not involving a or b) The advantage of this is that the 'block move' takes place concurrently with the execution of P(). If P() takes longer than the total time taken for the link transfer, the block move is totally overlapped with the computation and becomes transparent. A word of warning: the saving acheived is the time taken to perform a:=b (minus set up time for a PAR !), which is an extremely quick operation on the Transputer. Consequently, even in ideal situations, this technique only results in small savings in run time. If, however, the technique is applied to an unsuitable setup (eg. where P() runs quicker than the link transfer), then the losses in run time can be enormous ! (because the link transfer is so much slower than the internal block move). If there are any genuinely useful applications for this, I would be interested to know of them. Otherwise I think it will remain as another academic exercise for those devilish Transputer beasties. Nick Clarke, Southampton University Computing Services.