Implementation von Vektoroperationen fur SBCL

Antragssteller

Dr. Nicolas Neuß
Angewandte Mathematik III
FAU Erlangen-Nürnberg
Cauerstraße 11
D-91058 Erlangen

Projektübersicht

Um die verfugbare Leistung von heutigen Rechnern optimal zu nutzen, muss Parallelverarbeitung auf allen Ebenen ausgenutzt werden. Dies sind vor allem

  1. SIMD-Vektoroperationen (z.B. SSE/AVX)
  2. Shared-memory-Parallelisierung (OS threads)
  3. Distributed-memory-Parallelisierung (MPI)

In letzter Zeit haben wir es mit KONWIHR-Unterstützung geschafft, die Punkte 2 und 3 für die in der Sprache Common Lisp (CL) geschriebene Finite-Elemente-Umgebung Femlisp zu verwirklichen. Was allerdings fehlt, ist die Parallelität durch Ausnutzen der SIMD-Operationen. Die von uns verwendete CL-Implementation SBCL besitzt einen Compiler, der mittels Typ-Ableitung sehr schnellen Maschinencode generieren kann. Aufgrund der bisher geringen Nachfrage ist die Unterstutzung für SIMD-Operationen in SBCL bisher aber nur experimentell. Genauer ist im Moment lediglich der SSE-Befehlssatz verfugbar, und diese Befehle werden auch nur für das Rechnen mit komplexen Zahlen verwendet.

Der bequeme Zugang zu Vektoroperationen auch großer Länge wird nun fur uns zunehmend wichtig aufgrund folgender Anforderungen:

  • Damit Femlisp mit anderen bekannten FEM-Paketen wie etwa DUNE/FEMLab hinsichtlich Performance mithalten kann, ist es notwendig matrixlose Rechnungen für Finite-Elemente-Verfahren moderater Ordnung durchführen zu können. Die auftretenden Vektorblöcke sind dabei so klein, so dass der Overhead des Aufrufs von externen BLAS-Routinen inakzeptabel ist. Stattdessen ist hier die Kompilation von speziellem Code notwendig, der die lokale Berechnung des Defekts durchführt und für optimale Performance Vektoroperationen verwenden muss.
  • Eine weitere Anwendung ist Petalisp. Hier ist es uns gelungen, eine reduzierte Sprache fur Operationen auf mehrdimensionalen strided arrays zu entwickeln, mit der es möglich ist, wichtige Algorithmen auf strukturierten Gittern so zu spezifizieren, dass eine Übersetzung in parallelen und effizienten Maschinencode situationsangepasst und zur Laufzeit geschehen kann. Vektoroperationen in SBCL könnte Petalisp direkt nutzen und damit rechenintensive Codes deutlich beschleunigen.