Fortran at Ten Gigaflops: The Connection Machine Convolution Compiler
Abstract
We have implemented a prototype of a specialized compiler module and associated run-time support that allows a Fortran user to achieve sustained floatingpoint performance of over 10 gigaflops on the Connection Machine Model CM-2.This improves substantially over the previous record of 5.6 gigaflops, which was achieved by means of hand-crafted low-level coding techniques (on which this work has been based).Indeed, the same code that ran at 5.6 gigaflops in 1989 now runs at over 14 gigaflops.The compiler module processes array assignment statements of a certain form the right-hand side must be a sum of products and the products must use the Fortran 90 array-shifting intrinsic in a certain stylized pattern.Such assignment statements are suitable for expressing array convolution (stencil) computations and can be executed efficiently by chained multiplyadd operations.Our implementation strategy divides responsibility for the computation into four parts.A run-time library provides the outer loop structure for strip-mining and for handling multidimensional arrays.Anew primitive speeds up nearest-neighbor grid communication.Hand-written CM-2 sequencer microcode directs the pipelined execution of the floating-point units.The compiler module performs a kind of loop unrolling in order to optimize the use of registers and determines, at compile time, the microcode to be used at run time.