NORMA: a graph reduction processor

1. Introduction NORMA (Normal Order Reduction MAchine) is a special-purpose machine designed explicitly for graph reduction, with some optimizations for combinator graph reduction in particular. It is a microprogrammable machine, and as such it could presumably be configured to function as an interpreter for any number of graph reducers; we have used it only to implement a combinator reducer employing "rurner's SK combinator set (with a few extensions) as described in [Turner78] and [Tumer79]. NORMA consists of five main elements: 1. 2. 3. 4. 5. the service lxocessor, the graph processor, the graph memory, the allocator, and the ALU. Figure I-1 shows the relationship of these main elements. This paper describes the trust four elements in detail and provides some insight into their use in graph reduction. The final section provides some performance figures. A number of tradeoffs were made in the design of NORMA. In particular, we decided to accept the expense and trouble of a very wide microword (approximately 370 bits) in order to achieve parallelism within each instruction. Because we did not feel that we currently understand the relationship between graph reduction and virtual memory well enough, we also decided not to build a virtual memory machine; consequently, programs are constrained to the size of the Permission to copy without fee all or part of this material is granted provided that the copies are not made or distributed for direct commercial advantage, the ACM copyright notice and the title of the publication and its date appear, and notice is given that copying is by permission of the Association for Computing Machinery. To copy otherwise, or to republish, requires a fee and/or specfic permission. physical memory of the machine. Because cyclic graphs are common in graph reduction (with our SK reducers, at any rote) and because we decided we did not want to introduce the complications of reference-counting (a notorious source of errors in the PasO, we also decided to use the simple mark-scan garbage collection strategy; an optimization of this scheme (discussed later) has yielded quite acceptable performance.