Wie wir bereits gesehen haben, führt die Verwendung von herstellereigenen,
an die Maschine angepaßten Routinen für numerische Grundoperationen in
der Regel zu erheblichen Geschwindigkeitsgewinnen. Andererseits sind solche
Programme natürlich nicht mehr zwischen Rechnern verschiedener Hersteller
transportabel. Um zumindest zwischen Convex- und Cray-Rechnern kompatibel
zu sein - ein in der Praxis recht häufiger Fall -, gibt es auf der Convex
die Bibliothek SCILIB, die die sogenannte ''Scientific Library'' von Cray in
an die Convex angepaßter Weise implementiert. Routinen der
Cray-Bibliothek, die in der VECLIB schon vorkommen, wurden nicht
zusätzlich in die SCILIB integriert, so daß man meistens beide
Bibliotheken mit ''-lscilib -lveclib'' hinzulinken muß. Die Veclib-
und Scilib-Bibliotheken (und Lapack, s. u.) sind von Convex auch auf
HP 900/700-Maschienen portiert. Sie wurden speziell angepaßt und sind
sehr viel schneller als vergleichbare NAG-Routinen. Auf dem
Convex/HP-Metacluster des RZ sind sie vorhanden.
Um das Kompatibilitätsproblem in allgemeiner Form zu lösen, wurde eine
Bibliothek von grundlegenden Routinen definiert, die sogenannte BLAS
(''Basic Linear Algebra Subprograms''), die von jedem
Vektorrechner-Hersteller optimal implementiert werden sollte und die die
Basis für eigene Numerik-Routinen bilden kann. Diese Idee wurde relativ
rasch verwirklicht; bei Convex ist die BLAS ein Teil der VECLIB. Sie
enthält elementare Operationen zwischen Vektoren (''BLAS Level 1''),
zwischen Matrizen und Vektoren (''BLAS Level 2'') und zwischen Matrizen
(''BLAS Level 3''). Die Hersteller von numerischen Bibliotheken (NAG, IMSL)
haben inzwischen ihre Routinen auf BLAS-Routinen als unterstem Level
aufgebaut, so daß sie ebenfalls von der schnellen BLAS-Implementierung
profitieren.17
Wie sehr sich die Verwendung sogar der einfachen BLAS-Routinen auszahlt,
zeigt der Vergleich: Für die Multiplikation einer NxK-Matrix mit einer
KxN-Matrix ergaben sich folgende Zeiten:
N |
K |
eigene |
BLAS |
. | |
|
|
Routine |
(DGEMM) |
. | |
1000 |
1000 |
21 |
. | 401 |
19 |
. | 452 |
1000 |
100 |
2 |
. | 214 |
1 |
. | 860 |
1000 |
10 |
0 |
. | 303 |
0 |
. | 204 |
1000 |
1 |
0 |
. | 093 |
0 |
. | 025 |
Die BLAS-Routine DGEMM ist für jede Kombination von Matrix-Dimensionen
optimal, während die eigene Routine nur für große K gut abschneidet.
Aber sogar dann ist die BLAS-Routine noch überlegen. Fazit: Selbst bei
solch einfachen Problemen wie der Matrix-Multiplikation sollte man die
VECLIB-Routinen eigenen Programmen vorziehen!
Aus einer anderen Richtung kommen die Bibliotheken LINPACK, EISPACK und
LAPACK: Bei LINPACK und EISPACK war das Ziel, grundlegende Routinen aus der
Linearen Algebra mit Sourcen zur Verfügung zu stellen. Allerdings sind
diese Routinen noch nicht für Vektorrechner gedacht, dafür sind sie schon
zu alt. Die Idee, diese Bibliotheken zu ''modernisieren'' und Routinen zu
schreiben, die an Vektor-Architekturen angepaßt sind und auf die BLAS
aufbauen, führte zur Entstehung der LAPACK-Bibliothek, deren Sourcen
ebenfalls frei verfügbar sind. Eine Anpassung an Parallelrechner mit
verteiltem Speicher ist in Vorbereitung. Die LINPACK- und EISPACK-Routinen
sind Bestandteil der VECLIB, es wurden allerdings nicht alle Routinen an
die Convex angepaßt. Die LAPACK wird inzwischen von Convex zusammen
mit der VECLIB ausgeliefert.
Peter Junglas 18.10.1993