levisonm@qucis.queensu.CA (Mark Levison) (03/20/89)
Does anyone have a good short explanation of how gather/scatter hardware (such as in the Cray - XMP) works? Thanks in advance | #include <std/disclaimer.h> Mark Levison | internet: levisonm@qucis.queensu.ca | bitnet: levisonm@qucis.bitnet | snail mail: 366 Albert St | Kingston, Ont. | Canada | K7l 3V9 |
brooks@vette.llnl.gov (Eugene Brooks) (03/23/89)
In article <180@qusunj.queensu.CA> levisonm@qucis.queensu.CA (Mark Levison) writes: > > Does anyone have a good short explanation of how gather/scatter >hardware (such as in the Cray - XMP) works? You have a vector of integers which are interpreted as addresses, or indexes for a fixed array address and you crank these through a pipe which issues loads or stores using another vector register as the source or destination operand. A very useful capability for some applications. brooks@maddog.llnl.gov, brooks@maddog.uucp, .../uunet!maddog.llnl.gov!brooks
davidsen@steinmetz.ge.com (Wm. E. Davidsen Jr) (03/23/89)
In article <180@qusunj.queensu.CA> levisonm@qucis.queensu.CA (Mark Levison) writes: | | Does anyone have a good short explanation of how gather/scatter | hardware (such as in the Cray - XMP) works? How about a short description of scatter/gather, not based on the XMP? The basis of s/g is that hardware in the system will take a mass storage address, meaning controller id, pgysical unit id, cylinder and head, and the *address* of a list of trasfer control instructions. Each instruction contains the starting address of a buffer and (usually) the size of the buffer. Example: ; Code fragment DO_IO DEVLIST,BUFLIST WAIT JNZ error ; More code here ; ; Data area ; DEVLIST EQU * DB 0 ; Disk string DB ? ; Device number DB ? ; Head DW ? ; Cylinder BUFLIST EQU * IOTC HEADER,77 ; Header info IOTC P1,? ; Prefix buffer, fill in length IOTC BODY,410 ; 410 bytes of body IOTC S1,? ; Suffix, 2 or 7 bytes IOTD TAIL,22 ; record tail ________________________________________________________________ On a disk the total size better be a multiple of the sector size, but on a tape the record length can vary. The example transfers data from five places in memory to one output record. I borrowed the i/o mnemonics from the Honeywell 6000, I/O Transfer and Continue, I/O Transfer and Disconnect. I believe that there was a way to read in one i/o control word as the first word of the record, and use that to determine the destination of the rest of the record. The lengths were actually in words. Something loosely like: IOLST: IOTC *+1,1 ; Read the control info BSS 1 ; First word is an IOTD I *think* there was an I/O control word to transfer from one list to another, which may have been called TDCW (Transfer to Data Control Word). Probably other people have programmed that machine more recently than I and can clarify the facts. ================================================================ New mailing address: wedu@crd.ge.com We are no longer ge-crd.arpa and mail will stop working to that address in the *very* near future. Note: flames and hate mail may still use the old address ;-{ ================================================================ We now return you to our regularly scheduled signature... -- bill davidsen (wedu@crd.GE.COM) {uunet | philabs}!steinmetz!crdos1!davidsen "Stupidity, like virtue, is its own reward" -me