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 -