GIO is a computer bus standard developed by SGI and used in a variety of their products in the 1990s as their primary expansion system. GIO was similar in concept to competing standards such as NuBus or (later) Peripheral Component Interconnect (PCI), but saw little use outside SGI and severely limited the devices available on their platform as a result. Most devices using GIO were SGI's own graphics cards, although a number of cards supporting high-speed data access such as Fiber Channel and FDDI were available from third parties. Newer SGI machines use the XIO standard, which is laid out as a computer network as opposed to a bus.
Like most busses of the era, GIO was based on a 32-bit addressing and data, and normally ran at either 25 or 33 MHz. The bus included only one set of 32 lines, used to transfer both addresses and the data at that address. This meant that it would normally take three cycles to transfer a single 32-bit value; one cycle to send the address, the next to specify the data length, and then another to read/write it. This limited the bus to a maximum throughput of about 16 MBytes/second (at 33 MHz) for these sorts of small transfers. However the system also included a long-burst read/write mode that allowed continual transfers of up to 4 kBytes of data (the fundamental page size in R3000-based SGI machines); using this mode dramatically increased the throughput to 132 MBytes/second (32-bits/cycle * 33 M cycles). GIO also included a "real time" interrupt allowing devices to interrupt these long transfers if needed. Bus arbitration was controlled by the Processor Interface Controller (PIC) in the original R3000-based SGI Indigo systems.
Physically, GIO used a 96-pin connector and fairly small cards 6.44 inches long by 3.375 inches wide. In the Indigo series the cards were aligned vertically above each other within the case, as opposed to the more common arrangement where the cards lie at right angles to the motherboard. This led to a "tall and skinny" case design. Since the cards were "above" each other in-line, it was possible to build a card that connected to both connectors on the computer's motherboard, thereby offering more room and double the speed (in theory).
GIO was later expanded to a 64-bit form, GIO64, retroactively re-naming the earlier version GIO32. Addressing remained 32-bit but now allowed for both big-endian and little-endian addressing as indicated by a new control pin, whereas GIO32 only supported the SGI-style big-endian addresses. Data could now be transferred 64-bits at a time thereby doubling speed. GIO64 could also be run faster than GIO32, up to 40 MHz, providing a maximum streaming throughput of 320 MBytes/second. The page sizes were also adjusted to allow for the changing CPU's, starting at 4 kB for R3000 based machines, and up to 16 MB for R4400 based ones.
Physically the GIO64 bus used much larger cards that were generally similar in size and layout to Extended Industry Standard Architecture (EISA) cards, a deliberate choice that made development somewhat easier as well as allowing SGI to place EISA slots in the same machines. Specifically the external connector (the metal flange) was identical to EISA, but the shape of the board itself was slightly different.
Two versions of GIO64 were specified. The "non-pipelined" system worked in a fashion similar to that of GIO32, with transfers being set up directly on the bus. The newer "pipelined" system was what the actual boards used, and as the name implies the system set up transfers in a several-step operation that was decoded in the controller's internal pipeline. Internally the non-pipelined bus transferred data between the various parts of the computer, including GIO cards, EISA devices, SCSI and so forth. GIO cards used the pipelined controller to arbitrate and control timing, the data then being fed into main memory via the internal non-pipelined side.
A third standard, GIO32-bis, used the signals and timing of GIO64, but with the 32-bit connectors from GIO32. Properly designed GIO32-bis cards could be used in GIO64, GIO32 or GIO32-bis slots, differentiating the later two by looking at a pin tied to ground in the original GIO32, and tied "high" in GIO32-bis. For low-throughput cards, GIO32-bis allowed a single device to be used on any machine supporting GIO, no matter what generation.