Funktionen

Print[PRINT]
.  Home  .  Lehre  .  Studentische Arbeiten  .  Bachelorarbeiten  .  Ausschreibung

Performanceanalyse von Stencil-Kernels auf FPGAs

Field Programmable Gate Arrays (FPGAs) werden schon lange zum Prototyping eingesetzt, um das Design eines Chips zu testen und optimieren, bevor dieser in großen Stückzahlen gefertigt wird. FPGAs zeichnen sich dadurch aus, dass ihre Konfiguration beliebig oft angepasst werden kann. Im Gegensatz dazu werden Chips wie CPUs oder spezielle ASICs einmalig produziert und bilden dann einen festen Schaltkreis ab. Aufgrund ihrer - im Vergleich zu CPUs und teils GPUs - hohen Energieeffizienz, werden FPGAs mitterweile auch in Rechenzentren zur Beschleunigung der Berechnungen eingesetzt. In diesem Bereich bewegt sich auch die hier ausgeschriebene Arbeit. Die Programmierung bzw. Konfigurierung von FPGAs erfolgte lange Zeit ausschließlich durch so genannte Hardware Beschreibungssprachen wie VHDL oder Verilog, die zwar viel Kontrolle über die Konfiguration erlauben, aber zeitaufwendig, komplex und fehleranfällig sind. In letzter Zeit werden abstraktere Programmiermodelle wie OpenCL genutzt, um vor allem Softwareentwicklern den Zugang zu FPGAs zu erleichtern. Hierbei werden nicht mehr explizit die Schaltung konfiguriert, sondern ein Compiler generiert diese aus C, bzw. OpenCL-Code.

Ein oft genutztes System bei der Berechnung von wissenschaftlichen Anwendungen wie z.B. Wettermodellen sind Stencil-Codes. In diesen Codes werden iterativ die Elemente eines Arrays berechnet, indem Elemente des Arrays nach einem festen Muster verarbeitet werden.

// Beispiel 1d-Stencil in C
void 1d_stencil(int *array, size_t size, size_t num_iters) {
  // Führe den Stencil num_iters mal aus
  for(size_t i = 0; i < num_iters; i++) {
    for(size_t j = 1; 1 < n; j++) {
      // Berechne array[j] aus den Daten von:
      // array[j - 1], array[j] und array[j + 1].
      array[j] =
        array[j - 1] * 0.2
        + array[j] * 0.6
        + array[j + 1] * 0.2;
    }
  }
}

Eine Anschauliche Beschreibung von 2d und 3d-Stencil Codes findet sich z.B. in der Wikipedia.

In dieser Arbeit sollen mit OpenCL implementierte Stencil-Codes systematisch auf einige Schlüsselmetriken, wie Druchsatz, belegte Chipfläche und erreichbare Frequenz untersucht werden. Dies soll abhängig von der Problemgröße, der Stencil-Form (also welche Nachbarelemente zur Berechnung herangezogen werden) oder der Datentypen geschehen.

Zusätzliche Informationen

Voraussetzungen

Wünschenswert sind gute Kenntnisse in C oder anderen systemnahen Sprachen, aber diese können sich auch im Rahmen der Bachelorarbeit angeeignet werden.

Überblick der (möglichen) Aufgaben

  • Einarbeitung in die Toolchain auf einem Zybo-Z7 und dem Intel FPGA SDK for OpenCL.
  • Identifizierung von sinnvollen Szenarien und Metriken, die gemessen werden sollen.
  • Implementierung und Evaluierung der zuvor beschriebenen Szenarien.

Organisatorisches