Science  People  Locations  Timeline
Index: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Home > INMOS Transputer


 

The INMOS Transputer was a pioneering parallel computing microprocessor design of the 1980s from INMOS, a small English company. For some time in the late 1980s many considered the Transputer to be the next great design for the future of computing. Today, just over a decade later, this interesting chip is largely forgotten.

1 Background

In the early 1980s it appeared that conventional CPUs were reaching their performance limits. Up to this point in time designers had been limited primarily by the amount of circuitry they could place on a chip due to manufacturing issues. But as the "fabbing" process continued to improve, soon the problem became that the chips could hold more circuitry than the designers knew how to use. Soon the traditional CISC designs were reaching a performance plateau, and it wasn't clear it could be surpassed.

It appeared that the only way forward was to increase the use of parallelism, the use of several CPUs that would work together to solve several tasks at the same time. This depended on the machines in question being able to run several tasks at once, a process known as multitasking. Multitasking had generally been too difficult for previous CPU designs to handle, but more recent designs were able to run it effectively. It was clear that in the future this would be a feature of all operating systems.

A side effect of most multitasking design is that it often also allows the processes to be run on physically different CPUs, in which case it is known as multiprocessing. A low-cost CPU built for multiprocessing in mind could allow the speed of a machine to be increased by adding additional CPUs, potentially for far less money than adding a single faster CPU design.

2 Design

The Transputer (Transistor Computer) was the first general purpose microprocessor designed specifically to be used in parallel computing systems. The goal was to produce a family of chips ranging in power and cost that would then be wired together to form a complete computer. The name was selected to indicate the role the individual Transputers would play: numbers of them would be used as basic building blocks, just as transistors had earlier.

Originally the plan was to make the Transputer cost only a few dollars per unit. INMOS saw them being used for practically everything, from operating as the main CPU for a computer, to acting as a channel controller for disk drives in the same machine. Spare cycles on any of these Transputers could be used for other tasks, greatly increasing the overall performance of the machines.

Even a single Transputer would have all the circuitry needed to work by itself, a feature more commonly associated with microcontrollers. The idea in this case was to allow the Transputers to be connected together as easily as possible, without the requirement for a complex bus (or motherboard). Instead you simply supplied power and a simple clock signal. You did not have to provide RAM, a RAM controller, bus support or even an RTOS—these were all built in.

The basic design of the Transputer included serial links that allowed it to communicate with up to four other Transputers, each at 5, 10 or 20Mbps—which was very fast for the 1980s. Any number of transputers could be connected together over even longish links (tens of meters) to form a single computing "farm". A typical desktop machine might have two of the "low end" Transputers handling I/O tasks on some of their serial lines (hooked up to appropriate hardware) while they talked to one of their larger cousins acting as a CPU on another. Transputers could be booted over the network links (as opposed to the memory as in most machines) so a single Transputer could start up the entire network.

There were limits to the size of a system that could be built in this fashion. Since each Transputer was linked to another Transputer in a fixed point-to-point layout, sending messages to a more distant Transputer required the messages to be forwarded off by each chip on the line. This introduced a delay with every "hop" over a link, leading to long delays on large nets. To solve this problem INMOS also provided a zero-delay switch that connected up to 32 Transputers (or switches) into even larger networks.

Supporting the links was additional circuitry that handled scheduling of the traffic over them. Processes waiting on communications would automatically pause while the networking circuitry finished its reads or writes. Other processes running on the Transputer would then be given that processing time. It included two priority levels to help avoid deadlocks. The same logical system was used to communicate between programs running on a single Transputer, implemented as "virtual network links" in memory. So programs asking for any input or output automatically paused while the operation completed, a task that normally required the operating system to handle as the arbiter of hardware. Operating systems on the Transputer did not have to handle scheduling, in fact, one could consider the chip itself to have an OS inside it.

In order to include all this functionality on a single chip, the Transputer's core logic was simpler than most CPUs. It used a RISCThis article is about the computer architecture. For other uses see: RISC (disambiguation Reduced (or regular instruction set computer (or Computing RISC is a computer CPU design philosophy that favors a smaller and simpler set of instructions that all ta-based design, but unlike the more common register-heavy load-store RISC CPUs, the Transputer was a stack-based system with only a few registers. This allowed for very fast context switchA context switch is the computing process of storing and restoring the state of a CPU (the context) such that multiple processes can share a single CPU resource. The context switch is an essential feature of a multitasking operating system. Context switching by simply changing the stack pointer to the memory used by another program (a technique used in a number of contemporary designs). The Transputer also included three "normal" registers, but they were in fact mirrors of the top three stack positions, used to allow for zero-address instructions.

The Transputer instruction set was comprised of 8-bit instructions broke into two nibbleIn computing, a nibble is 4 bits, or half an octet (an 8- bit byte). Being four bits, there are sixteen (24) possible values, so a nibble corresponds to a single hexadecimal digit (thus, it is often referred to as a " hex digit"). A full byte is represents. The "upper" nibble contained the instruction code, making it truly RISC with only 16 basic instructions. The "lower" nibble contained data, either as a constant or, more commonly, as an offset into the stack pointer. Larger constants and offsets could be used, but they required additional bytes of address to be fetched and decoded. Additional less frequently needed instructions were supported via the Operate (Opr) instruction code, which decoded the data constant as an extended opcode, providing for almost endless and easy instruction set expansion as newer implementations of the Transputer were introduced. Processes with smaller contexts thus ran faster, but the whole idea of the Transputer was to run many small processes anyway.

Transputers were typically programmed using the Occam programming languageOccam (from William of Ockham of Occam's Razor fame) is a parallel programming language that builds on Communicating Sequential Processes (CSP) and shares many of their features. It is, in a way, a practical executable implementation of CSP. Occam is an i. In fact it is fair to say that the Transputer was built specifically to run Occam, in much the same fashion that contemporary CISC designs were built to run languages like Pascal or C. Occam supported thread-style tasks in the language, and in most cases simply writing a program in Occam resulted in a threaded application. With the task support and communications built into the chip and the language interacting with it directly, writing code for things like device controllers became a triviality—even the most basic code could watch the serial ports for I/O, and would automatically sleep when there was no data.



Read more »

Non User