Vorschläge für Kürprojekte - Arbeitsgruppe Effiziente Eingebettete

Transcription

Vorschläge für Kürprojekte - Arbeitsgruppe Effiziente Eingebettete
Prof. Dr. Hubert Högl
Prof. Dr. Gundolf Kiefer
Michael Schäferling, M.Sc.
Hochschule Augsburg
Fakultät für Informatik
Hardware-Systeme – SS 2016
Vorschläge für Kürprojekte
In dem Kür-Projekt arbeiten Sie jeweils zu zweit oder zu dritt. Die folgenden Aufgaben
beschreiben mögliche Projekte. Sie können auch gerne eigene Vorschläge machen.
Grundsätzlich darf jedes Projektthema nur von einem Team ausgewählt werden. Die meisten
Themen sind jedoch nach Rücksprache aufteilbar. Bitte sprechen Sie uns bei Interesse an.
Themenfeld: VISCY-Erweiterungen
1. Optimierung der VISCY-CPU
Beschleunigen Sie Ihr Multiplikationsprogramm, z. B. durch
●
Optimierung der Software (schnellerer Algorithmus)
●
schnellere Ausführung der CPU-Befehle (Optimierung am Steuerwerk, Pipelining?)
●
neue CPU-Befehle
●
einen Speicher-Cache
2. ALU-Erweiterung um Integer-Multiplikation oder -Division
a) Informieren Sie sich über Hardware-Algorithmen zur Integer-Multiplikation (bzw. -Division).
Welcher Algorithmus ist jeweils ideal, wenn
- die Chipfläche
- die Latenz
- der Durchsatz
optimiert werden soll? Wählen Sie zusammen mit Ihrem Betreuer jeweils einen Algorihmus mit
niedriger Latenz (alternativ/zusätzlich: mit niedrigem Flächenbedarf) aus.
b) Erweitern Sie die CPU um einen Befehl zur Integer-Multiplikation (bzw. Division).
Implementieren Sie jeweils eine Variante, die auf Geschwindigkeit (Latenz) bzw. Fläche hin
optimiert ist und vergleichen Sie sie bzgl. Taktzeit und Flächenbedarf mit der ursprünglichen
Version der CPU!
Quellen:
•
Jean-Pierre Deschamps, Géry Jean Antoine Bioul, Gustavo D. Sutter: "Synthesis of
Arithmetic Circuits – FPGA, ASIC and Embedded Systems", Wiley-Interscience, 2005
•
Israel Koren: "Computer Arithmetic Algorithms", 2nd Edition, A. K. Peters LTD., Natick,
MA, 2002, http://www.ecs.umass.edu/ece/koren/arith/simulator
-1-
3. Quick-Sort
Implementieren Sie für den VISCY-Prozessor den Quick-Sort-Algorithmus! Schreiben Sie auch
eine C-Implementierung und führen Sie Zeitmessungen durch, um die Geschwindigkeit des
VISCY mit der C-Implementierung auf einem PC zu vergleichen.
Tipp: Schreiben und testen(!) Sie zuerst die C-Version und nehmen Sie sie dann als Vorlage für das
VISCY-Programm. Wie realisieren Sie Unterprogrammaufrufe? Wie den notwendigen Stack?
4. Intelligenter Drehknopf
Der Drehknopf des FPGA-Boards enthält zwei Lichtschranken, anhand derer bei hinreichend
schneller Abfrage auf die Drehbewegung geschlossen werden kann (s. Board-Handbuch).
a) Schreiben Sie ein VISCY-Programm, das die Lichtschranken in einer Endlosschleife abfragt
und einen Zähler führt, der bei einer Links-Drehung dekrementiert und bei einer Rechtsdrehung
inkrementiert wird. Das muss robust funktionieren, das heißt, wenn nach einer beliebigen Folge
von Rechts- und Linksdrehungen der Drehknopf wieder in der gleichen Position steht wie
vorher, so muss auch der Zähler wieder den gleichen Stand aufweisen.
Stellen Sie den Zählerstand modulo 8 durch die Board-LEDs dar.
b) (optional) Schreiben Sie ein Hardware-Modul, das die Abfrage der Lichtschranken übernimmt
und dem VISCY-Prozessor an einer I/O-Adresse den Zählerstand zur Verfügung stellt.
Sie benötigen für die Aufgabe den Quellcode des kompletten VISCY-Systems (bitte
nachfragen), dort können Sie die Datei iomisc.vhd, die die Ansteuerung der LEDs und Taster
übernimmt, als Vorlage verwenden.
5. VGA-Interface für den VISCY
Implementieren Sie eine "Grafikkarte" für den VISCY-Prozessor. Gehen Sie dazu wie folgt vor:
a) Informieren Sie sich über die VGA-Spezifikation, die notwendigen Signale und die Schnittstelle
auf dem Entwicklungs-Board.
b) Entwickeln Sie in VHDL ein Modul "vga_syncgen", das einen Zeilen- und Spaltenzähler enthält
und autonom mit korrektem Timing die VGA-Synchronisationssignale erzeugt und dabei die
aktuelle Zeilen- und Spaltennummer ausgibt.
c) Jetzt benötigen Sie noch ein Modul "vga_colorgen", das aus der aktuellen Zeilen- und
Spaltennummer den zugehörigen Farbwert ermittelt. Dieses kann (muss aber nicht*) den
Arbeitsspeicher auslesen und den entsprechenden Wert weitergeben.
-2-
Themenfeld: Rechnerarchitektur
6. Cache-Architekturen und -Effizienz
Für die Entwicklung effizienter Software ist die Kenntnis der Cache-Architekturen und Cachefreundliches Speicherzugriffsverhalten ein wesentliches Kriterium.
a) Stellen Sie die Funktionsweise und Entwurfsalternativen von Caches vor.
b) Sie sind Hardware-Entwickler und sollen das Cache-System eines neuen Prozessors entwerfen.
Wie gehen Sie vor? Worauf ist zu achten? Welche Optimierungsoptionen gibt es?
c) Stellen Sie das Cache-System eines bekannten Prozessors (z.B. ARM Cortex A-Serie oder Intel
Core i7) im Detail vor.
d) Betrachten Sie das Programm "matmul.c" (Material-Seite). Die Funktion matmul(...) führt eine
Matrix-Multiplikation für quadratische Matrizen beliebiger Größe nach folgendem Schema
durch:
(
)(
)(
a 0,0
… a 0, N −1
b 0,0
… b 0, N −1
r 0,0
… r 0, N −1
⋅
=
⋮
⋱ ⋮
⋮
⋱ ⋮
⋮
⋱ ⋮
a N −1,0 … a N−1, N −1 b N−1,0 … b N −1, N −1 r N −1,0 … r N −1, N −1
)
N −1
mit
r i , j=a i ,0⋅b 0, j + ai ,1⋅b1, j +…+ a N −1,0⋅b N −1, j = ∑ ai , k⋅b k , j
k =0
Warum benötigt das Programm für N = 512 viel länger als für N = 513?
e) Lassen Sie das Programm für alle N innerhalb eines sinnvollen Bereiches auf dem in c)
vorgestellten Prozessor laufen und stellen Sie die Laufzeiten grafisch dar.
Hinweis: Schalten Sie die Geschwindigkeitsoptimierungen des Compilers ein!
(GCC: Option "-O3")
f) Bestimmen Sie durch passende Experimente,
- wie groß der Level-1(2/3)-Cache ist.
- wie groß die Blockgröße ist.
- ob der Cache direkt abgebildet ist bzw. welche Assoziativität vorliegt.
g) Optimieren Sie das Programm bzgl. der Cache-Effizienz. Welche Beschleunigung erreichen
Sie?
h) (optional) Verwenden Sie einen Cache-Simulator (z.B. Dinero, siehe Literatur), um die
Fehlzugriffsraten der ursprünglichen und der optimierten Version zu ermitteln.
i) (optional) Was versteht man unter Cache-Kohärenz? Wie arbeitet das MESI-Protokoll? Was ist
bei der Parallelisierung auf Thread-Ebene hinsichtlich der Speicher-Zugriffe zu beachten?
Quellen:
•
•
•
J. L. Hennessy, D. A. Patterson: "Computer Architecture – A Quantitative Approach", 5th
Edition, Morgan Kaufmann Publishers, 2011
Dinero: http://pages.cs.wisc.edu/~markhill/DineroIV
Code "matmul.c", Material-Seite
-3-
7. Parallelität auf Befehlsebene
a) Was versteht man unter Parallelität auf Befehlsebene (ILP, Instruction-Level Parallelism)?
Nennen Sie Compiler- und Hardware-basierte Techniken, die in diese Kategorie fallen!
b) Stellen Sie eine Technik im Detail vor.
c) Demonstrieren Sie diese Technik anhand eines praktischen Beispiels.
d) Stellen Sie die ILP-Umsetzung eines konkreten Prozessors (z.B. ARM Cortex A-Serie oder Intel
Core i7) im Detail vor.
Quellen:
•
J. L. Hennessy, D. A. Patterson: "Computer Architecture – A Quantitative Approach", 5th
Edition, Morgan Kaufmann Publishers, 2011, Kapitel 3
8. Parallelität auf Datenebene
a) Was versteht man unter Parallelität auf Datenebene (DLP, Data-Level Parallelism)? Nennen Sie
Hardware-Strukturen, die in diese Kategorie fallen!
b) Vergleichen Sie die Ansätze! Wie erfolgt jeweils die Nutzung aus Software-Sicht?
c) Stellen Sie eine Technik im Detail vor.
d) Demonstrieren Sie diese Technik anhand eines praktischen Beispiels.
e) Stellen Sie einen konkreten Prozessor im Detail vor.
Quellen:
•
J. L. Hennessy, D. A. Patterson: "Computer Architecture – A Quantitative Approach", 5th
Edition, Morgan Kaufmann Publishers, 2011, Kapitel 4
9. Parallelität auf Thread-Ebene
a) Was versteht man unter Parallelität auf Thread-Ebene (TLP, Thread-Level Parallelism)? Welche
Speicher-Modelle gibt es dabei?
b) Was versteht man unter Cache-Kohärenz? Beschreiben Sie eine Technik zur Gewährleistung der
Cache-Kohärenz (z.B. das MESI-Protokoll) im Detail!
c) Was ist bei der Parallelisierung von Software auf Thread-Ebene hinsichtlich der SpeicherZugriffe zu beachten? Demonstrieren Sie dies anhand eines praktischen Beispieles!
d) Schreiben Sie eine möglichst effiziente parallele Implementierung der Matrix-Multiplikation
(Datei matmul.c). Verwenden Sie dazu zum Beispiel OpenMP.
Quellen:
•
•
J. L. Hennessy, D. A. Patterson: "Computer Architecture – A Quantitative Approach", 5th
Edition, Morgan Kaufmann Publishers, 2011, Kapitel 5
Code "matmul.c", Material-Seite
-4-
10. OpenRISC
Das Thema kann in mehrere Projekte aufgeteilt werden. Sollte sich nur ein Team damit befassen,
so müssen nicht alle u.a. Aufgabenstellungen bearbeitet werden.
OpenRISC ist das "Flagschiff"-Projekt von Open Cores, einer Community-Webseite für
quelloffene Hardware-Module. Ziel des Projektes ist es, einen komplett quelloffenen RISCProzessor zu entwickeln.
a) Stellen Sie die OpenRISC 1000-Spezifikation vor. Was beschreibt sie? Was beschreibt sie
nicht?
b) Stellen Sie kurz die OpenRISC 1200-Implementierung vor.
c) Stellen Sie im Detail eine oder mehrere Aspekte der OpenRISC 1000-Spezifikation im Detail
vor:
◦
Unterstützung für virtuellen Speicher
◦
das Speicher-/Cache-Subsystem
◦
privilegierte Befehle
◦
den Wishbone-Busstandard
◦
On-Chip-Debugging: Funktionsweise des gdb und Hardware-Unterstützung in
Prozessor und System
d) Nehmen Sie ein OpenRISC-basiertes System-on-Chip auf dem Atlys-Board in Betrieb und
entwickeln Sie eine kleine Demo-Anwendung.
Quellen:
•
Matthias Klass, Alexander Senger: "OpenRISC", Kür-Projekt im SoSe 2012, MaterialSeite
•
http://openrisc.net/
•
http://opencores.org/or1k/Main_Page
•
Digilent Inc. Wiki: „Atlys Resource Center“, Documentation and Demonstration Projects,
https://reference.digilentinc.com/atlys:atlys:atlys
•
Anton Fosselius, Per Lenander : "Getting started with ORPSoC on the ATLYS board ",
June 1, 2012 , http://opencores.org/websvn,filedetails?
repname=orsoc_graphics_accelerator&path=%2Forsoc_graphics_accelerator%2Ftrunk
%2Fdoc%2ForpsocSetup.pdf
-5-
Themenfeld: FPGA-Technologie
11. Debugging im FPGA
Nicht jeder mögliche Entwurfsfehler in einer Hardware lässt sich vorab per Simulation entdecken,
da sowohl Simulationen als auch statische Timing-Analysen stets nur Näherungen an die Realität
darstellen. Die Software Vivado bzw. ISE ("ChipScope") erlaubt es, Messpunkte in ein FPGADesign zu integrieren, um damit das Verhalten der realen Hardware sichtbar machen zu können.
a) Geben Sie einen Überblick über die Fähigkeiten, die Arbeitsweise und Einsatzgebiete von
Vivado bzw. ChipScope.
b) Demonstrieren Sie den Einsatz von Debugging-Werkzeugen an einem eigenen Projekt:
Vorschlag 1: Erstellen Sie für den Counter (Materialseite) ein Projekt. Erweitern Sie das Design
und provozieren Sie einen Fehler durch einen nicht richtig einsynchronisierten Eingang.
Obwohl die Simulation ein korrektes Verhalten der Schaltung bestätigen wird, können in der
realen Schaltung im FPGA unerklärliche Fehler auftreten. Versuchen Sie den Fehlerhergang mit
dem Debugging-Werkzeug aufzuzeigen.
Vorschlag 2: Synthetisieren Sie einen Akkumulator mit Ripple-Carry-Addierer und
verschiedenen (sehr großen) Wortbreiten. Untersuchen Sie Verzögerungen bzw. Fehler an
höheren Bit-Positionen, wenn die Schaltung mit einem zu hohen Takt betrieben wird.
Quellen:
•
Xilinx: „Vivado Hardware Debug“ (Dokumente und Tutorials)
http://www.xilinx.com/products/design-tools/vivado/debug.html#logic
•
Xilinx: „ChipScope Pro Software and Cores“, UG029,
http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_6/chipscope_pro_sw_
cores_ug029.pdf
•
Xilinx: „ISE Tutorial: Using Xilinx ChipScope Pro ILA Core with Project Navigator to
Debug FPGA Applications“, UG750
12. Bildverarbeitung mit ASTERICS
Bildverarbeitung stellt insbesondere für eingebettete Systeme eine Herausforderung dar, da diese
meist nur beschränkt Rechenleistung zur Verfügung stellen. Mit Hilfe von dedizierter Hardware
kann sie jedoch enorm beschleunigt werden. Das ASTERICS-Framework ist ein modularer
Baukasten zur Entwicklung FPGA-basierter und Echtzeit-fähiger eingebetteter
Bildverarbeitungssysteme.
a) Machen Sie sich mit dem ASTERICS-Framework vertraut. Hierzu finden Sie auf der ProjektWebseite einen Übersichtsartikel (Konferenzbeitrag zur „embedded world 2015“) und im Wiki
weitere Detail-Informationen zur Struktur und Implementierung. Stellen Sie das Konzept, die
bisher enthaltenen Module und Demo-Systeme vor.
b) Nehmen Sie das ASTERICS-Simulations-Paket (von der Wiki-Seite) in Betrieb und machen Sie
sich mit der Bildverarbeitungs-Schnittstelle vertraut.
-6-
c) Nehmen Sie das Demo-Projekt in Betrieb: Generieren Sie zunächst das System mit Hilfe von
Vivado und laden Sie die FPGA-Konfiguration auf das Board. Welche Bestandteile hat das
System, wofür werden diese jeweils benötigt?
d) Erweitern Sie das System bzw. den ASTERICS IP-Core um ein eigenes Modul (sprechen Sie
sich hierzu mit dem Betreuer ab) und demonstrieren Sie das System.
Quellen:
•
Projekt-Webseite: http://ees.hs-augsburg.de/asterics
•
Wiki: http://asterics-wiki.informatik.hs-augsburg.de
•
Demo-System: im Repository (Link im Wiki)
13. Die Zynq-Plattform
Die Chips der Zynq-Serie von Xilinx enthalten sowohl FPGA-Logik für eigene Hardware als auch
performante ARM-Cortex-A9-Kerne. In diesem Projekt untersuchen und demonstrieren Sie die
Eigenschaften eines Zynq-Chips mithilfe der Evaluationskits ZedBoard.
a) Besorgen und lesen Sie die Handbücher des ZedBoard sowie des darauf verbauten Zynq-Chips.
Stellen Sie beides im Abschluss-Kolloquium vor!
Hinweis: Falls Aufgabe 14 (c) von einer Gruppe bearbeitet wird, so sprechen Sie sich bitte ab.
b) Booten Sie auf dem Board Linux, ohne vorher das FPGA programmiert zu haben. Inspizieren
Sie von der Linux-Konsole aus das System: Welche Eigenschaften hat der Prozessor? Wie viel
Speicher und wie viel Cache stehen zu Verfügung? Welche Peripherie-Komponenten können
wie angesprochen werden?
c) (optional) Wie lässt sich die 2. CPU nutzen? Schreiben Sie ein kleines Anwendungsprogramm,
das nachweislich beide ARM-Kerne nutzt!
d) Entwerfen Sie mit Vivado ein einfaches System mit ARM-CPU und FPGA-Logik und lassen Sie
darauf ein "Hello World"-Programm laufen. Eine Kurzanleitung dazu finden Sie auf der
Material-Seite.
e) Entwerfen Sie in VHDL einen eigenen IP-Core und integrieren Sie ihn in das System. Schreiben
Sie eine kurze Demo-Software, um den IP-Core in Betrieb zu nehmen. Hierzu finden Sie
ebenfalls eine Kurzanleitung auf der Material-Seite.
Vorschläge für IP-Cores:
•
Dimmbare LEDs: Die 8 LEDs des Boards sind mit digitalen FPGA-Ausgängen verbunden.
Durch zyklisches Ein- und Ausschalten (Pulsweiten-Modulation) lassen sie sich dimmen.
Implementieren Sie ein Hardware-Modul, das über E/A-Register Helligkeitswerte
entgegennimmt und passend dazu PW-modulierte Signale erzeugt.
•
Coprozessor: Implementieren Sie eine Hardware für eine mathematische Funktion, z.B.
f(x) = ex mod n für kryptografische Anwendungen.
•
Timer: Implementieren Sie eine hochpräzise Uhr, die sich per Software auslesen lässt.
-7-
Quellen:
•
•
•
•
http://www.zedboard.org
Michael Schäferling: "HowTo 'Hello World' fuer das Avnet ZedBoard", Material-Seite
Michael Schäferling: "HowTo 'IPcore Creation' fuer das Avnet ZedBoard", Material-Seite
Digilent Inc. Wiki: „ZedBoard Zynq™-7000 Development Board Resource Center“,
Documentation, Tutorials and Demonstration Projects,
https://reference.digilentinc.com/zedboard:zedboard
14. Embedded Linux für die Zynq-Plattform mit dem Yocto-Projekt
Hinweis: Das Bauen eines Embedded-Linux-Systems benötigt viel Platten-Speicher. Stellen Sie
deshalb sicher, dass Sie mindestens 40GB freien Speicherplatz zur Verfügung haben!
a) Das Yocto-Projekt
Machen Sie sich mit dem Yocto-Projekt vertraut:
- Was ist das Ziel des Projekts?
- Wie hilft es Ihnen bei der Erstellung eines Embedded-Linux-Systems?
- Was wird benötigt, um Yocto/Poky auf eigener Hardware nutzen zu können?
b) Erste Schritte mit Yocto
Sammeln Sie erste Erfahrungen mit dem Yocto-Projekt, indem Sie es auf einem herkömmlichen
ARM-System in Betrieb nehmen. Bauen Sie hierzu die aktuelle Yocto-Distribution für das
"BeagleBone Black" (im Labor verfügbar) und nehmen Sie dieses in Betrieb.
- Welche Schritte durchläuft das System beim Boot-Prozess?
- Welche Dateien werden für den Boot-Prozess benötigt (wofür jeweils?) und
wo befinden sich diese?
- Müssen sich alle benötigten Dateien auf der SD-Karte befinden?
c) Die Zynq-Plattform
Machen Sie sich mit der Zynq-Plattform vertraut:
- Wie ist die Architektur der Zynq-Plattform beschaffen?
- Welche Komponenten enthält sie, wie kann sie erweitert werden?
- Welche Möglichkeiten gibt es, die Zynq-Plattform zu betreiben?
Hinweis: Falls Aufgabe 13 (a) von einer Gruppe bearbeitet wird, so sprechen Sie sich bitte ab.
d) Yocto auf der Zynq-Plattform
Erstellen Sie die Linux-Distribution für das ZedBoard, welches den Xilinx Zynq-Chip
"XC7Z020" enthält. Xilinx unterstützt den Betrieb von Yocto auf dem ZedBoard und bietet
hierzu einen Meta-Layer für Yocto mit Dokumentation an.
Quellen:
•
Zum Yocto-Projekt:
- https://www.yoctoproject.org/documentation/current
- https://wiki.yoctoproject.org
-8-
•
Zu Yocto auf der Zynq-Plattform :
- http://www.wiki.xilinx.com/Yocto
- http://git.yoctoproject.org/cgit/cgit.cgi/meta-xilinx/about/
15. High-Level-Synthese
Unter High-Level-Synthese (HLS) versteht man die Generierung von Hardware aus
Verhaltensbeschreibungen, z.B. in VHDL oder C. Dieses Projekt beschäftigt sich mit der HighLevel-Synthese mithilfe des Frameworks Xilinx Vivado HLS.
a) Besorgen Sie sich von der Xilinx-Webseite das Tutorial "Vivado Design Suite Tutorial: HighLevel Synthesis " sowie die dazugehörigen Design-Files.
b) Machen Sie sich mit den HLS-Tools vertraut, indem Sie aus dem o. g. Dokument die Übungen
des Kapitels "High-Level Synthesis Introduction" durchspielen.
c) Worin besteht die Eingabe, was ist die Ausgabe von Vivado HLS? Was ist eine "Solution"? Was
sind "Directives" und wo können Sie angegeben werden?
d) Nennen und erklären Sie 3-5 wesentliche Merkmale, die High-Level-Synthese von der RTLSynthese unterscheiden! In welchen Punkten werden z.B. vom HLS-Tool Entscheidungen
getroffen, die beim RTL-Entwurf manuell erfolgen?
e) Nennen und erklären Sie mehrere Techniken, um eine Design bezüglich Fläche und/oder
Geschwindigkeit zu optimieren. Demonstrieren Sie die jeweiligen Techniken an einem Beispiel!
f) (optional) Erläutern Sie die Schnittstellen, die Vivado HLS unterstützt. Gehen Sie insbesondere
darauf ein, wie sich ein IP-Core in ein System integrieren lässt.
g) (optional) Nennen und erklären Sie die Datentypen, die Vivado HLS unterstützt.
Quellen:
•
•
Xilinx: "Vivado Design Suite Tutorial: High-Level Synthesis", UG871, www.xilinx.com,
2013
Xilinx: "Introduction to FPGA Design with Vivado High-Level Synthesis ", UG998 (v1.0)
2.7.2013 , www.xilinx.com
16. Moderne Signalübertragung: Ansteuerung eines Bildschirms mit
HDMI
Während bis vor kurzem noch analoge Signale für die Übertragung von Bilddaten üblich waren,
werden zunehmend digitale Übertragungsverfahren eingesetzt. DVI und HDMI sorgen nun sowohl
im Arbeits- als auch im Wohnzimmer für eine ungestörte Bildübertragung. FPGAEntwicklungsboards setzen ebenfalls zunehmend auf diese digitalen Standards. Die nötige
Transmitter-Logik, die bisher in eigenständigen Chips ausgelagert war, kann nun sogar in den
FPGA selbst integriert werden. So enthalten auch neuere FPGA-Entwicklungsboards lediglich eine
physikalische HDMI-Schnittstelle und einen kleinen Treiber-Baustein (ZedBoard: „Analog
Devices ADV7511“; Atlys-Board: „TI TMDS141“) - die HDMI-Signale selbst müssen zum Teil im
FPGA selbst generiert werden.
An der Hochschule ist bereits ein IP-Core zur Bildausgabe entstanden, welcher bisher jedoch nur
analoges VGA und einen externen DVI-Baustein unterstützt. Ziel ist es, diesen IP-Core um ein
passendes HDMI-Backend zu erweitern, so dass er auch für System-On-Chip-Designs auf dem
-9-
ZedBoard bzw. dem Atlys-Board und ggf. aktuelleren Boards verwendet werden kann. Weiterhin
sollen auch höhere Auflösungen als bisher (640x480 Pixel) ausgegeben werden können.
Quellen:
•
Digilent Inc. Wiki: „ZedBoard Zynq™-7000 Development Board Resource Center“,
Documentation, Tutorials and Demonstration Projects,
https://reference.digilentinc.com/zedboard:zedboard
•
Mike Field; „Zedboard VGA HDMI“, Hamsterworks Wiki!,
http://hamsterworks.co.nz/mediawiki/index.php/Zedboard_VGA_HDMI
•
Digilent Inc. Wiki: „Atlys Resource Center“, Documentation and Demonstration Projects,
https://reference.digilentinc.com/atlys:atlys:atlys
•
Xilinx: "Implementing a TMDS Video Interface in the Spartan-6 FPGA", XAPP495,
www.xilinx.com
•
Cristinel Ababei, Marquette University: „Video Interfaces: HDMI and DVI“,
http://www.dejazzer.com/ee478/labs/lab9_hdmi.pdf
- 10 -
Themenfeld: Paralleles und verteiltes Rechnen
17. OpenMP
OpenMP ist eine Spezifikation für Compiler-Direktiven und Bibliotheken zur einfachen
Programmierung von parallelen Anwendungen in C/C++ oder Fortran.
a) Geben Sie eine Einführung in die Programmierung mit OpenMP. Welche Arten von parallelen
Regionen gibt es? Welche Synchronisationsmechanismen gibt es? Welche Besonderheiten gibt
es hinsichtlich der Datenhaltung? Illustrieren Sie die wesentlichen Konzepte anhand kleiner,
praktischer Beispiele.
b) Entwickeln Sie mithilfe von OpenMP eine effiziente parallele Implementierung der MatrixMultiplikation (Datei "matmul.c", siehe auch andere Aufgabe zur Cache-Effizienz) und/oder
einer weiteren – von Ihnen frei wählbaren – Applikation. Demonstrieren Sie anhand dieser
Beispiele verschiedene Konzepte von OpenMP.
Quellen:
•
http://openmp.org/
•
Joel Yliluoma: "Guide into OpenMP: Easy multithreading programming for C++", http://bisqwit.iki.fi/story/howto/openmp/
18. OpenCL
OpenCL (Open Computing Language) ist eine offene Schnittstelle für Rechner, die mit
verschiedenartigen, parallelen Recheneinheiten - z .B. CPUs, Grafikprozessoren, DSPs ausgestattet sein können.
a) Stellen Sie OpenCL vor. Was sind die grundlegenden Konzepte, z.B. im Hinblick auf den
Datenaustausch (Speicher-Modell) oder Synchronisation?
b) Präsentieren Sie ein praktisches Beispiel (z.B. einen paralleles Sortier-Programm).
Quellen:
•
http://www.khronos.org/opencl/
19. Message Passing Interface (MPI)
Message Passing Interface (MPI) ist ein Standard, der den Nachrichtenaustausch bei parallelen
Berechnungen auf verteilten Computersystemen beschreibt.
a) Stellen Sie MPI vor. Was sind die grundlegenden Konzepte?
b) Präsentieren Sie ein praktisches Beispiel (z.B. einen paralleles Sortier-Programm).
Quellen:
•
http://de.wikipedia.org/wiki/Message_Passing_Interface
•
Projekt-Webseite: http://www.mcs.anl.gov/research/projects/mpi
- 11 -

Documents pareils