The ICL DAP (Distributed Array Processor), an early commercial parallel computer, was on the market by the start of the 80s. The basic idea was similar to the ILLIAC IV. The most obvious difference was that the DAP had many more, much simpler processing elements--4096 bit-serial processors arranged in a 64 by 64 grid. Each processing element performed single bit operations rather than floating point or integer arithmetic on complete words. This property was largely concealed by the FORTRAN compiler, which made the usual arithmetic types available through software. Peak floating point performance was considerably lower than the ILLIAC, but the hardware had excellent performance in some other application domains. The DAP was an optional module of the ICL 2900 mainframe computer, and shared main memory and other facilities with the host.
The DAP was programmed using DAP FORTRAN3. This language resembled CFD in adding new distributed array structures to the base language. Once again the shape of these structures was constrained to directly match the parallel hardware. But the DAP was more naturally regarded as a two dimensional processor grid, and this led to a richer family of distributed arrays. In general DAP FORTRAN was a higher level language than CFD; the parallel features were tied to a particular parallel architecture, but in other respects it was a fairly normal FORTRAN dialect.
Distributed arrays, called constrained arrays could have one or two distributed dimensions. In declarations, the first one or two extents were omitted:
DIMENSION A(), BB(,) INTEGER II(,) REAL AA(,3), BBB(,,5)A is called a vector; BB and II are matrices. AA is an array of vectors and BBB is an array of matrices. The extent of the omitted dimensions was implicitly 64. A syntax reminiscent of the later Fortran 90 allowed sections of arrays to be formed by subscripting certain dimensions and leaving other subscripts empty. As in Fortran 90, array-valued expressions can computed and assigned, and this is the primary means of expressing parallelism. Nearest-neighbour communication is expressed by putting a + or - in a distributed dimension:
U(,) = 0.25 * (U(,-) + U(,+) + U(-,) + U(+,))Shifting further than one place required a call to an array-valued intrinsic function.
The mechanism for restricting execution to a subset of processing elements was more unusual. A logical mask matrix could be used as a subscript in a matrix assignment target:
LOGICAL L(,) ... L(,) = BB(,) .LT. 0 BB(L) = -BB(,)
Again, despite its hardware-specific nature, DAP FORTRAN was popular with scientific programmers who used it, and was applied to a variety of serious applications.