Introduction

The Parallaxis language model was designed to allow structured parallel programming in a high level language, similar to sequential Pascal or Modula-2. The compiler should be machine-independent, so it can be used for a wide range of parallel architectures. In addition, it should be useful in exploiting the parallel resources of any particular architecture satisfying the basic machine model, in order to achieve optimal performance. Both goals (which might look contradictory, at first) are achieved by a translation into a low level intermediate parallel language which is processed by a machine-dependent interpreter or compiler. This flexible model is restricted to SIMD structures; it combines the internal representation of the hardware structure with the topology- or structure-specific algorithm to form a complete problem solution. Thus, it is possible to specify number and arrangement of processing elements, as well as their communication network in Parallaxis.

Here, we get a new meaning of the term structured. The whole problem solution is structured, including the algorithm, as well as the architecture for which the algorithm is bound. Given this semantics, it is necessary to include a machine description, if the language should not be restricted to a single architecture that is implicitly assumed. An algorithm for the same problem will look totally different if designed for a hypercube instead of a ring-topology. Besides, for a certain problem there may be structures well suited and others that do not match very well. If there is a choice (as for reconfigurable parallel systems), the architecture specification can be used for creating the best matching architecture.

In this paper, I will address the language concepts supporting the Parallaxis user in programming a SIMD computer on a high level of abstraction. I will not be concerned at this point, however, what strategy or algorithm to apply in order to perform an efficient mapping between a topology specified for a certain application and the topology provided by the physical hardware structure. This problem is handled automatically on a lower operating system level, transparent to the user. However, it will greatly affect the efficiency of an application with heavy communication. H. J. Siegel developed efficient mapping algorithms for simulating one topology on a different topology.
Corresponding to the machine model of a processor-network, controlled by a single control unit, variables may be declared either for the control unit (using the declaration keyword scalar), or for each of the PEs (using vector). Each variable is strictly typed, like in Modula-2, so there may be no vector variables in an expression that is to be assigned to a scalar variable. Vectors may be used inside explicitly marked parallel blocks or operations only while scalars may also appear in parallel vector expressions (requiring a duplication or broadcast of that particular value).