Article navigation

This is a textbook covering practical aspects of parallel programming very thoroughly. It originated as class notes for a course given by the author in the University of Stuttgart, for the first time in the autumn semester of 1990. The course was combined with laboratory work and seminars, and reference is made to projects supervised by the author, some of them resulting in useful software that can be downloaded freely from an “anonymous ftp” site.

Neural nets are only mentioned in a reference, in the Introduction, to biological computing, and computers are classified under the four categories of SISD (single instruction single data, or ordinary sequential machines), SIMD (single instruction, multiple data, realised mainly in vector and array processors), MISD (multiple instruction, single data, realised mainly in pipeline schemes) and of course the ultimate of MIMD (multiple instruction, multiple data). There are also some hybrids between SIMD and MISD classes that do not qualify as full MIMD versions ‐ these include systolic arrays and the Connection Machine.

The treatment is divided into four Parts. The first, entitled “Fundamentals” covers the above classification of computing systems, and other fundamental aspects including a very useful chapter on Petri nets, in both simple and extended versions. This introduces the important idea of a semaphore to regulate parallel processes. One of the items of software that can be downloaded is a Petri net simulator. (Others are compilers for two parallel‐programming languages.)

Part two treats asynchronous parallelism, and introduces a selection of parallel‐programming languages, including special versions af the well‐known languages Pascal, Ada, C and Modula. Part three then treats the alternative of synchronous parallelism, controllable by a further selection of languages. Massively parallel algorithms are described for a number of important applications. These include numerical integration and its adaptation to evaluation of pi, and the implementation of arrays of cellular automata so as to simulate fluid flow. They also include prime number generation by an adaptation of the well‐known Sieve of Eratosthenes method, as well as sorting, and systolic matrix multiplication.

Yet another application described is to the generation of fractal curves, and another is to the analysis of pairs of stereo images so as to derive depth information. The author’s biographical note includes computer vision as a topic to which he has contributed.

Part four is entitled “Other models of parallelism” and clears up a variety of remaining aspects. One chapter deals with automatic parallelisation, allowing a program to be written as though for a serial machine, and then to be compiled so as to benefit from parallel operation. Although this is possible, it does not usually result in efficient operation, and the author is pessimistic about it. It is interesting that the reverse process of sequentialisation can also be useful in allowing parallel programs to be tested on a sequential machine.

Another chapter in this part deals with parallel implementations of non‐procedural languages such as Prolog, and another with estimation of the performance of parallel systems. Needless to say, an n‐processor system does not usually complete a computation n times as fast as a single‐processor system would; there are parts of a computation that are essentially serial. Such considerations are discussed in detail, as are the relative merits of MIMD and SIMD systems for different kinds of computation.

The book is well presented and usefully covers a great deal of important material.

or Create an Account

Close Modal
Close Modal