A programming language for vector computers
Robert Griesemer · 1993
This thesis introduces and elaborates on specific language constructs that allow a simple programming of vector computers and help to gain a better understanding for these programs. Thereby the emphasis lies on the support of explicitly vectorizable statements as well as on a concept for parameter passing adapted to the needs of numerical applications. Vector computers provide powerful instructions for the processing of whole vectors. The speed of programs is often increasing by orders of magnitude if these programs allow the use of such instructions, i.e. if they are vectorizable. In order to make a program run faster, a compiler usually tries to vectorize its innermost loops. Unfortunately, the dependence analysis required therefore is quite complicated and often cannot be performed completely. The thesis therefore proposes a simple language construct allowing the explicit specification of independence and thus the parallel execution of statements. Hence, this language construct is much easier to vectorize than loops. It improves the readability and security of programs without reducing the quality of the generated code. The main application area of vector computers are numerical applications of linear algebra. A problem arising with those programs is that parts of matrices such as rows, columns or diagonals must be passed as arguments to a subroutine. Yet, most programming languages do not support such a flexible way of parameter passing. Array constructors offer a simple and safe way to solve this problem. The second part of the thesis focuses on the description of an experimental programming language called Oberon-V and of an appropriate cross_compiler for the Cray Y-MP. Oberon-V includes a subset of the language Oberon, which has been extended by the language constructs mentioned above. Compared to traditional compilers for vector computers, the Oberon-V compiler excels by its compactness and efficiency. Detail problems of implementation were solved in a new and more simple way: some of the achievements were a new way of generating symbol files to support separate compilation, the optimization of the generated code by eliminating redundant computations (common subexpression elimination) and the reorganization of instructions to increase the execution rate (instruction scheduling). The thesis finally investigates and judges the code quality of Oberon-V programs in comparison with corresponding Fortran programs.