This document will describe the methods used to implement the prototype of the Symbolic Parallel Linear Algebra library (SymPLA).
SymPLA is organized in four layers, as shown in Figure
: the application layer, the high level SymPLA
layer, the implementation specific code, and the external libraries.
The application layer is the user's program, which uses the SymPLA high level layer to perform linear algebra operations. The high level layer organizes the operations into general operations, and then uses the implementation layer to handle storage and the interface with the external libraries in the lowest layer, which handles most of the actual linear algebra operations.
Of these layers, the middle two layers constitute the SymPLA library, and are discussed in this document. The lowest layer, the external libraries, will usually be third-party, but may also be completely integrated in the implementation layer.
Each layer communicates only with the layers immediately above and below itself, and the functionality is therefore completely hidden from layers higher up in the hierarchy.
SymPLA has the following general properties:
when the
application is moved to a different architecture or compiler.While exception handling might have been desirable, practical circumstances made this somewhat difficult, as the cfront compilers available for the MasPar and Intel Paragon architectures do not support exceptions. The library was therefore implemented with a skeleton exception-handling mostly turned over to macros and inline functions that let the application exit when an exception is thrown.
The implementation is restricted to a frontend design, because a multiple frontend or a complete SPMD distribution design as used in ScaLAPACK would have required much extra work. Among other things, a communication class had to be developed, and for some conceivable implementations, there was also need for features not yet supported by some of the desired support libraries, like thread-safe PVM. The organization of SymPLA is, however, such that it may easily be expanded into a fully parallel library, without much, or any modification to the high levels of the library.
Benchmarks have shown that SymPLA can achieve performance comparable to that of using the libraries SymPLA is based on directly, with very little overhead for the supporting operations. However, operations using random submatrices proved to have a very large overhead in arithmetic operations, due to the duplication of data necessary in the operation.