Home

inaugural - dissertation - Ruprecht-Karls

image

Contents

1. 6 il we oO Bild 1 1 Vereinfachtes Schaubild von Signalwegen zwischen Genen die Enzyme produzie ren Gen fiinf G5 ist inaktiv der Signalweg zu Enzym B ist unterbrochen somit wird es nicht produziert Zum Zweck einer Untersuchung gibt es die M glichkeit Gene in lebenden Zellen mit einem speziellen Verfahren zu inaktivieren Die Folge ist dass diese Zellen bestimmte Enzyme nicht mehr produzieren Folglich k nnen die Viren die vom speziellen Enzym abh ngig sind sich nicht mehr reproduzieren oder weiterleben und die infizierte Zelle nimmt keinen weiteren Scha den Ben tigen die Viren dieses Enzym nicht wird die Zelle konsumiert und stirbt ab Ein Forschungsgebiet liegt darin den Zusammenhang zwischen Genen und der Enzymproduk tion zu verstehen Meist sind mehrere Gene f r die Produktion einzelner Enzyme verantwort lich Umgekehrt sind aber auch einzelne Gene f r die Produktion mehrerer Enzyme zust ndig Um den Zusammenhang zwischen Genen und Enzymen besser verstehen zu k nnen werden Netzwerke bestehend aus Signalwegen konstruiert die das Wissen veranschaulichen welche Gene f r welche Enzyme zur Produktion ben tigt werden Das Bild 1 1 zeigt eine Unterbre chung des f r die Enzymproduktion wichtigen Zweigs Um die eben genannte Beispielanwendung durchf hren zu k nnen werden mehrere Experten aus unterschiedlichen Gebieten ben tigt Zu ihnen z hlen Biologen Physiker Mathematiker Informatiker und Ingenie
2. get_global_id int D die die Berechnung der globalen Thread Nummer bernimmt wie sie im Quelltextbeispiel 2 1 auf Seite 13 berechnet wurde Quelltextbeispiel 2 2 demonstriert die gleiche Funktion diesmal als OpenCL Kernel __ kernel void CL_matrixAdd __global float A __global float B __global float C int row get_global_id 1 get_global_id 0 int colSize get_global_size 0 int col int element row colSize col C element A element B element Quelltext 2 2 Von vielen Threads durchlaufene OpenCL Kernelfunktion zur Berechnung einer Matrixaddition Wie in CUDA gibt es in OpenCL einen Satz Funktionen Laufzeitumgebung die Kernel Funktionen starten und Daten von und zum Ger te Speicher transferieren Die Laufzeitumge bung von OpenCL umfasst weitere Funktionen zum Anlegen und Ausw hlen eines OpenCL Ger ts sowie die bersetzung einer Kernelfunktion zur Laufzeit Der OpenCL Kompilierer ist kein eigenst ndiges Programm sondern wird durch Bibliotheksfunktionen der Laufzeitum gebung aufgerufen und gestartet D h der OpenCL Programmierer muss erst ein Programm schreiben um seine OpenCL Kernelfunktion bersetzen zu k nnen Der volle Funktionsum fang der Laufzeitumgebung ist in der OpenCL Spezifikation 36 beschrieben Das Bild 2 4 zeigt die OpenCL Strukturen die notwendig sind um ein Programm zu berset zen und zur Ausf hrung zu bringen Die c1 Funktionen generieren die Strukturen bzw ben t
3. Bild 5 9 Vereinfachter SSA AST der Matrixaddition mit zugeordneten Operationen Da jedes Programm Daten aus dem Speicher liest darauf rechnet und Ergebnisse wiederum schreibt befinden sich die Rechenoperationen der Pipeline zwischen den 1oad Operationen und den store Operationen Im Bild ist das lediglich die rote aaa Operation die nacheinander alle Elemente der Matrix addiert Die analysePipelinePart Methode durchsucht den Parse baum beginnend bei den InstTransfer 1oad Operationen vorw rts in Pfeilrichtung zu den InstTransfer store Operationen Mit rekursiven Aufrufen werden alle Verzweigungen durch laufen und alle identifizierten Rechenoperationen als Teil der Pipeline im Bild mit rot mar kiert Die 10ad und die store Operation ben tigt die Angabe an welcher Adresse gelesen bzw geschrieben werden soll Die Adresse wird mit der Instruktion getelemntptr und eventuell weiteren arithmetischen Operationen berechnet die markierte werden sollen Die Markierung hilft die arithmetischen Operationen zur Berechnung der Adresse mit denen aus der Pipeli ne zu unterscheiden Die unterschiedlich markierten arithmetischen Operationen werden sp 78 5 3 VHDL Kompilierer ter in unterschiedlichen VHDL Komponenten berechnet Die Methode analyseTransferPart durchl uft den Parsebaum beginnend bei den InstTransfer 10ad Operationen r ckw rts zu den Kernel Funktionsparametern im Bild zu den blauen Kreisen Beim Durchlauf
4. 28 add nsw 132 26 27 29 load i32 3 align 4 30 getelementptr inbounds i32 29 132 28 store i32 23 i32 30 ret void define void matrixAdd i32 nocapture SA i32 nocapture B i32 nocapture C i32 w nounwind 1 tail call i32 get_ global id i32 0 nounwind 2 tail call i32 get global _id i32 1 nounwind 3 mul nsw 132 2 w 4 add nsw 132 3 1 5 getelementptr inbounds i32 SA 132 4 Mivm opt 6 load i32 5 align 4 7 getelementptr inbounds i32 B i32 34 8 load i32 7 align 4 9 add nsw i32 8 6 10 getelementptr inbounds i32 C 132 4 store i32 9 i32 10 align 4 ret void Bild 5 3 bersetzung der Kernelfunktion mat rixada in die Zwischensprache LLVM IR 69 5 OpenCL zu FPGA bersetzer 5 3 2 Softwarearchitektur VHDL Backend In einem Blockschaubild 5 4 wird die Struktur des VHDL Backend in funktionale Bl cke ge gliedert und anschlie end erl utert Weiter wird mit UML Unified Modeling Language einer grafischen Modellierungssprache die Softwarearchitektur des bersetzers in Klassendiagram men visualisiert VHDL Backend Bild 5 4 Die vier bersetzungschritte des VHDL Backends 1 Ein SSA Parser liest den optimierten LLVM IR SSA Quelltext einer OpenCL Kernel funktion ein und generiert aus den Instruktionen einen Syntaxbaum AST hier SSA AST genannt Wie SSA mit LLVM zusammenh ngt war in 3 3 2 erw hnt Man h t te auch die Speicherr
5. 59 60 61 62 a 63 64 65 66 67 68 69 70 132 Seite 1 6 IEEE 2006 doi 10 1109 FPL 2006 311235 William R Mark R Steven Glanville Kurt Akeley und Mark J Kilgard Cg a system for programming graphics hardware in a C like language ACM Trans Graph Volu me 22 896 907 July 2003 doi 10 1145 882262 882362 Michael McCool Sh Lib URL http libsh org 2003 Microsoft Editor Phoenix Compiler and Shared Source Common Language Infrastruc ture URL https connect microsoft com Phoenix Hubert Nguyen GPU Gems 3 Addison Wesley Upper Saddle River NJ USA 2007 NVIDIA Whitepaper NVIDIA GF100 URL http www nvidia com object 10_86775 html1 2010 NVIDIA Whitepaper NVIDIAs Next Generation CUDA Compute Architecture Fermi URL http www nvidia com content PDF fermi_white_papers NVIDIA_Fermi_Compute_Architecture_Whitepaper pdf 2010 NVIDIA CUDA C Best Practices Guide Mai 2011 NVIDIA NVIDIA CUDA C Programming Guide Mai 2011 NVIDIA CUDA Occupancy Calculator URL http developer download nvidia com compute DevZone docs html C tools CUDA_ Occupancy_Calculator xls 2012 Alexandros Papakonstantinou Karthik Gururaj John A Stratton Deming Chen Jason Cong und Wen Mei W Hwu FCUDA Enabling efficient compilation of CUDA kernels onto FPGAs Application Specific Processors Symposium on Volume 0 35 42 20
6. m ssen In der Doppelschleife werden die Bildmerkmale in der Reihenfolge berechnet welche der Ab h ngigkeitsgraph in Bild 4 3 empfiehlt In den ersten beiden Bl cken werden die Zwischener gebnisse Piy Py und P sowie die Bildmerkmale 4 1 4 5 und 4 9 berechnet Diese Reihenfolge liefert ideale Raten von Cache Treffern in der CPU da stets aus der selben Spei cherregion gelesen wird in der sich die Co Matrix befindet Auch in den folgenden Bl cken bleiben die Speicherzugriffe auf die P und die P _ Speicherregion begrenzt Nur in den letz ten drei Bl cken k nnen die Speicherzugriffe nicht regional begrenzt werden Besonders die Lesezugriffe auf die bereits berechneten Bildmerkmale 4 6 und 4 9 ersparen eine doppelte Berechnung und im Fall von 4 9 wird eine dreifache Berechnung eingespart Die eben vorgestellte Struktur wurde in einer C Klasse implementiert die mit Inline Funk tionen den Funktionsaufruf Overhead einspart Das Programm wurde mit der besten Kompilie reroptimierung bersetzt Das beinhaltet Bem hungen vom Kompilierer die Berechnungen in den Schleifen mit den SSE Instruktionen zu vektorisierten Aus diesem Grund sind die Schlei fen im Quellcode kurz und einfach gehalten 4 3 GPU Implementierung In diesem Kapitel wird dargelegt wie der Haralick Algorithmus auf der GPU Architektur pa rallelisiert wird und es werden Implementierungsdetails dargelegt 4 3 1 Parallele Struktur In CUDA werd
7. Die ersten Grafikkarten waren in ihrer Funktionalit t darauf beschr nkt Text und einzelne farbige Bildpunkte aus dem Grafikspeicher in Videosignale umzusetzen Getrieben von der Computerspieleindustrie wurde in den 90er Jahren die Funktionen um die F higkeit Linien und Fl chen zu zeichnen erweitert um den Grafikaufbau zu beschleunigen Die Grafics Pro cessing Unit GPU war geboren Mit den popul ren 3D Spielen bekam die GPU eine Grafikpipeline die mit mehreren Shader Einheiten aus einer polygonen 3D Rastergrafik ein 2D Bild berechnete Die Shader Vertex Shader Geometry Shader und Pixel Shader konnten programmiert werden um visuelle Ef fekte Objektverformung Lichtquellen mit Schatten Lichtreflexionen und Objekttexturen der 3D Rastergrafik hinzuzuf gen Die zwei g ngigsten Programmierschnittstellen APIs f r die Grafikpipelines sind DirectX 2 von Microsoft und OpenGL 1 von der Khronos Group Die entsprechenden hohen und C hnlichen Shaderprogrammiersprachen sind OpenGL Shading Language GLSL 44 und Microsofts High Level Shading Language HLSL 6 Weiter gibt es die Sprache von NVIDIA C for Grafics Cg 58 die den Einsatz auf Grafikkarten des Herstellers beschr nkt 24 3 1 Co Prozessoren Im Jahr 2003 bertraf die Rechenleistung der damaligen GPUs die der CPUs und setzten sich fortan weiter ab Es war logisch die GPU ebenso f r rechenintensive nicht grafische Algorith men zu nutzen Ein Weg
8. GPU Implementierung 4 3 2 Details der Implementierung Dieser Abschnitt beschreibt Details der Implementierung und Probleme mit deren L sungen Die Beschreibung ist chronologisch zu den Berechnungen beginnt mit dem Speichertranfser in die GPU und endet mit dem Auslesen der Ergebnisse Alle parallelen Operationen werden vereinfacht als singul rer Fall ausgedr ckt Dabei darf nicht vergessen werden dass die Ope rationen parallel auf vielen Matrizen und vielen Zellen aufgef hrt werden 4 3 2 1 Kopie der Zellen Im ersten Schritt wird das Multizellbild in den Arbeitsspeicher der GPU kopiert Nachdem die Zelle mit gegebenen Koordinaten identifiziert wurde werden sie in einen separaten Speicher bereich f r dessen direkten Zugang transferiert Der Zweck des letzten Speichertransfers ist die Erweiterung des Zellbildes mit einem Rahmen der Distanz D 5 Pixel bestehend aus Nullen zum Zellbild Dieser Schritt ist f r die sp tere Pixelpaarbildung notwendig damit auch Pixel am Zellbildrand Paare ber die Grenze des Zellbildes hinaus bilden k nnen Letztendlich wird ein Texturencache auf das Zellbild zum beschleunigten Lesen eingerichtet 4 3 2 2 Lookup Tabellen Es gibt zwei sortierte Nachschlage Tabellen Lookup Tabellen Die erste enth lt Index Grau wertpaare aufsteigend sortiert mit dem Index und die zweite Grauwert Indexpaare aufstei gend sortiert mit dem Grauwert Die Index Grauwerttabelle wird bei der Merkmalsberechnu
9. Werte f r die Mindestmenge des Bustransfers auf Das Bild 5 17 zeigt die Bestandteile des Rechenblocks Sie repr sentieren alle Rechenopera tionen die sich beliebig blockweise verschachteln lassen OPERATION DELAY_INPUT_A BlockComputation DELAY_INPUT_B clkUser rst a_din y Verz a erz gerung Rechen En b_rdy k c_valid Al wer Verz gerung ei b_din Bild 5 17 Schematische Darstellung des VHDL Berechnungsblocks Oben Generic Ports und unten die Entity Ports e Welche Operation das Rechenwerk ausf hren soll wird vom Genericparameter bestimmt Im VHDL Quelltext gibt es f r jede Rechenoperation eine Implementierung die durch den OPERATOR Parameter bestimmt wird 87 5 OpenCL zu FPGA bersetzer e Die DELAY_INPUT Parameter konfigurieren die Anzahl der Registerstufen an jedem Dateneingang f r deren Verz gerung e Das stall Signal unterbricht die Berechnungen D h alle Register halten ihren alten Wert Bild 5 18 zeigt den funktionalen Aufbau des VHDL Blocks der eine bedingte Zuweisung im plementiert BlockCondAssign CMP_FUNCTION CMP_CONSTANT DELAY_INPUT_CMP DELAY_INPUT_B DELAY_INPUT_A clkUser rst cmp_din Vergleicher cmp_rdy a_din Verz gerung b_rdy c_valid Verz gerung b_din stall Bild 5 18 Schematische Darstellung des VHDL Bedingter Zuweisungsblock Oben Generic Ports und unten die Entity Ports e Der Genericparameter CMP_FUNCTION definier
10. der jedoch weiter von der ersten Instanz ben tigt wird In der Funktion systemca11 wird ein v ork verwendet der den Speicherbereich des Vater Prozesses nicht kopiert In den folgenden Abschnitten sind die wichtigsten Passagen der Laufzeitumgebung erl utert wie sie mit dem Rahmendesign der Kommunikationsklasse und letztendlich mit der MPRACE Bibliothek zusammenarbeiten Auf die Fehlerbehandlung wird mit Blick auf das Wesentliche verzichtet Eine vollst ndige und lauff hige OpenCL Anwendung die den Einsatz des Kompi lierers und die Ausf hrung auf dem FPGA demonstriert befindet sich im Anhang A 5 5 2 2 Verwaltung der OpenCL Ger te Der Quelltextausschnitt 5 2 aus der Demonstrationsanwendung im Anhang zeigt wie die OpenCL Funktionen den FPGA findet und f r die weitere Verwendung nutzbar macht cl_int status CL_SUCCESS cl_uint number 0 cl_device_id device NULL cl_context context NULL status clGetDeviceIDs NULL CL_DEVICE_TYPE_ACCELERATOR 1 amp device amp number context clCreateContextFromType NULL CL_DEVICE_TYPE_ACCELERATOR NULL NULL amp status Quelltext 5 2 OpenCL Initialisierung des FPGA als Beschleunigerkarte Die OpenCL Funktion cicetDevice1Ds sucht im Computer ein OpenCL Ger t des Types Be schleuniger ACCELERATOR und gibt eine Liste mit den gefundenen Ger ten zur ck Die Imple mentierung ruft die Call Back Funktion hasDevice auf die ihrerseits eine Instanz von mL
11. einheitlich mit dem gleichen Kompilierer und Optimierer zu verwenden Clang 3 ist ein Open Source Projekt das mehrere Frontends mit dem LLVM Kompilierer framework entwickelt Die Front Ends geh ren zu den Sprachen C C Objektive C und Ob jective C Im Vergleich zu GCC haben Programme die mit einem LLVM Frontend bersetzt wurden eine vergleichbare kompakte Programmgr e besitzen besser optimierten Programm text der sich schneller ausf hren l sst und mit komplexen hohen Sprachkonstrukten ebenso gut 34 3 4 Software Hardware Kompilierer zurecht kommt trotz einfacher Quelltextrepr sentation 3 4 Software Hardware Kompilierer Dieser Abschnitt untersucht mehrere Sprachen welche f r die Biologen gedacht sind um den FPGA Algorithmus in der Offline Prozessierung ver ndern zu k nnen 3 4 1 bersicht Die Designs f r FPGAs haben lange Entwicklungszeiten wegen e der komplexen Beschreibung der algorithmischen Aufgabe in der Register Transfer Ebene e der langen Simulationszeiten e der langen bersetzungszeiten e schwer zu deutender Ubersetzungsfehler e eines m glichen Ungleichverhaltens zwischen Simulationssynthese und Hardwaresyn these e der Schwierigkeit Fehler schnell aufsp ren zu k nnen lange Debug Zyklen Wegen dieser Gr nde existieren sehr viele Software Hardware Kompilierer die die Hardwa resynthese mit C hnlichen Sprachen beschleunigen und erleichtern Im Idealfall muss der
12. male Rechenleistung handelt Die Entwicklungszeiten sind sehr lang Aus diesem Grund gibt es eine F lle von Sprachen die die FPGA Beschreibung vereinfachen k nnen die noch weiter vorgestellt und bewertet werden Vergleichstabelle Zur besseren bersicht werden die Kenndaten in einer Tabelle dargestellt CPU GPU FPGA theoretische Rechenleistung 64 GFLOPS 1500 GFLOPS ca 100 GFLOPS maximale Verlustleistung 90 W 300 400 W 25 W Anschaffungskosten 500 1000 EUR 500 1000 EUR 1000 10000 EUR Entwicklungszeit kurz kurz sehr lang Einsatzfahigkeit sequentiell blockweise gestreamt Tabelle 3 1 Vergleichstabelle der g ngigen Co Prozessoren mit der CPU Die sequentielle Einsatzfahigkeit der CPU wird als Vorteil gewertet denn sie ist in der Lage seriellen Quelltext sehr effizient auszuf hren was die GPU bzw der FPGA nicht gut k nnen Die CPU ist als Universalprozessor ebenfalls in der Lage parallelen Quelltext auszuf hren eine GPU kann dies aber in der Regel effizienter 30 3 2 Haralick Texturen Bildmerkale 3 2 Haralick Texturen Bildmerkale 3 2 1 Beschleunigende Vorarbeiten Es gibt zwei wichtige Arbeiten auf die diese Arbeit aufsetzt Erstens die biologische Anwen dung die die Haralick Bildmerkmale ben tigt 25 und zweitens eine andere die bereits den Haralick Algorithmus in rekonfigurierbarer Hardware beschleunigt hat 71 Die erste Arbeit handelt von der automatischen Analyse
13. ten Operationen w hrend die anderen vom Optimierer entfernt werden Die vollst ndige Optimierung ist erst nach der it Transformation m glich 3 Fertigungsplan Die Analyse findet im Trident IR die Anzahl maximal gleichzeitig ge nutzter Operationen Wenn es f nf Addierer gibt aber nur drei zu beliebigen Zeitpunkten gleichzeitig genutzt werden ben tigt man nun so viele in der Hardware Unter Ber ck sichtigung der verf gbaren FPGA Ressourcen und der verf gbaren Speicherbandbreite wird ein Kontrollflussgraph mit Latenzzeiten erstellt 4 Synthese Einer der ersten Schritte in der Synthese ist die Auswahl der Flie kommabi bliothek die zugrunde gelegt wird Die Ausgabe der Synthese ist ein Hardwaredesign in VHDL Die Synthese umfasst die Generierung der Datenpfade in einer Pipeline dies passiert f r mehrere Bl cke Zu jedem Block wird eine Zustandsmaschine FSM ge heftet die das Zeitverhalten aus dem Kontrollflussgraph ber cksichtigt Die generierten Register dienen der Blockkommunikation untereinander Ein Kontrollmodul steuert die Ausf hrung aller Bl cke Laut der Autoren funktioniert der Trident Kompilierer f r zahlreiche einfache FPGA Anwen dungen Die Leistung des FPGA Designs h ngt ma gebend von der Flie kommabibliothek ab was die Entwickler so wollten Man hat die Wahl Bibliotheken zu verwenden die auf Ressour 38 3 4 Software Hardware Kompilierer cenbedarf oder auf Geschwindigkeit optimiert sind 3
14. 4 1 dargestellt Abb 4 2 a Abb 4 2 b Contrast 4 2 3 625E5 1 035E4 Inverse Different Moment 4 5 0 5558 0 5715 Entropy 4 9 5 5187 5 4807 Tabelle 4 1 Bildmerkmalswerte fiir ein verrauschtes Zellbild 4 2 a und ein weichgezeichne tes b Der Wert fiir das Bildmerkmal Contrast ist gr er f r kontrastreichere Bilder Im eben genann ten Beispiel ist der Wert Contrast f r die verrauschte Zelle tats chlich gr er als der Wert fiir die weichgezeichnete Zelle Umgekehrt ist f r das Bildmerkmal Inverse Different Moment der Wert kleiner f r kontrastreiche Bilder wie in der Tabelle zu erkennen ist Die Entropy ist ein 52 4 1 Untersuchung des Haralick Algorithmusses b Bild 4 2 Zwei gleiche Zellbilder a mit zus tzlichem Rauschen und b weichgezeichnet Ma f r eine Zuf lligkeit deren Wert f r weiche Bilder kleiner ist Weitere Beispiele f r die Anschaulichkeit der Bildmerkmale sind in 73 und 39 zu finden Die Gleichungen der Bildmerkmale aus dem Buch 73 sind f r den allgemeinen Fall symme trische und asymmetrische Co Matrizen Die aufgelisteten Bildmerkmale sind f r symmetrisch quadratische Co Matrizen vereinfacht worden gemeint sind die gleichen Berechnungsergeb nisse f r Zeilen und Spalten Somit konnten in den Bildmerkmalen Correlation 4 3 Infor mation Measure I 4 3 und Definitionen Mean 4 17 Variance 4 18 Entropy 4 18 Terme gek rzt oder durch Ausdr cke m
15. 7 Einschr nkungen in der bersetzung 22 2 22222 90 5 4 Rahmendesign 2 2 2 nun nn 91 3 4 1 Bestandteile 20 2 2 mea don nn a a aa a 91 5 4 2 PCle Core und DMA Engine 2 2 on En 91 543 PCIe Einheit s s s 24 a ae ae RA ed 92 5 4 4 Datenflusskonzept 2 2 2 nn nn 94 5 4 5 Speicherkontroller und vereinfachtes Ansprechen 94 5 4 6 Speicherverwaltungseinheit 2 2 2m on nn 95 5 4 7 Kontrolleinheit 22 on non 98 54 8 Taket e u sd u ae ee a nn a A rca an Be 99 5 5 OpenCL Laufzeitumgebung 2 2 2m a 100 5 5 1 FPGA Kommunikation 2 2 2 22 Co rn nn nn 100 5 5 1 1 Entwicklungssteckkarte ML605 2 222 222 100 5 5 1 2 PCle Treiber und MPRACE Bibliothek 101 5 5 1 3 Kommunikations Klasse 2 22 2 a 102 5 5 1 4 Speichertabellen Klasse 2 2 En nn nn 104 5 5 2 OpenCL Funktionen 2 2 2 m on nn 104 5 5 2 1 Implementierung der OpenCL Funktionen 2 2 2 2 104 5 5 2 2 Verwaltung der OpenCL Ger te 2 2 22 2 nn 105 5 5 2 3 Kernelfunktion bersetzen 2 2 22 2222 106 5 5 2 4 Daten bertragung und Pipeline starten 2 2 2 2 107 5 3 3 Austausch Pipeline Modul 2 22 2m En nn 109 5 5 3 1 Programmierschnittstellen und DPR 2 109 5 5 3 2 Pipeline Module mit DPR austauschen 109 XIII Inhalt 6 Ergebnisse und Diskussion 6 1 GPU Beschleunigung 2 2 2 Cm e 6 2 6 1 1 6 1 2 6 1 3 Gesch
16. Designs Der Ressourcenbedarf wird f r das statische und das dynamischen Design getrennt behandelt Das statische Design umfasst die Logik des Speicherkontrollers der vereinfachten Speicher schnittstelle der PCIe Logik der DMA Engine und dem Rahmendesign Das dynamische De sign entspricht der Pipeline mit der zus tzlichen Logik Da die Pipeline selbst aus Bl cken 115 6 Ergebnisse und Diskussion besteht die unterschiedlich zusammengesetzt werden k nnen werden sie in der Ressourcenta belle 6 4 einzeln aufgelistet Slice Slice Block Slice Registers LUTs RAM FIFO DSP48Els statisches Design 17083 5 7 17245 11 4 34 8 2 Block Addressing 374 0 1 925 0 6 4 0 5 BlockComputing ADD 99 0 0 35 0 0 0 5 BlockComputing MUL 101 0 0 3 0 0 4 BlockCondAssign 132 0 0 43 0 0 BlockTransferRd 2350 0 8 1427 0 9 6 1 4 BlockTransferWr 986 0 3 1562 1 0 4 1 0 Tabelle 6 4 Ressourcenverbrauch des statischen Designs und der Pipelinebausteine Anhand der Ressourcentabelle l sst sich absch tzen wie viele Pipelinebausteine zu einer Pipe line zusammengef gt werden k nnen F r eine hohe Ausnutzung der FPGA Ressourcen muss entsprechend ein gro er Bereich f r das dynamische Design reserviert werden Unter Ausnut zung des gesamten FPGAs einschlie lich des statischen Designs k nnten ca 130 Pipeline bausteine hine
17. Instantiierung sch tzt Beide Sprachen sind hohe Programmiersprachen die es erleichtern Hardware zu synthetisieren Die Synthese beschreibt wie der VHDL Quell text im Hardware Logik Schaltplan bzw in Netzlisten umgesetzt wird Wie das passiert wird in 46 nachvollziehbar gezeigt Ein sehr beliebtes Nachschlagewerk der VHDL Grammatik ist die VHDL Quick Reference Card 26 19 2 Grundlagen Die Sprache VHDL wird f r zwei Zwecke verwendet e Erstens f r die Beschreibung von Logikschaltungen dann spricht man von synthesef higem Quelltext e Zweitens f r die Beschreibung eines Simulationsmodells entsprechend nicht synthese f higem Quelltext Die Unterschiede liegen in Anweisungen die eine zeitliche Abfolge definieren Beispielsweise welche Latenzzeiten eine kombinatorische Logik hat wird von den tats chlich existierenden Logikgattern bestimmt so dass die Angabe einer Zeit nicht synthesef hig ist 2 2 3 Partitionelle Rekonfiguration Die bersetzung der Beschreibung in Hardware passiert in mehreren Schritten Da in die ser Arbeit Xilinx FPGAs verwendet werden wird die bersetzungskette anhand der Xilinx Entwicklungswerkzeuge aus dem System Entwicklungs Nachschlagewerk Development Sys tem Reference Guide 79 vereinfacht demonstriert 1 XST ist das Synthesewerkzeug das wie bereits beschrieben die Hardwarebeschreibung in eine Netzliste bersetzt 2 NGDBuild generiert aus der Netzliste ei
18. Instruktion auf alle Threads ausgef hrt wird m ssen im Fall unter schiedlicher Ausf hrungspfade alle durchlaufen werden D h der Quelltext aller Zweige 2 1 Grafikkarten als Rechenbeschleuniger muss ausgef hrt werden Auch dies gilt es zu vermeiden indem die Daten zusammenge tragen werden die von 32 Threads gleich behandelt werden k nnen Unter dem Begriff divergent branch l sst sich mehr dazu im Benutzerhandbuch finden F r weitere Praktiken der Optimierung sei auf das Benutzerhandbuch verwiesen 2 1 4 Programmiersprache OpenCL OpenCL ist CUDA recht hnlich mit dem Unterschied dass OpenCL keine Begrenzung der eingesetzten Ger te Plattform hat Genau darin liegt der gro e Vorteil in OpenCL geschriebe ne Kernelfunktionen laufen funktionell auf allen GPUs Prozessoren und eingebetteter Hard ware f r die es eine OpenCL Implementierung gibt ohne den Kernel Quelltext ndern zu m ssen Genau wie CUDA verf gt OpenCL ber eine Speicherhierarchie und ein Ausf h rungsmodell welches viele Threads in Gruppen aufteilt die ber gemeinsamen Speicher kom munizieren k nnen und auf der Hardware ausgef hrt werden 15 2 Grundlagen CUDA Begriff OpenCL Begriff deutsche Bedeutung Plattformmodell Hardwarekomponenten device host Stream Multiprozessor Threadprozessor compute device host compute unit CU processing element PE Die Grafikkarte bzw das Ger t Re
19. Screen Wochen f r die Datenaufnahme Mit dem beschleunigten Mikroskop werden nur noch Tage ben tigt was einer ca 20 fachen Beschleunigung entspricht Bild 1 3 Bildausschnitt einer Zellkultur mit hunderten Zellen Es versteht sich von selbst dass eine manuelle Auswertung der Zellbilder bei der enormen Zellenanzahl bzw Datenmenge nicht mehr m glich ist Aus diesem Grund werden Algorith men aus der Bildverarbeitung zur automatischen Analyse verwendet Um m glichst genau mit der manuellen Auswertung bereinzustimmen wurden Algorithmen identifiziert die sich be sonders gut eignen Besonders der Haralick Texturen Merkmal Algorithmus bietet sehr gute Ergebnisse Jedoch besitzt er den Nachteil hoher Rechenintensit t so dass einzelne Compu ter und sogar Rechen Cluster Monate ben tigen um die Bildmerkmale f r alle Zellen eines genomweiten Screens zu berechnen Schon mit dem alten Mikroskop existiert eine gro e Dis krepanz der Aufnahmezeit von Wochen und der ben tigten Zeit der Datenauswertung von Mo naten Die Auswertung der aufgenommenen Daten die auf einem Daten Cluster gespeichert werden wird weiter als Offline Prozessierung bezeichnet W re die Offline Prozessierung ebenso schnell wie die Aufnahmezeit die der Online Prozessierung entspricht k nnte auf die Speicherung der Daten verzichtet werden bzw es werden nur noch die Aufnahmen dauerhaft 1 4 Forschungsfragen gespeichert die von hohem Interesse sind Ve
20. clEnqueueNDRangeKernel queue kernel 1 NULL global_work_size local_work_size 0 NULL NULL status clEnqueueReadBuffer queue mem2 true 0 sizeof unsigned int MEGA h_mem2 0 NULL NULL Quelltext 5 4 Ausschnitt aus der OpenCL Demonstrationsanwendung des Anhangs Kompilierung In der ersten und in der zweiten Zeile wird in der Programm Struktur die einzige Kernelfunk tion extrahiert und eine Kommando Warteschlange erstellt Zeile vier bis acht legt Speicher im Host an und kopiert die Daten in den externen globalen Speicher der ML605 Steckkarte Die Funktion cicreateBuffer greift ber die Call Back Funktion auf die Methode DeviceMem memAllocate zu um einen Speicherbereich zu reser vieren Die Implementierung der Funktion clznqueuewWriteBuffer verwendet die Call Back Funktion devwriteRram um ber einen DMA Kanal die Daten in den externen Speicher zu kopieren Mit Zeile zehn bis zw lf werden die Zeiger der reservierten Speicherbereiche als Parameter der Kernelfunktion bergeben In der c1setkerne1arg Implementierung wird die Zeigeradresse mit der Call Back Funktion devwriteaddress in die Adressblock Komponenten als Basisadres se bertragen Jetzt wei die Pipeline an welcher Adresse die Daten der jeweiligen Kernel Funktionsparameter liegen und sie k nnen vom Adressblock fortlaufend adressiert werden um einen Datenfluss zu generieren In Zeile 14 und 15 wird die Gr e und Dimension der work items
21. der unro11 Anweisung im Clang Kompilierer entfaltet und aufgel st werden Durch die Existenz mehrerer Kernelfunktionen die versetzt auf den Speicher zugreifen kann eine Threadkommunikation erreicht werden Der bisherige bersetzungsprozess ist in der Lage Algorithmen zu bersetzen die Operatio nen auf Werten ohne Interaktion ausf hren Ein Beispiel sind die Intensit tskorrekturen einzel ner Pixel 90 5 4 Rahmendesign FPGA Schnittstellen Rahmendesign statisch Pipelinedesign dynamisch Speicher MEM Speicherverwaltungseinheit kontroller MemManager BA DMA PCle Einheit ee Engine PCleLink m LEDs Do Schalter Bild 5 19 Schnittstellen und Bestandteile des Rahmendesigns 5 4 Rahmendesign 5 4 1 Bestandteile In der Mitte des Bildes 5 19 sind die Bestandteile des Rahmendesigns angeordnet Rechts befindet sich die generierte Pipeline und links sind die FPGA Schnittstellen bzw die FPGA Xilinx Cores mit denen der FPGA verbunden ist Das Rahmendesign bernimmt die Aufgabe Knotenpunkt zwischen Speicher PCIe und Pipeline zu sein und bietet der Software Lauf zeitumgebung eine Kommunikationsschnittstelle ber die sich die Pipeline steuern l sst Die Bestandteile sind folgend weiter erl utert F r das Rahmendesign gibt es keine existierende Implementierung die genutzt werden kann Das Rahmendesign ist speziell f r die FPGA Karte und f r den OpenCL FPGA Kompilierer zu entw
22. dynamische Pipelinemodul platziert wird Au erhalb des Bereichs findet das statische Design die n tigen Ressourcen Bei der Wahl des Bereichs ist es das Ziel dem dynamischen Modul so viel FPGA Chip Fl che wie m glich zu bieten Die Verwendung von DPR bietet an die ICAP Schnittstelle Internal Configuration Access Port zu verwenden Mit ihr kann direkt ber den PCIe Bus ein dynamisches Modul in den FPGA geladen werden ICAP ist mit einer Programmierzeit von Millisekunden schneller als JTAG variabler als der Bootflash und ben tigt kein USB Programmierkabel 5 5 3 2 Pipeline Module mit DPR austauschen Zwischen der dynamischen Pipeline und dem statischen Rahmendesign m ssen Registerstufen existieren damit die Schnittstellensignale einen kurzen Pfad aufweisen ber Modulgrenzen hinweg kann das Zeitverhalten nicht optimiert werden Die betroffenen Signale liegen zwi 109 5 OpenCL zu FPGA bersetzer schen der Pipeline und der Kontrolleinheit im Speicherbus Im Abschnitt 5 3 6 3 wurde bereits darauf hingewiesen welche zus tzliche Logik zur Pipeline ben tigt wird Gemeint sind die Registerstufen im Speicherbus Bevor ein dynamisches Modul im FPGA ausgetauscht wird muss sichergestellt werden dass keine Logik im statischen Design in einen undefinierten Zustand kommen kann W hrend des Austauschs sind die Ausgabesignale des dynamischen Moduls f r kurze Zeit undefiniert und k nnen ein Fehlverhalten im statischen Desig
23. in einer etwas h heren Komplexit t Nach 61 4 Haralick Algorithmus GPU beschleunigt dem die Grauwerte J und J zu den gelesenen Daten der Position i und j nachgeschaut wurden m ssen die Grauwerte subtrahiert und der Absolutwert gebildet werden k Z J Der neu gewonnene Index k ist die Position im Zwischenergebnisvektor P x y k an dem die zuvor gelesenen Daten summiert werden 4 3 2 9 Test und Kontrollimplementierung Neben den Funktionen die den Algorithmus widerspiegeln gibt es weitere f r Testzwecke und f r die Ein Ausgabe Die Aufgaben der zus tzlichen implementierten Funktionen lauten 62 die Laufzeitmessung der einzelnen Kernelfunktionen die Berechnung der Datenraten auf den Grafikkartenspeicher in GBytes s die Berechnung der Rechengeschwindigkeit in GFLOPS das Z hlen des Speicherbedarfs auf der GPU um einen berlauf zu erkennen die Ergebnisausgabe in eine Datei eine Bildschirmausgabe als Fortschrittsanzeige die Fehlersuche um den Inhalt des Grafikkartenspeichers zu kopieren und darzustellen 4 3 GPU Implementierung 4 3 3 Profiling Mit Hilfe des Profilers konnte aus der bisherigen GPU Version eine schnellere GPU Version II implementiert werden Engp sse im Quellcode konnten erkannt sowie weitere Stellen f r Optimierungen identifiziert werden Viele verzweigende Ausf hrungswege und Synchronisa tionspunkte konnten mit nderungen in der Struktur optimiert und
24. k nnen aus diesen Gr nden nicht erreicht werden Unter optimistischen Vor aussetzungen wird in der Praxis eine Rechenleistung von ca 10 GFLOPs 10 von der theo retischen Rechenleistung erreicht Der Unterschied liegt in der geringenen Taktrate und der fehlenden M glichkeit alle Ressourcen f r die Rechnungen einzusetzten 6 2 3 Bandbreite Speicherkontroller Die Speicherbandbreite des DDR3 1066 Speichermoduls hat eine maximale Datenrate von 8 5 GBytes s In diesem Design wird die Benutzerschnittstelle ber die vereinfachte Schnitt stelle mit 133MHz statt 200MHz betrieben In jedem Takt k nnen 32 Bytes bertragen werden Die errechnete Speicherbandbreite liegt bei rund 4 GBytes s Damit die Pipeline nicht unterversorgt wird muss jede Transferleseeinheit mit Daten vom Spei cher versorgt sein Jede Transferleseeinheit 7 4 liefert taktweise 4 Bytes an die Pipeline Die maximale Anzahl von Transferleseeinheiten bestimmt sich zu T 32 Bytes pro Takt vom Speicher rd 6 2 4 Bytes proTrans f erleseeinheit undTakt OF Damit die Pipeline kontinuierlich ein Ergebnis pro Takt zu liefern kann d rfen maximal acht Transferleseeinheiten in der Pipeline verbaut sein Es d rfen auch mehr sein aber dann arbeitet die Pipeline nicht mehr optimal und die Berechnung setzt taktweise aus um auf Daten zu war ten Die gleiche Rechnung gilt ebenso f r die Transferschreibeinheiten um einen Datenstau zu vermeiden 6 2 4 Ressourcenbedarf des
25. niedrigere Taktrate daf r kann die Schaltung beliebig ver ndert werden 26 3 1 Co Prozessoren Der bersichtsbericht aus dem Jahr 2006 76 geht auf den Einsatz von FPGAs in der HPC ein Zu dieser Zeit wurden FPGAs als Co Prozessoren immer h ufiger eingesetzt da ihre Lo gikzellen zahlreicher und komplexer wurden um eine hohe Beschleunigung gegen ber den damaligen CPU zu erzielen FPGAs sind hervorragend f r Logik und Integeroperationen geeignet Aus wenigen Logikzel len lassen sich Addierer Vergleicher und andere arithmetische Integer Operatoren synthetisie ren Viele wissenschaftliche Algorithmen ben tigen Flie kommaberechnung Mit einer arith metischen Analyse die in jedem Teil der Berechnung die notwendige Bitbreite Genauigkeit bestimmt lassen sich die Flie kommaberechnungen in Festkommaberechnungen umwandeln Banerjee 21 konvertiert in seiner Arbeit mit Matlab Flie kommaberechnungen in Festkom maberechnung f r rekonfigurierbare Hardware Dies funktioniert so lange die Zahlendynamik gering bleibt Ein anderer Weg ist es Operatoren f r die Flie kommaberechnungen auf dem FPGA zu im plementieren Beauchamp 22 diskutiert den hohen Ressourcenverbrauch eines Flie komma operators in einem FPGA und verwendet die DSP Slices um einen Multiplikation Addition Operator zu beschreiben Lienhart entwickelte in seiner Dissertation 51 eine Bibliothek mit Flie kommaroperatoren die sich in ihrer Rechengenauigkeit par
26. oo 2 damou 59 4 3 2 Details der Implementierung 2 a a a 59 4 3 2 1 KopiederZellen o o sos s sos sos aworo c ea w ee 59 4 3 2 2 Lookup Tabellen noo aa a 59 4 3 2 3 Gepackte Co Matrix gezielt generieren 60 4 3 2 4 Normalisierte Co Matrix 2 2 a a 60 4 3 2 5 Merkmale erzielen durch Aufsummieren 60 4 3 2 6 Index abh ngige Merkmal Gleichungen 61 4 3 2 7 Zwischenergebnisvektor Px y k 2 22 2200 61 4 3 2 8 Zwischenergebnisvektor Px y k 2 22 2200 61 4 3 2 9 Test und Kontrollimplementierung 62 4 3 3 Profiling s io a a A AL AA 63 Inhalt 5 OpenCL zu FPGA bersetzer 65 Il Konzept u 4 Sn Ee aR a a ee a gw e 65 5 2 bersicht 4 5 5 u 20 e a ARA ehren 66 5 3 VHDL Kompilierer 2 22 2 on on nn 67 5 3 1 bersetzungskette 2 2 Co oo 67 5 3 2 Softwarearchitektur VHDL Backend 70 5 3 3 Parsebaum Generierung 2 2 Cm non nn 73 5 3 4 Parsebaum Analyse 020 000 000004 76 5 3 5 Parsebaum bersetzung 22 22 2 0 ee 79 5 3 5 1 SSA AST zu Block AST 2 2 2 2 nn nen 79 5 3 5 2 Zuordnung Instruktion zum VHDL Block 2 2 2 80 5 3 5 3 Verz gerungen in der Pipeline 81 5 3 6 Parsebaum VHDL Wandlung 2 22 2m on m nn 83 5 3 6 1 Generierung der VHDL Pipeline 2 222 2 20 83 5 3 6 2 VHDL Bl cke als Bausteine 2 2 2 on nenn 84 5 3 6 3 Zus tzliche Logik 2 2 2m on nn 89 5 3
27. vereinfachte Schnittstelle kann mit beliebigen Taktraten angesprochen werden Dualport FIFO verbinden die zwei Takt dom nen und machen den Datentransfer zwischen ihnen m glich Intern werden die Komman dos generiert und abgesetzt ohne dass man es an der vereinfachten Schnittstelle merkt 5 4 6 Speicherverwaltungseinheit Die Speicherverwaltungseinheit Bild 5 21 aus dem Rahmendesign hat die Kontrolle ber den DDR3 Speicher und bietet den anderen Schnittstellen einen Zugriff auf den Speicher an 95 5 OpenCL zu FPGA bersetzer Die ddr3 Verbindung ist ber die Speicherzugriffskomponente an den Speicherkontroller ange schlossen auf die alle Speicherzugriffe geroutet werden Die Signale zur PCle Einheit um dem Host das Lesen und das Beschreiben des Speichers zu erm glichen haben den Pr fix dma Die Transferbl cke aus der Pipeline sind ber einen Lesebus bus_rd bzw bus_ctrl_rd und ber einen Schreibbus bus_wr bzw bus_ctrl_wr an die Speicherverwaltungseinheit angeschlossen 96 e Die Signale ctrl_block_start und end bestimmen den Transfermodus der Speicherver waltungseinheit Die Signalquellen liegen in der Kontrolleinheit bzw in der Pipeline die dar ber Auskunft geben ob die Pipeline gerade am Rechnen ist Es gibt zwei Transfer modi den DMA Transfer und den BUS Transfer Die Hauptaufgabe der Speicherverwaltungseinheit ist den Transferbl cken und der PCIe Einheit Speicherzugriffe zu erm glic
28. wird die Dimension der work group und der work items zur Programmlaufzeit in der Kontrolleinheit des Rahmendesigns gespeichert bzw ver ndert Kontrollregister lesen und schreiben Auf das 32 Bit Kontrollregister im Rahmendesign kann mit den Methoden reaactri und writectri zugegriffen werden Die einzelnen Bits sind im Abschnitt 5 4 7 erl utert Basisadressen setzen Mit der Methode writead ress wird zur Programmlaufzeit die Basis adresse eines Zeigers in ein Register der Adresseinheiten geschrieben Der Zeiger wird der Kernelfunktion bergeben und anhand der Parameterposition einer Adresseinheit in der Pipe line zugeordnet Berechnung steuern Die Methode startcomputation liest und schreibt das Kontrollregister um das Rechenbit zu setzen Die Berechnung startet und das Rechenbit bleibt gesetzt solange die Berechnung l uft was mit der Methode iscomputationDone abgefragt werden kann Der Hostthread pollt auf das Rechenbit bis es sich selbstst ndig r cksetzt dann wenn die Berech nung fertig ist Pipeline Austauschfunktionen Die Methoden setconfigModePR isConfigModePR confi gureIcap und getprid sind f r den Austausch einer Pipeline verantwortlich Auf die Funk tionen wird sp ter im Abschnitt 5 5 3 2 bei der Erl uterung der Laufzeitumgebung genauer 103 5 OpenCL zu FPGA bersetzer eingegangen 5 5 1 4 Speichertabellen Klasse Der globale Speicher wird in der Software verwaltet
29. 0 Gerhard Lienhart Beschleunigung Hydrodynamischer Astrophysikalischer Simulationen mit FPGA Basierten Rekonfigurierbaren Koprozessoren Doktorarbeit Universitat Hei delberg 2004 Mingjie Lin Ilia Lebedev und John Wawrzynek OpenRCL Low Power High Performance Computing with Reconfigurable Devices International Conference on Field Programmable Logic and Applications Volume 0 458 463 2010 doi 10 1109 FPL 2010 93 LLVM LLVM Demo bersetzer Webanwendung URL http 11vm org 2004 Scott A Mahlke David C Lin William Y Chen Richard E Hank und Roger A Bring mann Effective compiler support for predicated execution using the hyperblock SIGMI CRO Newsl Volume 23 45 54 December 1992 doi 10 1145 144965 144998 Guillermo Marcus Acceleration of Astrophysical Simulations with Special Hardware Doktorarbeit University Heidelberg 2011 Guillermo Marcus Wenxue Gao Andreas Kugel und Reinhard Manner The MPRACE framework An open source stack for communication with custom FPGA based accelera tors In 2011 VII Southern Conference on Programmable Logic SPL Volume 605 Seite 155 160 IEEE April 2011 doi 10 1109 SPL 2011 5782641 Guillermo Marcus Gerhard Lienhart Andreas Kugel und Reinhard M nner On Buffer Management Strategies for High Performance Computing with Reconfigurable Hardwa re In 2006 International Conference on Field Programmable Logic and Applications i 131 Literatur 58 a4
30. 09 doi 10 1109 SASP 2009 5226333 A Putnam D Bennett E Dellinger J Mason P Sundararajan und S Eggers CHiMPS A C level compilation flow for hybrid CPU FPGA architectures In Field Programmable Logic and Applications 2008 FPL 2008 International Conference on Seite 173 178 sept 2008 doi 10 1109 FPL 2008 4629927 Daniel J Quinlan ROSE Compiler Support for Object Oriented Frameworks Parallel Processing Letters Volume 10 2 3 215 226 2000 Satnam Singh Computing without Processors Queue Volume 9 50 50 50 63 June 2011 doi 10 1145 1978542 1978558 Literatur 71 M A Tahir A Bouridane F Kurugollu und A A Amira A Amira Accelerating the computation of GLCM and Haralick texture features on reconfigurable hardware In A Bouridane Editor Image Processing 2004 ICIP 04 2004 International Conference on Volume 5 Seite 2857 2860 Vol 5 2004 doi 10 1109 ICIP 2004 1421708 72 David Tarditi Sidd Puri und Jose Oglesby Accelerator using data parallelism to pro gram GPUs for general purpose uses SIGOPS Oper Syst Rev Volume 40 325 335 October 2006 doi 10 1145 1168917 1168898 73 Sergios Theodoridis und Konstantinous Koutroumbas Pattern Recognition Third Edition Academic Press An imprint of Elsevier San Diego CA USA 2006 74 J L Tripp K D Peterson C Ahrens J D Poznanovic und M B Gokhale Trident an FPGA compiler framework for floating point algorithms In Field Progra
31. 2 Microsoft DirectX Developer Center URL http msdn microsoft com de de directx 1995 Just Another Hardware Description Language URL http www jhdl org 1997 Open SystemC Initative Defining and Advancing SystemC Standards URL http www systemc org home 1999 Impuls Accelerated Technologies URL http www impulseaccelerated com 2003 Microsoft Programming Guide for HLSL URL http msdn microsoft com en us library windows desktop bb509635 28v VS 85 29 aspx 2003 AMD s Close to the Metal URL http sourceforge net projects amdctm 2007 clang a C language family frontend for LLVM URL http clang 11vm org 2007 AMD Developer Centrale URL http developer amd com sdks amdappsdk downloads pages default aspx 2009 Apple OS X Lion Technical specifications URL http www apple com macosx specs html 2009 NVIDIA Developer Zone URL http developer nvidia com opencl 2009 IBM developerWorks OpenCL lounge URL https 127 Literatur 13 14 15 16 17 18 19 20 21 22 23 128 www ibm com developerworks mydeveloperworks groups service html communityview communityUuid 80367538 d04a 47cb 9463 428643140bF1 2010 Intel OpenCL SDK Intel Software Network URL http software intel com en us articles vcsource tools opencl sdk 2010 Conformt OpenCL Products URL http www khro
32. 4 2 3 CHIMPS Compiling High level Languages into Massively Pipelined Systems CHiMPS entwickelt von Xilinx und der Universit t Washington 68 vereinfacht HPC Programmierern den Umgang mit FPGAs ohne weitere FPGA Kenntnisse anlernen zu m ssen Die Idee ist es ein FPGA in einen CPU Sockel einer Mehrsockel Hauptplatine zu setzen Als Entlastung der CPU l sst sich C Quelltext in eine Pipeline f r den FPGA bersetzen und ausf hren Der FPGA und die CPU teilen sich den gleichen Adressraum D h der FPGA arbeitet mit gleich hoher Speicherband breite und mit sehr geringer Latenzzeit vergleichbar wie die der CPU Auch Interprozesskom munikation zwischen CPU und FPGA ist sehr effizient m glich Bild 3 4 zeigt ein ANSI C Beispiel das in die Zielsprache CHiMPS Target Language CTL bersetzt wird CTL unterst tzt 42 Assemblerbefehle zu denen jeweils ein VHDL Block exis tiert auf die im letzten Schritt der bersetzung die Befehle abgebildet werden Neben den arithmetischen Instruktionen gibt es wenig andere die den Datenfluss beeinflussen bsp if else Konstrukte bzw or Schleifen Enter foo W X Y Z reg u v s t g int foo int x int x reg fl 2 int y int z dis add x y u 2 sub w Ze v gt Teen 3 add zy Vi s int y w 2 een 4 add y z fl int t u amp y 2 5 add u l E int q t s v 6 sub s v _f2 return q de O Gy EL q Exit foo q a C Quelltext b CTL Instruktionen c VHDL Bl
33. 605 105 aur vn 5 OpenCL zu FPGA bersetzer anlegt Erfolgt beim Anlegen keine Exception existiert die Beschleunigerkarte Beim clcreateContextFromType Aufruf wird eine Kontext Struktur angelegt die den Bezug zum OpenCL Ger t h lt und bei der Verwendung der meisten OpenCL Funktionen mit ange geben werden muss Der Standard sieht vor viele OpenCL Ger te in einen Kontext zusam menzufassen Die vereinfachte Implementierung dieser Arbeit st tzt sich auf einem Kontext mit einem Ger t 5 5 2 3 Kernelfunktion bersetzen In OpenCL wird entweder der Kernelfunktion Quelltext zur Programmlaufzeit bersetzt oder es wird eine bersetzte Kernelfunktions Repr sentation aus einer Datei geladen Der Quelltext abschnitt 5 3 zeigt diesen Vorgang const unsigned char fileContent const size_t fileSize bool binary if binary program clCreateProgramWithBinary context 1 amp device amp fileSize amp fileContent NULL amp status else program clCreateProgramWithSource context 1 const charxx amp fileContent amp fileSize amp status status clBuildProgram program 1 amp device NULL NULL NULL Quelltext 5 3 Ausschnitt aus der OpenCL Demonstrationsanwendung des Anhangs Kompilierung Die Implementierung der Funktion cicreateProgramWithBinary liest eine bereits bersetzte Kernelfunktion ein wenn diese beim Programmstart bergeben wurde Wird dem Programm Quelltext einer Kernefun
34. 7 Fazit und Ausblick Rechenzeit Die Illustration zeigt dass die optimierte Version mit drei Tagen Rechenzeit bereits einen wichtigen Teil der Beschleunigung erreicht Mit dieser Beschleunigung ist es den Biolo gen m glich mehrere Datens tze in einer Woche zu analysieren Der Einsatz der Grafikkarte reduziert die Wartezeit von Tagen auf zwei Stunden bzw 45 Minuten Diese Beschleunigung ist ma gebend daf r dass mehrere Tests am selben Tag durchgef hrt werden k nnen In der jungen Disziplin der Systembiologie mit ihren vielen unerforschten Bereichen ist es au eror dentlich wichtig schnell Ideen und Ans tze auf deren Ergebnisse pr fen zu k nnen um die besten Ans tze aufzusp ren Der Einsatz der GPU tr gt ma gebend zu einem schnelleren Er kenntnissgewinn bei Die Online Prozessierung hat die Anforderung gestreamte Daten in Echtzeit verarbeiten zu k nnen an neue Gegebenheiten anpassbar zu machen und leicht programmierbar zu sein OpenCL kombiniert mit FPGAs auf einer Beschleunigerkarte erf llen alle Anforderungen OpenCL ist eine anerkannte weit verbreitete und leicht zu erlernende Sprache FPGAs werden h ufig f r Echtzeitanwendungen eingesetzt und lassen sich durch Neuprogrammieren mit an deren Anwendungen ersetzen Die in dieser Arbeit demonstrierte OpenCL Entwicklung erf llt den Zweck der Online Prozes sierung aus den Anforderungen Einfache Bildverarbeitungsalgorithmen k nnen in Kernel funktionen umgesetzt werd
35. Algorithmen auf die GPU zu portieren besteht in der Programmie rung der drei Shadereinheiten Die Schwierigkeiten bestanden darin e den Algorithmus an die grafische Pipeline anzupassen Beispielsweise waren die Daten strukturen auf grafische Primitive begrenzt e nur ber die grafischen APIs programmieren zu k nnen Dies erfordert viel Wissen ber die Entwicklung von Grafikanwendungen was gar nicht das Ziel ist e keine Freiheiten zu haben beliebig in den Grafikkartenhauptspeicher schreiben zu d r fen Der Datenfluss einer grafischen Pipeline ist gegeben e die Rechenleistung der Shadereinheiten nicht optimalen nutzen zu k nnen weil die Speicherbandbreite nicht ausreicht Zwei wesentliche Entwicklungen die auf den APIs aufsetzen beseitigten bzw reduzierten die Schwierigkeiten der allgemeinen GPU Programmierung besser bekannt als GPGPU Program mierung General Purpose Grafics Processing Unit Sh und Brook bieten eine einfache Pro grammierumgebung ohne Kenntnisse f r Grafikprogrammierung haben zu m ssen und ohne Einschr nkungen in den Datenstrukturen Ein Backend bersetzt den Quelltext in die Shader sprachen Sh 59 ist eine Metaprogrammiersprache die 2009 von RapidMind abgel st wurde BookGPU 24 stell ein Programmierparadigma vor das aus Streams Kernels und Reduktio nen besteht Mit dem kurzlebigen Projekt Close to Metal 7 Anfang 2007 hatte der Grafikkartenhersteller Ati sp ter AMD neben
36. Furthermore OpenCL is a portable language between several computing architectures If an algorithm writ ten in OpenCL is too complex for the FPGA compiler due to the existing restrictions then a compilation for the GPUs in the offline processing environment is still possible Keywords CUDA Co Processor Compiler DPR FPGA GPGPU haralick texture fea tures hardware syntheses highthoughtput microscopy HPC LLVM OpenCL pipeline generator reconfigurable hardware VHDL IH Kurzbeschreibung Wenn Bilder von einem Mikroskop mit hohem Datendurchsatz aufgenommen werden m ssen sie wegen der gro en Bildmenge in einer automatischen Analyse prozessiert werden Es gibt zwei Ans tze die Offlineprozessierung die Verarbeitung der Bilder auf einem Cluster und die Onlineprozessierung die Verarbeitung des Pixelstroms direkt von den Sensoren F r die Bew ltigung der Bilddaten in der Offlineprozessierung setzt diese Arbeit auf Grafik karten und demonstriert eine Implementierung der Haralick Bildmerkmalerkennung in CUDA Dabei wird der Algorithmus um den Faktor 1000 gegen ber einer CPU L sung beschleunigt Dies erm glicht den Biologen weitere Tests und einen schnelleren Erkenntnisgewinn Die Onlineprozessierung setzt auf FPGAs die sich mit den Sensoren elektrisch verbinden las sen Dabei soll sich der Algorithmus dem Bedarf der Biologen entsprechend ver ndern lassen Diese Arbeit zeigt die Entwicklung eines OpenCL FPGA Kompilierer Protot
37. GA bersetzer aufweisen Das Problem wird in Bild 5 12 verdeutlicht Addr0 TransRdO Verz gerung Latenzsumme yo Datenpfad 9 Addr1 TransRd1 Addr2 TransRd2 Berechnungzeit Addr3 TransWrO Bild 5 12 VHDL Pipeline mit synchronisierten Pfadlaufzeiten Links befinden sich die nummerierten Block TransRd und BlockAddr Komponenten von de nen der Datenstrom gelieft wird An dieser Stelle haben sie in der Summe Null Taktverz ge rung zu sehen an der 0 an den Pfadausg ngen der Komponenten Die BlockComp Kompo nenten O und 1 haben unterschiedliche Berechnungszeiten erkennbar an der Taktzahl in den Klammern BlockComp2 hat das Problem dass an dessen Eing ngen die Daten um einen Takt verz gert ankommen w rden Aus diesem Grund besitzen die Komponenten verz gerbare Da teneing nge deren Daten sich um beliebige Takte verz gern lassen in diesem Fall um einen Takt siehe das blauen K stchen Nicht nur unterschiedliche Berechnungszeiten k nnen un terschiedliche Latenzzeiten auf den Datenpfaden erzeugen sondern auch eine verschachtelte Anordnung der VHDL Bl cke wie es mit dem BlockComp3 der Fall ist Der obere Daten zweig weist bereits eine summierte Latenzzeit von neun Takten auf wegen der erforderlichen Synchronit t muss der untere Datenpfad um neun Takte verz gert werden Der Algorithmus der die Latenzzeiten aller Datenpfade mit Verz gerungen synchronisiert ist mit den Hilfsmetho
38. GB 1 800 Nein Ja lesen schreiben Host Constant 64KB 1 800 Nein Ja nur lesen Host Texture global 1 800 Nein Ja nur lesen Host Tabelle 2 1 Unterschiedliche Speicher der GPU Architektur mit Eigenschaften Daten auf reservierte Bereiche im globalen Speicher ausgelagert werden der sich lokaler Spei cher nennt Shared Speicher Dieser Speicherbereich dient zum Datenaustausch unterschiedlicher Threads innerhalb eines CUDA Blocks Eine Threadkommunikation in unterschiedlichen CUDA Bl k ken ist nicht m glich da sie auf unterschiedlichen SMs ausgef hrt werden k nnen Innerhalb des CUDA Blocks m ssen die Speicherzugriffe auf den Shared Speicher synchronisiert wer den da auch die Ausf hrungsreihenfolge der Threads zuf llig ist Beispiel Jeder Thread wartet am Synchronisationspunkt auf alle anderen damit die Threads die Daten lesen so lange war ten bis die Threads die die Daten schreiben fertig sind Erst mit einer Synchronisation kann die G ltigkeit der Daten garantiert werden Globaler Speicher Dies ist der Massenspeicher ber den die GPU und der Host Daten aus tauschen k nnen Er besitzt die gr te Latenzzeit von 400 800 Taktzyklen und ist mit einem zweistufigen Cache versehen Sind die Daten bereits im Cache vorhanden kann sich die La tenzzeit bis auf einen Taktzyklus reduzieren je nachdem ob die Daten im L1 oder L2 Cache liegen Konstanter Speicher Nur der Host kann den konstanten Speicher schreiben Die Kernelfunk ti
39. Grafikkartenspeicher kopiert werden m ssen Ebenso wird die Grafikkarte erst ab einer gewissen Masse an Daten die blockweise verarbeitet werden effizient D h es muss gewartet werden bis ein Block mit Daten gef llt ist dieser dann bertragen berechnet und wieder zum CPU Speicher zur ck kopiert ist In CUDA gibt es Pipelinetechniken gleichzeitig Daten zu bertragen und Ker nelfunktionen auszuf hren um die Wartezeiten zu reduzieren Je nachdem wie viel Zeit die Echtzeitanforderung er brigt k nnen GPUs eingesetzt werden Die Entwicklungszeiten f r CUDA Programme sind vergleichbar mit denen f r die CPU FPGA Im Gegensatz zu den GPUs verarbeiten FPGAs die Daten als Strom von Einzeleleme neten Vorteile der gestreamten Verarbeitung in einer Pipeline sind dass e die Latenzzeiten kurz sind Sobald Daten bereit liegen k nnen sie verarbeitet werden Dies f hrt zu einer Echtzeitf higkeit da die Ergebnisse in vorhersagbarer Zeit Latenz zeit der Pipeline plus bertragungszeit produziert werden e die Daten f r die Verarbeitung nicht zwischengespeichert werden m ssen im Vergleich zur blockweisen Verarbeitung Die Pipelineverarbeitung ben tigt keinen bzw wenig Zwi schenspeicher wenn man Register nicht zu den Speichern z hlt e die Pipeline parallel arbeitet und im FPGA an neue Rechenanforderungen angepasst wer den kann 29 3 Stand der Technik Wie bereits erw hnt eignen sich FPGAs besonders gut f r I
40. HM i r DH H T al N II N Block RAM DSP Teilst ck 1 0 Block IOB Logikzelle LZ Bild 2 5 Bestandteile des FPGAs e Die Logikzellen sind einzelne Elemente die durch Programmierung unterschiedliche Logikfunktionen beherrschen CLB configureable logic block Meist bestehen sie aus einer LUT look up table was nichts anderes als ein SRAM Speicher ist Der CLB kann als Speicher oder als Logikelement benutzt werden indem ber die Adressierung im Speicher Ausgangswerte einer Wertetabelle abgelegt werden So kann ein Logikgatter imitiert werden das die Addressleitungen als Eing nge und das Datenwort als Ausg nge verwendet 18 2 2 Rekonfigurierbare Hardware e Der Blockspeicher Block RAM ist ein fest auf dem FPGA vorgesehener Speicher um eventuell die kostbarere Ressource der Logikzellen einzusparen Die Block RAMs besit zen zudem zwei Ports die mit unterschiedlichen Taktraten angesprochen werden k nnen e Wegen der Leistung werden DSP Teilst cke DSP slices auf dem FPGA integriert die Aufgaben aus dem Bereich der digitalen Signalprozessoren bernehmen k nnen Sie bestehen aus Hardware Multiplizierer und Addierer die mit einer geringeren Verz ge rung und einer dennoch hohen Taktrate arbeiten Die Verwendung der Addierer oder Multipizierer aus den DSP slices spart viele CLBs ein aus denen die Arithmetik sonst zusammengesetzt werden m sste e Die Ein und Ausgabebl cke IOB sin
41. INAUGURAL DISSERTATION zur Erlangung der Doktorw rde der Naturwissenschaftlich Mathematischen Gesamtfakult t der Ruprecht Karls Universit t Heidelberg vorgelegt von M Sc Markus Gipp aus Mannheim Tag der m ndlichen Pr fung 7 Mai 2012 Online und Offline Prozessierung von biologischen Zellbildern auf FPGAs und GPUs Betreuer Prof Reinhard M nner Prof Holger Fr ning F r meine liebe Sabine Abstract This work is about images from a high throughput microscopy Because of the huge amount of images the analysis has to be processed in an automatic way There are two approaches the offline processing image processing on a computer cluster and the online processing image processing of the streaming data from the sensors To cope with the image data in the offline processing this work uses graphics cards as accele rators and shows an CUDA implementation of the Haralick Texture Features The accelerated version achieves a speed up of around 1000 against a CPU solution This offers the biologist the opportunity to do more tests and leads to a faster gain of knowledge The online processing uses FPGAs which are easy to connect to the sensors The biologists ha ve the constraint to adapt the algorithm for their future needs This work presents a developed OpenCL to FPGA compiler prototype The algorithm can be written in OpenCL and compi led for the FPGA without any knowledge of any hardware description language
42. Mitarbeitern und der entspannten als auch kreativen Atmosph re sehr wohl gef hlt Danke auch an die Korrekturleser Heike Hildenbrand und Thomas Haas sie machten meine S tze dieser Arbeit lesbarer und verst ndlicher Besonderer Dank geht an meine Frau und unsere Familien die mir in der schwierigen Zeit durch die Promotion stets Halt gaben IX Inhalt Abstract Kurzbeschreibung Abk rzungen Inhalt 1 Einf hrung und Ziele des Viroquant Projekts 1 1 Orientierung im Viroquant Projekt 2 2 2m nn nn nn 1 2 Hochdurchsatzmikroskopie 2 22 22 0 nn nn nn 1 3 Beschleunigte Bildverarbeitung 2 2 2m on a 1 4 Forschungsfragen 2 2 2 2 m nn nn nn 2 Grundlagen 2 1 Grafikkarten als Rechenbeschleuniger 2 2 2 Cr m nn nn 2 1 1 Geschichtliche Entwicklung 2 2 2m En m nn 2 1 2 Heutige GPU Architektur 2 2 2 2m on nn 2 1 3 Programmiersprache CUDA 2 En En 2 1 4 Programmiersprache OpenCL o 2 2 Rekonfigurierbare Hardware e 2 2 1 Aufbau eines FPGAs 2 2 on nn 2 2 2 Beschreibungssprache VHDL 2 2 En En nn nn 2 2 3 Partitionelle Rekonfiguration 2 2 2 m on nn 2 3 Kompiliererentwicklung 2 CC nn nn 2 3 1 Frontend soe zu 2a an an A a aboa wog we aos 2 3 2 Backend o d e e we ah a aaa a ws 3 Stand der Technik 3 1 Co Prozessoren s ss sosro nn 3 1 1 Beschleunigung s gt s s s s asaca a asa nn n e e 000008 SANZ GPGPU eo 20a a a a Re
43. Programmierer keine Hardwarekenntnisse haben keine Simulation mehr ausf hren und das Programm bersetzt fehlerfrei mit wenig FPGA Ressourcen und hoher Designfrequenz Mittlerweile gibt es sehr viele C hnliche Sprachen die Entwicklungszeit und die Komplexit t der Hardwarebeschreibungssprachen vermeiden oder verringern Der englische Wikipediaein trag Hardware description language 15 wurde in der Vergangenheit stets aktuell gehalten und beinhaltet eine Liste g ngiger Hardwarebeschreibungssprachen mit Kommentaren ber deren Herkunft bzw deren Eigenschaften Zur Zeit sind 31 Sprachen gelistet darunter die be kannten Sprachen Impulse C von Impuls Accelerated Technologies 5 JHDL von der Brigham Young Universit t 3 und SystemC von ARM CoWare CynApps und Synopsys 4 ber die Liste hinaus gibt es viele weitere Sprachen die global nicht bekannt wurden wie z B CHDL von der Universit t Mannheim 35 3 Stand der Technik Die Sprachen auf die hier weiter eingegangen wird sind in serielle parallele und architek tur bergreifende Sprachen f r den FPGA gegliedert Es ist g ngig Hardware Sprachen auf existierende Software Sprachen aufzusetzen Seriell parallel und architektur bergreifend be zieht sich auf die urspr nglich Sprache 3 4 2 Serielle C Sprachen f r den FPGA 3 4 2 1 Handel C Handel C wurde 2009 von Mentor Graphics in ihr Synthese Softwarepaket aufgenommen Die Sprache ist f r hardwarekundige Progra
44. Re ee TI Vil XIV 23 23 23 24 XI Inhalt 4 XII 3 1 3 FPGA e We au Ale a a dad dd 26 SLA Vergleich a fe ae a 2a Siam a ana hehe 27 3 2 Haralick Texturen Bildmerkale 22 22 on on nen 31 3 2 1 Beschleunigende Vorarbeiten 2 2 a En m rn nen 31 3 2 2 Fazit f r eine Beschleunigung 2 2 KL m rn nn nen 32 3 3 Kompiliererentwicklung 2 Cm nn nn 32 3 3 1 bersicht Kompilierer Bauk sten 22222 222m 33 3 3 2 MALL Mies Son a ie a ioa 33 3 4 Software Hardware Kompilierer 2 2 on on nn 35 3 4 1 bersicht ao e en a 35 3 4 2 Serielle C Sprachen f r den FPGA aoaaa nn nn nen 36 342 1 Handel o e eee Ra Kar de Pe eS 36 S422 TRIDENT coc aa aan wem en 37 34 2 3 CHIMPS 2 2 Con nn 39 3 4 3 Parallele C Sprachen f r den FPGA 40 3431 FEUDA o 2 2a 4 4000 8 e eee nn bebe iss 40 343 2 VOBEnNREL s fee Be Be eo ae en 41 3 4 4 Architekturiibergreifende C Sprachen f r den FPGA 43 344 1 OpenCL cuidas adas Boe Roe Roe ES 43 3 4 4 2 Microsoft Accelerator 2 2 ee 44 3 4 5 Fazit der FPGA Sprachen 2 2 2 on on nen 45 Haralick Algorithmus GPU beschleunigt 49 4 1 Untersuchung des Haralick Algorithmusses 49 4 1 1 Co occurrence Matrizen 2 2 22 m 2 nn 49 4 1 2 Haralick Textur Merkmale 22 Co oo nn 51 4 2 CPU Implementierung 2 2 2 2 a a 55 4 3 GPU Implementierung 2 2 e 55 4 3 1 Parallele Struktur s s Co
45. Soll hei en die Software bestimmt beim Anlegen eines Speicherbereichs welche Adresse vergeben wird Die Singleton Klasse DeviceMem von der es nur eine Instanz gibt speichert alle verwendeten Speicherbereiche mit Adresse und Gr e in einer Liste Mit der Methode bool allocate void pointer unsigned int length wird innerhalb der Liste ein ungenutzter Speicherbereich der entsprechenden L nge gesucht und im Erfolgsfall wird der Zeigerparameter mit einer Adresse gesetzt Die Speicherbereiche werden in der Liste nach der Adresse sortiert um nicht verwendete Speicherbereiche leichter berechnen zu k nnen Der Algorithmus sieht im Fall eines fragmentierten Speichers vor die erste passende L cke zu verwenden Falls f r die angeforderte Speichergr e kein freier Be reich zu finden ist wird ein Nullzeiger und false zur ckgegeben Die Methode bool free void x pointer l scht den zugewiesenen Speicherbereich aus der Liste so dass dieser wieder zur Verf gung steht Weiter besitzt die Klasse DeviceMem eine statische ffentliche Zugriffsmethode zur In stanz eine Methode um die Liste zu l schen um den gesamten Speicher freizugeben und f r Debugzwecke eine Ausgabemethode um alle aktuell belegten Speicherbereiche darzustellen 5 5 2 OpenCL Funktionen 5 5 2 1 Implementierung der OpenCL Funktionen Eine OpenCL Implementierung sieht vor alle Funktionen aus dem Standard 36 zu unter st tzen In dieser Arbeit wurde eine Unter
46. ads existieren die abwechselnd warten und berechnen k nnen Ziel ist es die Auslastung der Be rechnungseinheiten zu optimieren 57 4 Haralick Algorithmus GPU beschleunigt Initialisierungsteil Kernelfunktion OA Kernelfunktion OB Kernelfunktion OC Kernelfunktion OD erstelle Index Grautontabellen setze Co Matrizen auf den Wert Null berechne die Co Matrizen normalisiere die Co Matrizen Teil 1 Lesen von den Co Matrizen Kernelfunktion 1A Kernelfunktion 1B Kernelfunktion IC Kernelfunktion 1D Kernelfunktion 1E Kernelfunktion 1F berechne fi berechne fs berechne fo berechne P berechne P xy berechne Py y Teil 2 Lesen von P Kernelfunktion 2A Kernelfunktion 2B Kernelfunktion 2C berechne mean berechne var berechne H Teil 3 Lesen von P Kernelfunktion 3A Kernelfunktion 3B Kernelfunktion 3C Kernelfunktion 3D x y berechne A berechne fi berechne MacP x y berechne fio Teil 4 Lesen von P Kernelfunktion 4A Kernelfunktion 4B Kernelfunktion 4C berechne fs berechne fg berechne f7 Teil 5 Lesen von den Co Matrizen Kernelfunktion 5A Kernelfunktion 5B Kernelfunktion 5C Kernelfunktion 5D berechne f3 mittels P berechne f4 berechne HXY1 fi2 lese von P berechne HXY2 f 3 lese nur von P Tabelle 4 2 Liste aller Kernelfunktionen in der Ausf hrungsreihenfolge Linke Spalte bein haltet den Funktionsnamen Rechte Spalte beschreibt die Berechnung 58 4 3
47. ag zur besse ren Klassifikation der folgenden linearen Diskriminanzanalyse leistet was eine aufwendige Berechnung unn tig macht Die erstellten Co Matrizen sind mit P gekennzeichnet Alle an deren Definitionen werden weiter unten eingef hrt f h B fa De Js f fo fio i fu f Y k Fsava P y k k 2 2Ng EX Pis y k log Pi y k a Ng hd Pa j 108 Ps j i 1 j Ng 1 Ng 1 L Fr E ey k 0 Ng 1 2 Ps y k log P x y k fo HXY1 H y 1 exp 2 0 HXY2 Fol 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 10 4 11 4 12 4 13 51 4 Haralick Algorithmus GPU beschleunigt Die Definitionen zu den Bildmerkmalen sind in den Gleichungen 4 14 bis 4 21 aufgelistet Ng Ng Prty k LL Punk i j k 2 3 2Ng 2 4 14 i l j Ng Ng P LL el ae aa 4 15 I 1 J Ng Pi L Pij 4 16 J Ng w 8P 4 17 g 1 Ng o P e 8 1 4 18 g 1 Ng Ng HXY1 SE Pos log P 4 19 i l j Ng Ng HXY2 n Po Log PP 4 20 i l j Ng H P g log P e 4 21 g 1 Die meisten der gezeigten Bildmerkmale haben eine visuelle Bedeutung Bild 4 2 zeigt die gleiche Zelle einmal mit zus tzlichem Rauschen a und einmal als weichgezeichnetes Bild b F r beide Zellbilder sind die Bildmerkmale Contrast 4 2 Inverse Different Moment 4 5 und Entropy 4 9 berechnet und in der Tabelle
48. ametrisieren l sst um Hard ware Ressourcen gezielt zu sparen Weitere Entwicklungen von Flie kommabibliotheken fin det man unter 23 2002 und 77 2010 demonstriert an Satellitenaufnahmen mit dem k Means Algorithmus Xilinx bietet heute mit dem Core Generator ein bequemes Programm an Operatoren f r die Flie kommaberechnungen zu erstellen 84 Aufbauend auf seiner Bibliothek entwickelte Lienhart einen Pipelinegenerator 50 Mit einer Sprache bestehend aus mathematischen Ausdr cken lassen sich die Operatoren konfigurieren und zu einer Pipeline verschachteln Bei der Generierung der Pipeline werden automatisch alle n tigen Verz gerungstufen eingesetzt In der Arbeit von Marcus 55 wurde der Pipelinege nerator mit Formeln eines numerischen L sungsverfahrens genannt SPH Smoothed Particle Hydrodynamics demonstriert um astronomische Ereignisse mit gegl tteter Teilchen Hydro dynamik zu simulieren 3 1 4 Vergleich Neben den FPGAs haben sich die GPUs als Co Prozessoren etabliert Welcher der geeignete f r eine Beschleunigung ist h ngt von der Anwendung ab Auch der Cell Prozessor und Pro gramme die mit den SSI Befehlen auf der CPU parallelisiert wurden haben ihren Stellenwert im Beschleunigungssegment Es folgt eine Untersuchung der CPU der GPU und des FPGAs mit Blick auf deren Einsatzf higkeit Energieeffizienz Kosten Rechenleistung und Entwick lungszeit In den folgenden Abschnitten wird auf die Bewertung eingegange
49. asst 384 Bit die kleiner ist als die der Vorg ngerarchitektur Sie besitzt aber wegen der h heren Transferrate von 1848 MHz insgesamt eine h here Datentransferrate von 177 4GBytes s Die Speichertransfers werden von einem Zwei Level Cache System unterst tzt das Zugriffszei ten zum 1 5 GByte gro en Arbeitsspeicher reduziert Der 786 kByte gro e Level Zwei Cache L2 Cache befindet sich neben den Speicherkontrollern auf der Chip Ebene w hrend der L1 Cache sich in den SMs befindet Fr here GPU Architekturen besa en kein Cache System bzw nur eines f r Leseoperationen In der GF100 Architektur ist das Cache System f r Lese und Schreiboperationen ausgelegt und ein Protokoll h lt die drei Stufen L1 L2 und Speicher ko h rent Die Stream Multiprozessoren SM haben eine zentrale Bedeutung in der Architektur Auf ihr werden die Softwareprozesse die aus vielen Threads bestehen k nnen ausgef hrt Die Be standteile eines SMs sind in Bild 2 2 gezeigt 2 1 Grafikkarten als Rechenbeschleuniger 32786 Register 64 kByte geteilter Speicher L1 Cache Bild 2 2 Blockschaltbild eines 16 Stream Multiprozessors aus der Fermi GPU Architektur von NVIDIA 62 Threadprozessoren TP TPs auch als CUDA Cores bezeichnet bestehen aus einer arith metischen Einheit ALU und einer Flie komma Einheit FPU die in mehrere Pipelinestufen zerlegt sind Sie ist die kleinste Recheneinheit die Instruktionen und Operationen ausf hren kan
50. at ihre ei gene Parametrisierung und somit auch ihren eigenen Parseralgorithmus der die Anzahl der Parameter und zus tzlich verwendete Schl sselworte kennt Die meisten Instruktionen spei chern ein Ergebnis in einem neuen Register ab F r jedes Ergebnisregister wird eine Instanz von RegisterValue angelegt die vom value abgeleitet ist Die value Instanzen sind die Zweige 73 5 OpenCL zu FPGA bersetzer im AST die die Instruktionsknoten verbinden linkInstruction findet im AST die Quellregister die von der aktuellen Instruktion verwen det werden und verlinkt sie mit entsprechenden Zeigern Ein Quellregister kann entweder das Ergebnisregister Registervalue einer Instruktion oder ein Parameterregister Parametervalue aus dem Funktionskopf sein dessen Instanzen die sourceattrib Klasse angelegt hatte Wegen der zwei m glichen Quellen wird auf die abstrakte Basisklasse value verwiesen Die sourceParser Klasse bietet viele Suchfunktionen Eintr ge aufsteigend searchInstFwa oder absteigend searchinstRev im SSA AST nach allen m glichen Suchkriterien zu su chen Die Softwarearchitektur ist modular angelegt damit jederzeit weitere Befehle durch Ab leiten der Basisklasse in den Funktionsumfang aufgenommen werden k nnen Spezialisierung LLVM IR Befehl Bedeutung InstCall call Funktionsaufruf zur Bestimmung der Threadindi zes der OpenCL Kernelfunktion InstCmp icmp Vergleich mit parametrisiertem O
51. aten ber den Speicherbus anzufordern die als n chstes in der Pipeline ben tigt werden Die Daten werden in einem FiFo zwischengespei chert aus dem die Pipeline taktweise Datenwerte f r Berechnungen entnimmt BLOCK_NUM BlockTransferRd clkUser rst acalc_fin acalc_addr acalc_rdy acalc_next acalc_burst bus_ctrl_rd_done acalc_valid G ltigkeits bus_rd_burst Puffer bus_ctrl_rd_sel FIFO pus rd addr bus_rd_data bus_rd_addr_valid bus_rd_data_valid data_out bus_rd_data_sel data_rdy data_next data_stall Bild 5 15 Schematische Darstellung des VHDL Transferleseblocks Oben Generic Ports und unten die Entity Ports e Der Genericparameter BLOCK_NUM wird f r den Datenbus zur Block Identifikation ben tigt 85 5 OpenCL zu FPGA bersetzer e Die Zustandsmaschine verfolgt das Ziel den Datenpuffer stets gef llt zu halten ber die acalc Schnittstelle fordert sie eine Adresse an und initiiert ber die bus Schnittstelle einen Speicherzugriff e Nach einer gewissen Latenzzeit kommen die Daten auf mehrere Takte verteilt mit einer Wortbreite von 256 Bit an Es kann oft vorkommen dass nicht alle angeforderten Daten auch von der Pipeline ben tigt werden Deswegen gibt es den G ltigkeitspuffer der alle 32 Bit Werte als g ltige oder als ung ltige Daten maskiert Ung ltige Daten werden nicht in dem Datenpuffer aufgenommen e Die data Schnittstelle erm glicht der Pipeline Daten aus dem Datenpuffer zu entneh me
52. atzhalter und gewinnt an Bedeutung wenn es ein OpenCL Frontend gibt das Shared Speicher unterst tzt 76 5 3 VHDL Kompilierer Sie sollte analysieren wie der Shared Speicher genutzt wird und man k nnte diese Gebrauchs m glichkeiten unterscheiden Der Shared Speicher 1 wird nicht benutzt 2 wird als Puffer f r Speicherzugriffe auf den Hauptspeicher benutzt 3 wird verwendet um Daten darin zu sortieren um lineare Hauptspeicherzugriffe zu er zielen 4 wird f r die Threadkommunikation innerhalb einer work group benutzt Auch ohne den Shared Speicher unterst tzt der jetzige Kompilierer den zweiten Punkt weil in der Pipeline Datenpuffer existieren um eine kontinuierliche Datenversorgung aufrecht zu erhalten analyseBranchPart identifiziert m gliche Verzweigungen im Quelltext e if else Verzweigung Sie ist bisher nicht implementiert Wenn sie implementiert wird m ssen der is Zweig und der eise Zweig gleiche Latenzzeiten gleich viele Instruktio nen besitzen Bei ungleichen Latenzen muss der k rzere Zweig mit zus tzlichen Pipeli nestufen erweitert werden Im Prototyp wird f r die Demonstration lediglich der bedingte Zuweisungs Operator implementiert siehe n chster Punkt e Bedingte Zuweisung Sie ist eine Spezialform einer if e1se Verzweigung und entspricht dem 2 Operator aus C Je nachdem ob ein boolescher Ausdruck wahr oder falsch ist wird entweder der eine oder der andere We
53. beschleunigt werden Speicherzugriffe auf die Matrixzeilen erfolgen gleichzeitig und blockweise entsprechend der Warp Gr e Oft ist die Blockgr e kein Vielfaches der Matrixzeilengr e so dass am Zei lenende Verzweigungen f r die Threads innerhalb eines Blocks entstehen manche Threads lesen und andere warten Die Verzweigungen f hren in der SIMT Architektur zu einer un vermeidlichen seriellen Ausf hrung aller Zweige Damit keine Threads ber das Zeilenende hinaus arbeiten ist es notwendig zu pr fen ob der aktuelle CUDA Block mit seinen Berech nungen bereits an den Zeilenenden der Matrix angekommen ist Diese pr fende i Anweisung konnte f r einen allgemeinen Fall weg optimiert werden Im allgemeinen Fall werden die Ma trixzeilen ohne i Anweisung gelesen ohne den Teil am Zeilenende zu lesen Der danach aus gef hrte Grenzfall beinhaltet die i Anweisung f r die verzweigenden Threads am Zeilenende Diese strukturelle nderung beschleunigt das Leseverhalten der Matrixzeilen weil im h ufige ren allgemeinen Fall keine Verzweigung mehr existiert die ausgewertet werden muss Dieses Konzept wurde in vielen Kernelfunktionen umgesetzt Eine weitere beschleunigende Struktur nderung liegt darin auf den Shared Speicher zu ver zichten Der bliche Weg GPU Daten zu prozessieren ist sie aus dem Grafikkartenspeicher in den Shared Speicher zu lesen anschlie end zu synchronisieren Operationen auf dem Shared Speicher anwenden w
54. boards and kits EK V6 ML605 G htm 2010 133 Literatur 83 Xilinx DDR2 and DDR3 SDRAM Memory Interface Solution 2011 84 Xilinx LogiCORE IP Floating Point Operator v5 0 2011 85 Xilinx Virtex 6 FPGA Memory Interface Solutions 2011 86 Zhiru Zhang Yiping Fan Wei Jiang Guoling Han Changqi Yang und Jason Cong Au toPilot A Platform Based ESL Synthesis System Seite 99 112 2008 doi 10 1007 978 1 4020 8588 8_6 134
55. bt dem Programmierer die Wahl unterschiedliche Flie kommabibliotheken zu verwenden Der bersetzungsprozess ist in vier Phasen unterteilt worden zu sehen in Bild 3 3 1 Das LLVM Frontend bersetzt die Funktionen mit den Berechnungen in LLVM IR Bytecode Der Bytecode ist eine von Menschen nicht lesbare Repr sentation auf die dann ausgew hlte Optimierer angesetzt werden Zuletzt wird der Bytecode in Tridents eigene IR abgebildet bei der nur eine Untermenge an Sprachkonstrukten erlaubt ist Der Trident Kompilierer setzt dabei auf die Arbeit des SeaCucumber Kompilierers 75 auf 37 3 Stand der Technik Trident IR Transformation Zeullngsplaul g Generierung Datenpfade LLVM IR nach Hyperblock Ressourcen Generierung Bytecode Transformation Analyse FSM GCC Front End Auswahl Fertigungsplan Generierung Operationen Auswahl Register Bytecode nach Optimierun Block Generierung Trident IR P 9 Pipelining Kontrollfluss Bild 3 3 bersetzungskette des Trident Kompilierers Optimierung 2 Trident IR Transformation Die Trident IR Repr sentation enth lt zus tzliche Infor mation die die Abbildung der Operatoren Basisbl cke auf Hyperbl cke erlaubt Ein Hyperblock 54 ist die Vereinigung mehrerer Basisbl cke die Kontrollflusssignale nur am Eingang ben tigt S mtliche bedingte it Verzweigungen werden von einer Kontroll abh ngigkeit in eine Dantenabh ngikeit berf hrt Die Auswahl identifiziert die ben tig
56. chen Computer in dem das Rechenger t verbaut ist Skalierbarer Parallel Prozessor mit vielen Rechenkernen Rechenkern als Teil einer gr eren Einheit Speichermodell Speichertypen host memory global memory shared memory local memory host memory global memory local memory private memory Hauptspeicher des Computers in dem das Rechen Ger t ist Hauptspeicher des Rechen Ger ts verbunden mit der CU Geteilten Speicher auf den alle PEs einen CU Zugriff haben Lokal Speicher mit exklusivem Zu griff f r ein PE Ausf hrungsmodell Ausf hrung aller Threads CUDA Block CUDA Thread work group work item Rechen Gruppe die parallel auf einer CU ausgef hrt wird Ausf hrungsfaden als Untermenge ei ner Rechen Gruppe Tabelle 2 2 Fachbegriffe aus CUDA und OpenCL die das selbe meinen Leider existieren unterschiedliche Terminologien in OpenCL zu CUDA die an einer Stelle zu Verwechslung f hren Die Tabelle 2 2 listet die deutsche Bedeutung mit englischen CUDA und OpenCL Fachbegriffen in Bezug auf das Plattform Speicher und Ausf hrungs Modell auf In OpenCL existieren in den Kernelfunktionen keine eingebauten Variablen die den aktu ell arbeitenden Thread identifizieren sondern Funktionen die die work group Nummer bzw die work item Nummer auslesen In OpenCL existiert gegen ber CUDA die Funktion size_t 16 vo Dd WH Bau 2 2 Rekonfigurierbare Hardware
57. chen F r eine effiziente Auslastung der GPU wurde der Haralick Algorithmus auf 26 Kernelfunk tionen herunter gebrochen die einzelne Zwischenergebnisse bzw Bildmerkmale berechnen Die Reihenfolge in der die Zwischenergebnisse und Bildmerkmale berechnet werden l sst sich auch f r die GPU Implementierung vom Abh ngigkeitsgraph Bild 4 3 Seite 54 ablei ten Mit der optimalen Reihenfolge sind die Kernelfunktionen gruppiert worden entsprechend der Leseregion im Grafikkartenspeicher siehe hierzu Tabelle 4 2 Die Gruppierung sorgt f r regional konzentrierte Speicherzugriffe die bei den Texturencaches h here Trefferraten mit resultierendem Geschwindigkeitsgewinn versprechen Wie bereits erw hnt steht f r die Berechnungen jeder individuellen Co Matrix ein Block zur Verf gung Das hei t die Anzahl der Bl cke ist konstant nur die Anzahl der Threads innerhalb der Bl cke muss optimal dimensioniert werden passend zum Ressourcenverbrauch jeder der 26 Kernelfunktionen Die vielen Threads k nnen genutzt werden um gleichzeitig Elemente von der Co Matrix zu lesen und zu berechnen Mit vielen parallelen Threads werden die Speichertransporte durch die Berechnungseinheiten verborgen W hrend ein Teil der Threads auf Daten vom Grafikkartenspeicher warten k nnen andere Threads die Berechnungseinheiten belegen die bereits mit Daten versorgt wurden Das Verstecken der Latenzzeit des Grafikkartenspeichers funktioniert gut sofern gen gend Thre
58. chitektur ab Die Entwicklung ist keine neue Sprache sondern eine Bi bliothek die zu unterschiedlichen Sprachen C C Haskell hinzu gebunden wird Acce lerator erm glicht eine architektur bergreifende bersetzung f r unterschiedliche Zielger te Das Quelltextbeispiel 3 3 zeigt eine eindimensionalen Faltung in der Sprache C die auf meh reren Zielger ten ausgef hrt werden kann using Microsoft ParallelArrays using A Microsoft ParallelArrays ParallelArrays namespace AcceleratorSamples public class Convolver public static float ConvolverlD Target computeTarget float a FloatParallelArray x var n x Length var y new FloatParallelArray 0 0f new n for int i 0 i lt a Length i y a i A Shift x i Hier wird nichts berechnet float result computeTarget ToArraylD y Berechnung auf dem Zielgeraet return result Quelltext 3 3 Beispielquelltext in C der Accelerator Bibliothek 70 In Zeile 10 wird ein FloatParallelArray erstellt das der Speicherung der Ergebnisdaten auf dem Zielger t dient Ebenso wird der Funktion ein paralleles Array bergeben dessen Daten bereits auf dem Zielger t sind Zeile 13 zeigt die Rechenvorschrift der Faltung ohne jegliche Berechnung Der Ausdruck a shift x i wird auf dem Zielger t in eine Speicherzugriffs matrix gewandelt Ist das Zielger t ein FPGA bedeutet dies dass die Daten entsprechend des Schleifenindex an d
59. chreiben und anschlie end den PC neu zu starten um den Link zwischen Bus und PCle Core herzustellen Eine andere M glichkeit besteht in der Verwendung eines Bootflashs das einmal mit einem Design beschrieben wird und beim Bootvorgang das Design in den FPGA l dt Auch dann wird der PCle Core inner halb der Zeitspanne richtig initialisiert Ein weiteres Problem bez glich der Programmierung besteht wenn eine Kernelfunktion in ein Design bersetzt wurde und das FPGA damit programmiert werden soll W hrend des Pro grammierens wird der PCIe Core vom Bus getrennt und die Initialisierung geht verloren Wenn der PC dabei nicht abst rzt ist es zumindest nicht mehr m glich den neu geladenen PCIe Core zu verwenden Die einzige Option den FPGA mit einem neuen Design zu laden ist ein Neu start des PCs Die L sung des Problems besteht darin den initialisierten PCle Core bei einer Programmie rung nicht zu berschreiben und zu halten damit der Link bestehen bleibt Im Allgemeinen ist die Neuprogrammierung lediglich f r den FPGA Bereich notwendig in dem die Pipeline platziert wird Der PCIe Core die Logik des Speicherkontrollers und des Rahmendesigns blei ben f r jede bersetze Pipeline konstant und m ssen somit nicht neu programmiert werden Mit DPR kann dieses Verhalten erzielt werden indem die Pipeline in einem dynamischen Mo dul platziert wird und das restliche Design statisch bersetzt wird Im FPGA wird ein Bereich gew hlt in dem das
60. cke Bild 3 4 bersetzungsverlauf von CHiMPS Der C Quelltext a wird in die Zielsprache b bersetzt und auf VHDL Bl cke c abgebildet Das Bild c zeigt im Datenflussgraph ein FIFO das als Cache von der bersetzung hinzugef gt wurde CHiMPS verfolgt den Ansatz viele kleine lokale verteilte Caches zu verwenden an statt wenige gro e mehrstufige Caches Dies spart FPGA Ressourcen f r die Cache Koh renz ein da jeder lokale Cache einer einzelnen unabh ngigen Funktion zugeordnet ist Um sicher zu stellen dass keine zwei Zeiger auf das selbe Feld zeigen und somit zwei Caches instantiiert werden die inkoh rent werden k nnen muss das ANSI C Schl sselwort restrict verwendet 39 3 Stand der Technik werden Auch wenn es un blicher Programmierstil ist mehrere Zeiger f r das selbe Objekt zu benutzen darf das Schl sselwort nirgendwo fehlen auch wenn man es implizit annehmen k nnte Eine weitere Erg nzung im Quelltext CHiMPS nutzen zu k nnen sind die pragma Anweisungen die den Teil markieren der f r den FPGA bersetzt und ausgef hrt werden soll Mit diesen wenigen nderungen des Quelltextes l sst sich ein Beschleunigungsfaktor von 2 8 bis 36 9 f r bekannte Anwendungen aus der HPC Black Scholes Smith Waterman immul so bol und swm erreichen Es gibt zus tzliche pragma Anweisungen die dem Kompilierer Informationen liefert wie bes sere Rechenleistung zu erwarten ist Ein hardwarekundiger Programmierer mu
61. cke Grafics Processing Unit Grafikprozessor High Performance Computing beschleunigtes Rechnen Intermediate Representation Zwischensprache Low Level Virtual Machine Kompiliererframework Memory Speicher Peripheral Component Interconnect Express Computerschnittstelle Processing Element OpenCL prozessierende Einheit in OpenCL Single Instruction Multiple Data Spezifikation einer Rechnerarchitektur Single Static Assignment einmalige statische Zuweisung Tool Command Language Skriptsprache Very High Speed Integrated Circuit Hardware Description Language Hardwarebeschreibungssprache VII Danksagung Herrn Professor Reinhard M nner danke ich sehr mich an seinem Lehrstuhl aufgenommen und mir eine Promotion erm glicht zu haben Seine Unterst tzung mit seiner menschlichen und freudigen Art machten ihn zu einem idealen Doktorvater Diese Arbeit w re auch nicht wie sie ist wenn mir Guillermo Marcus mit seinem Scharfsinn f r Details keine n tzlichen Tipps f r die Umsetzung gegeben h tte Weiter danke ich ihm und Wenxue Gau deren ausgereifte Entwicklungen PCI Treiber und DMA Logik ich verwenden durfte ohne die meine Arbeit konzeptionell nicht vollst ndig w re Neben den beiden war auch der Austausch mit Andreas Kugel Thomas Gerlach und Nicolai Schn r stets hilfreich wenn es wie h ufig in der Hardwareentwicklung mit den Entwicklungs werkzeugen nicht weiterging Ich habe mich am Lehrstuhl mit all seinen freundlichen
62. d 3 5 zeigt die Aufgabe den Kernel Quelltext mit pragma Anweisungen zu erg nzen Die wichtigsten Anweisungen parametrisieren die parallele Aus f hrung wie das CUDA Grid auf dem FPGA aufgeteilt wird FCUDA GRID und FCUDA 40 3 4 Software Hardware Kompilierer Pragma FCUDA AutoPilot bersetzung CUDA Anweisungen FCUDA AutoPilot Synthes Design Quelltext Quelltext C Quelltext Netzliste Bild 3 5 CUDA FPGA bersetzungskette BLOCKS die Synchronisation welcher Barrieretyp verwendet werden soll FCUDA SYNC die Speicher bertragung wie die Kernelfunktion auf den Speicher zugreifen kann FCUDA TRANSFERS und die Berechnungen wie viele FPGA Rechenkerne verwendet werden FCU DA COMPUTE Im zweiten Schritt der Ubersetzungen wird der FCUDA Quelltext in AutoPilot C konvertiert Die Konvertierung ersetzt die eingebauten parallelen Index Variablen durch Thread Schleifen Dieser Schritt ist vergleichbar mit einer Serialisierung d h die mehrfache Ausf hrung der Kernel Funktion geschieht jetzt mit Hilfe von Schleifen Eine Synchronisation wird mit zwei Teilschleifen ersetzt eine Schleife vor der Synchronisation und eine danach Wenn die erste Teilschleife endet haben alle serialisierten Threads den Synchronisationspunkt erreicht Mit Hilfe der Anweisungen wird die Softwarestruktur hergestellt die AutoPilot f r eine parallele Abarbeitung ben tigt Im dritten Teil der bersetzung wird der AutoPilot Quelltext auf FPGA Softco
63. d Puffer die mit den physikalischen Pins verbun den sind e Das Verdrahtungsnetzwerk basiert auf SRAM Technik was bedeutet dass durch Be schreiben von Speicherzellen die CLBs verdrahtet werden Das hei t auch dass der FPGA beim Spannungsverlust sein Logik Design verliert Wie viel Logik in ein FPGA hineinpasst oder wie viel Chipressourcen ein Logik Design ben tigt h ngt in erster Linie von der Anzahl der CLBs eines FPGAs ab Da aber die F higkeit von CLBs verschiedener Hersteller variieren kann wird f r die Komplexit t der Logikzelle bzw des gesamten FPGAs ein Gatter quivalent Gates verwendet Ein Gatter ist definiert als ein Logikelement mit zwei Eing ngen und einem Ausgang wie beispielsweise bei einem NAND Selbst durch die Angabe aus wie vielen Gates ein CLB FPGA besteht sind die FPGAs unter schiedlicher Hersteller dennoch nicht direkt in Leistung und Ressourcenverbrauch vergleich bar Es gibt viele verschiedene Ma einheiten f r den Ressourcenverbrauch eines Designs bzw f r die Kapazit t eines FPGAs Beispiele sind CLBs LC logic cells slices gates und viele andere 2 2 2 Beschreibungssprache VHDL Um FPGAs zu programmieren wird eine Hardware Beschreibungssprache verwendet Die be kanntesten sind VHDL Very high speed integrated circuit Hardware Description Language und Verilog VHDL ist die erste Wahl in dieser Arbeit weil der Autor die strenge Typpr fung bei der Komponenten
64. d store Befehlen get tigt Weiter verf gt LLVM IR ber einen unendlichen Vorrat an Registern die im Beispiel mit ei nem vorangestellten durchnummeriert werden Jedes Register wird nur einmal beschrieben das der Single Static Assignment Form SSA aus dieser Arbeit 27 entspricht Das Beispiel zeigt weiter dass der Ausdruck b c in IR nur einmal berechnet wird was auf eine erfolgrei che Optimierung schlie en l sst LLVM bietet f nf Vorteile die andere Kompilierer Frameworks nur teilweise haben 1 Das Kompilierermodell h lt die Zwischensprache LLVM IR zu allen Programmlebens zeiten Zeitpunkt des Kompilierens des Linkens zur Ausf hrungszeit und w hrend der Ausf hrungspausen bei Dies erm glicht eine Analyse und Optimierung des Programms in allen Stadien des Programms 2 Neben der Zielsprachengenerierung zur Laufzeit unterst tzt LLVM auch eine rechenin tensive Generierung zur Entwicklungszeit 3 W hrend der Laufzeit kann ein Laufzeitprofil des Programms erstellt werden das zur Optimierung herangezogen wird 4 Das Laufzeitmodell ist transparent Gemeint ist dass die LLVM IR keinem speziellen Objektmodell unterliegt auch keine spezifische Semantik f r Exception verwendet wird und keine bestimmte Laufzeitumgebung ben tigt D h LLVM IR kann f r alle m gli chen Sprachen kompiliert und verwendet werden 5 Wegen der Sprachunabh ngigkeit ist es LLVM m glich alle Quelltexte auch Sprach spezifische
65. das g ngigste und n tzlichste Kompilierer Framework auf das folgend weiter ein gegangen wird 3 3 2 LLVM Low Level Virtual Machine LLVM 48 ist ein Kompilierer Framework das eine st ndi ge Optimierung der zu bersetzenden Programme erm glicht St ndig bedeutet zum Zeit punkt des Kompilierens des Linkens zur Ausf hrungszeit und w hrend der Ausf hrungspau sen Das Kompilierer Framework ist modular aufgebaut so dass ein Austausch des Frontends Quellsprache und des Backends Zielsprache problemlos m glich ist LLVM definiert eine allgemeine Zwischensprache namens Intermediate Representation IR f r die es viele Opti mierer gibt IR ist unabh ngig von einer bestimmten Prozessorarchitektur jedoch einer Assem blersprache recht hnlich int foo int a int b int c return a b c b c Quelltext 3 1 Beispiel C Funktion Als Beispiel ist die C Funktion int f00 in 3 1 gegeben Die bersetzung und Optimie rung in LLVM IR zeigt der Quelltextabschnitt 3 2 Das Beispiel ist mit der Demo Webanwen dung der Seite 53 bersetzt worden 33 3 Stand der Technik define i32 foo i32 a i32 b 132 c nounwind readnone 1 sub nsw 132 b c 2 mul i32 1 a 3 mul i32 2 1 ret i32 3 Quelltext 3 2 Beispiel LLVM IR Die Basisdatentypen in LLVM IR sind Boolean Integer mit w hlbarer Bitbreite Floattypen und Zeiger Die Speicherzugriffe werden ausschlie lich mit den 1oa
66. de sprechen daf r e Der FPGA wird als Kommunikations und Schnittstellenbaustein ben tigt um die Daten vom Sensor in den PC Speicher zu transportieren Da der FPGA sehr leistungsf hig ist kann er auch Co Prozessor Aufgaben bernehmen e Vom Sensor kommen Daten die in den FPGA gestreamt werden Im FPGA werden sie mit geringer Latenzzeit in gestreamter Weise weiterverarbeitet e Die Tatsache dass der Sensor Integerdaten liefert spricht ebenso f r den FPGA Um den Biologen eine Programmierung der Online Prozessierung auf dem FPGA zu erm g lichen wird in dieser Arbeit ein Kompilierer entwickelt der eine Kernelfunktion der Sprache OpenCL in eine Hardwarepipeline in VHDL bersetzt Abschnitt 5 3 Die VHDL Pipeline soll mit umliegender Logik Abschnitt Rahmendesign 5 4 und einer OpenCL Laufzeitumgebung Abschnitt 5 5 auf einer FPGA Karte zur Ausf hrung gebracht werden Folgende Argumente zeigen den Bedarf des Ansatzes e In der Regel beherrschen Biologen kein VHDL sie brauchen eine einfache Sprache die sie f r die Anpassungen der Online Prozessierung einsetzen Handel C ist keine Option 45 3 Stand der Technik da sie lediglich eine vereinfachte Hardwaresprache f r Programmierer mit Hardware kenntnissen ist Auch CHiMPS bedarf komplexer Pragma Anweisungen um die Hard ware zu beschreiben e Im Allgemeinen gilt dass serielle Sprachen entweder zus tzliche Anweisungen vom Programmierer f r eine parallele Aus
67. definiert was der Thread anzahl entspricht Die Gr en werden in die Kontrolleinheit in Register Kopiert Die Adress bl cke ben tigen die Gr en Parallelindizes um das Zugriffsmuster und die letzte Adresse im Datenfluss zu bestimmen Nach der Bekanntgabe der Parallelindizes wird die Berechnung in Zeile 16 gestartet Die Implementierung setzt die Parallelindizes mit der Call Back Funk tion devWriteWorkGroupSize UNd devwriteworkItemsize Die Berechnung wird mit der Call Back Funktion devstartComputation gestartet womit das Bit Null im Kontrollregister gesetzt wird In einer Schleife wird das Bit Null mit devcomputationDone kontinuierlich ausgelesen und gepr ft ob die Berechnung fertig ist Um die CPU Last des aktiven Wartens zu reduzie ren wird innerhalb der Schleife der Hostthread f r wenige Mikrosekunden nach jeder Pr fung schlafen gelegt Die letzte Zeile zeigt wie die Ergebnisse der Berechnung vom externen Speicher des ML605 in den Arbeitsspeicher des Hosts kopiert werden 108 5 5 OpenCL Laufzeitumgebung 5 5 3 Austausch Pipeline Modul 5 5 3 1 Programmierschnittstellen und DPR Der PCIe Bus hat die Anforderung beim Bootvorgang des PCs zu allen PClIe Ger te einen Link herstellen zu m ssen und zwar innerhalb einer Zeitspanne von hundertstel Millisekunden 81 Die JTAG Schnittstelle ist f r diese Anforderung unpraktisch Es besteht die M glichkeit den FPGA mit einem Design inklusive PCIe Core zu bes
68. den 9 10 virtual void writeDMA 101 21 22 23 24 5 OpenCL zu FPGA bersetzer const const const const const const const virtual const const virtual const unsigned int address ES DMABuffers buf unsigned int unsigned int count offset 0 bool inc true Ll bool lock t float timeout void setReg unsigned int unsigned int unsigned int unsigned int Quelltext 5 1 rue 1 0 0 fe address Er value ie getReg ER address FPGA Adresse DMA Puffer Anzahl zu lesender 32Bit Werte Versatz des ersten Wertes Adresse im FPGA inkrementieren Warte bis der Transfer fertig ist Abbruchzeit in Millisekunden FPGA Adresse Wert der geschrieben wird Wert der gelesen wird FPGA Adresse Ausschnitt aus der board h mit den verwendeten Funktionen 5 5 1 3 Kommunikations Klasse Die Kommunikations Klasse hat spezialisierte Methoden die auf den Adressraum des Rah mendesigns siehe Abschnitt 5 4 3 zugeschnitten sind Sie abstrahieren Kommunikations Trans aktionen mit mehreren Aufrufen von Zugriffsfunktionen und verwalten die Klassen Instanzen aus der MPRACE Bibliothek Bild 5 24 zeigt die Kommunikations Klasse mit den abstrahie ren Zugriffsmethoden MPRACE Bibliothek DMABuffer i 0 DeviceTrans writeWorkGroupSize writeWorkltemSize startComputation isComputationDone Bild 5 24 Device Trans Le
69. den Mikroskops ist ein h herer Datendurchsatz von mehreren hundert Megabytes pro Sekunde Die Aufnahmen werden von den Fotosensoren zu einer Ausleseelektronik bertragen Als Ausleseelektronik wird oft eine FPGA Karte in einem PC verwendet Diese hat neben dem Datentransport zum Massenspeicher auch die Aufgabe einer Vorprozessierung der Bilddaten Typische Aufgaben sind Intensit tskorrekturen der Pi xeldaten Sortierung des Pixelstroms bzw die Prozessierung einfacher Bildalgorithmen zur Qualit tsanalyse Dabei existiert die Anforderung das System neuen Gegebenheiten anpassen zu k nnen Wegen des kontinuierlichen Datenstroms muss die Verarbeitung in Echtzeit gesche hen was in dieser Arbeit als Online Prozessierung bezeichnet wird 1 Einf hrung und Ziele des Viroquant Projekts 1 3 Beschleunigte Bildverarbeitung Bei ansteigendem Datenvolumen und ansteigenden Datenraten wird die Speicherung und die Datenauswertung zum Problem Letztendlich ben tigt man immer gr ere Massenspeicher Daten Cluster bei gleich bleibender Geschwindigkeit der Datenauswertung bzw immer leis tungsf higere Rechencluster bei gleich bleibender Speicherkapazit t um die Bilddaten auszu werten F r einen genomweiten Screen wird f r jedes Gen eine Zellkultur Bild 1 3 mit vielen hun dert Zellen aufgenommen Das aufkommende Datenvolumen ist somit ein Produkt hunderter Zellen und tausender Gene Ohne beschleunigtes Mikroskop ben tigt ein genomweiten
70. den aus der sourcecompile Klasse implementiert Der Algorithmus beginnt in der Hilfsmethode 1ayerDetermineRec bei der BlockTransWr Komponente und durchl uft den Block AST r ckw rts mit rekursiven Aufrufen Beim Durchlaufen wird jede Block Komponente mit einer Ebenennummer versehen auf der sie liegt und es wird die gr te Ebene 82 5 3 VHDL Kompilierer bestimmt Im Bild liegt BlockComp3 auf der Ebene null BlockComp2 auf der Ebene eins und die anderen auf der Ebene zwei der gr ten Die Hilfsmethode latencyFillLatencyArray bestimmt f r jede Ebene die gr te Berechnungszeit und speichert sie in einem Array durch die Ebene indiziert Die Arraysumme entspricht dem Datenpfad mit der gr ten Latenz und die Teilsummen Summe der Ebene 0 bis i entsprechen der maximalen Latenz jeder Ebene f r beliebige Datenpfade In der letzten Hilfsmethode 1atencySet InputDelay werden f r jeden Datenteilpfad die tats chlichen Latenzzeiten f r diesen Abschnitt summiert und mit den Teil summen der entsprechenden Ebene verglichen Die Differenz ergibt eine n tige Verz gerung der Eing nge 5 3 6 Parsebaum VHDL Wandlung 5 3 6 1 Generierung der VHDL Pipeline Dieser Abschnitt entspricht dem letzen bersetzungsschritt 4 aus dem Blockschaubild 5 4 Ubersetzungsschritt 3 wird noch erl utert Die vndiarchitecture Klasse aus dem Bild 5 13 er zeugt aus dem Block AST eine VHDL Datei VhdlArchitecture SourceCompiler i i
71. den werden 6 2 2 Nutzen des Pipelinekonzepts Da OpenCL eine parallele Sprache ist ist es einfach eine Kernelfunktion auf den FPGA parallel abzubilden Viele parallel arbeitende Threads durchlaufen die gleichen Operationen eines Pro gramms Es liegt nahe die Operationen eines Threads in eine Pipelinestruktur zu ordnen und sie von vielen Threads durchlaufen zu lassen wie es in dieser Arbeit gemacht wurde Jeder Takt liefert ein Ergebnis f r einen Thread Genau darin besteht der Vorteil des Pipelinekon zepts alle Operatoren in der Pipeline parallel arbeiten zu lassen Die Pipeline ist mit 133MHz getaktet Gibt es in der Pipeline N Operatoren dann ist der Rechendurchsatz R R GigaO perationen s 0 133 GHz N Operationen 6 1 Mit steigendem N und h herer Taktrate wird die Pipeline effizienter Folgende Faktoren lassen den Rechendurchsatz sinken e Die Kernelfunktion besitzt nur wenig Operationen und die Pipeline arbeitet wenig paral 114 6 2 OpenCL Kompilier lel e Die Pipeline ben tigt zu viele FPGA Ressourcen so dass das Zeitverhalten nicht erf llt werden kann und die Taktrate gesenkt werden muss e Bei Pipelines mit vielen Speicherzugriffen k nnte die Speicherbandbreite nicht ausrei chen und die Pipeline muss zeitweise angehalten werden bis alle Teile Transferbl cke wieder mit Daten versorgt sind Die in der Einf hrung vorgestellten theoretisch maximalen FPGA Rechenleistungen von ca 100 GFLOPs
72. der Ethernet bieten bei weitem nicht genug Bandbreite und deren Protokolle werden von den Sensoren nicht unterst tzt Die FPGA Karte soll neben der Datenaufnahme data acquisition DAC ebenso die gestream ten Daten online prozessieren Eine Anpassung des Hardware Designs mit neuen Algorithmen ist in der Regel nicht trivial besonders f r Programmierer ohne Hardwarekenntnisse Aus die sem Grund wurde im Ansatz die Sprache OpenCL ausgew hlt die als einfache Sprache zur Beschreibung der Hardware verwendet werden soll Die Sprache OpenCL bietet in Hinblick auf einen FPGA bersetzer mehrere Vorteile gegen ber anderes Sprachen e OpenCL ist eine parallele Programmiersprache Sie gibt eine Modell vor die Parallelit t in einem FPGA umzusetzen Serielle Programmiersprachen haben diesen Vorteil nicht und es ist schwierig die Parallelit t aus einem seriellen Programm zu extrahieren e Der Hauptvorteil von OpenCL ist die vielseitige Einsatzm glichkeit Mit ihr k nnen unterschiedliche Architekturen programmiert werden wie z B GPUs CPUs und DSPs Die parallele Programmiersprache CUDA ist speziell f r GPUs von NVIDIA entwickelt worden Man k nnte einen CUDA Kompilierer entwickeln der Programme f r FPGAs bersetzt FCUDA ist beispielsweise eine solche Entwicklung aus der Zeit als es noch kein OpenCL gab Warum FCUDA nicht weiter geeignet ist wird im Fazit der FPGA Sprachen erl utert 3 4 5 Es liegt allerdings n her einen Kompilie
73. e nommen Funktionsname GPU Version I GPU Version II Faktor Funktion OA 276 3 ms 275 9 ms 1 Funktion OB 242 4 ms 86 8 ms 2 8 Funktion 0C 466 4 ms 367 6 ms 1 3 Funktion OD 224 4 ms 141 0 ms 1 6 Funktion 1A 221 8 ms 221 2 ms 1 Funktion 1B 416 8 ms 373 6 ms 1 1 Funktion 1C 202 5 ms 203 3 ms 1 Funktion 1D 929 2 ms 177 0 ms 5 2 Funktion 1E 310 1 ms 288 2 ms 1 1 Funktion 1F 602 6 ms 418 2 ms 1 4 Funktion 5A 418 6 ms 300 5 ms 1 4 Funktion 5B 269 3 ms 270 7 ms 1 Funktion 5C 309 9 ms 273 0 ms 1 1 Funktion 5D 225 1 ms 226 5 ms 1 Gesamtausfiihrungszeit inklusive nicht 6600 ms 4650 ms 1 42 gelisteter Funktionen Tabelle 6 3 Ausf hrungszeiten und Beschleunigungsfaktoren der GPU Version I und II mit ausschlie lich relevanten Funktionen 6 2 OpenCL Kompilier 6 2 1 Nutzen der OpenCL Implementierung Mit dieser OpenCL Implementierung ist es wesentlich einfacher den FPGA mit einer Funk tion zu programmieren Beispiel Handelt es sich um eine Vektor Addition Funktion kann 113 6 Ergebnisse und Diskussion diese im FPGA mit einem Addierer und einem Register verwirklicht werden Das ist f r einen hardwarekundigen Programmierer eine leichte Aufgabe und Programmierer ohne Hardware kenntnisse k nnen das lernen Was fehlt ist die Logik die einen Datenfluss aufrecht erh lt und weitere Kontrolllogik die die Berechnungen starten l sst und das Berechnungsende sig nalisiert Die Kommunikation zwischen Hos
74. e zu mehrere Kerne auf einem Chip zu vereinen Eine aktuelle CPU von Intel namens Xeon X7560 mit sechs Kernen und 3 2GHz Taktrate bietet 64GFLOPS das bedeutet 11 GFLOPS pro CPU Kern siehe Intel 18 Die Verlustleistung einer aktuellen CPU liegt bei ca 90W mit einem Preis von ca 500 1000EUR Eine Anwendung die schnell auf der CPU l uft ist beispielsweise sehr IO lastig mit gerin gem Rechenaufwand Solche Anwendungen lassen sich durch Co Prozessoren nicht weiter beschleunigen da die arithmetische Rechenleistung der CPU die Last bew ltigen Eine andere Anwendung w rde aus einem seriellen Algorithmus mit geringem Speicherbedarf bestehen Der kleine Speicherbedarf verspricht eine hohe Trefferrate im CPU Cache Parallele Architek turen bieten keine M glichkeit einer Beschleunigung serieller Algorithmen Die CPU ist ein ausbalanciertes Rechenwerk f r alle Arten von Anwendungen und ist somit das Herzst ck aller Berechnungen Die Co Prozessoren auf Beschleunigerkarten k nnen der CPU einen speziali sierten Teil der Rechenlast abnehmen umgekehrt ben tigt der Co Prozessor eine CPU die ihm eine Aufgabe gibt GPU Die Architektur der GPU wurde bereits im Abschnitt 2 1 2 erl utert Zusammenfassend bietet eine aktuelle GPU 1500GFLOPS hat eine Verlustleistung von 300 400W und einen Preis von ca 500 1000 EUR Das Bild 3 1 zeigt die Leistung verschiedener Prozessoren von NVIDIA und Intel mit deren Rechenleistung und der Speicherbandbr
75. e Berechnungen entlastet In den 90er Jahren als 3D Computerspiele in Mode ka men stieg der Bedarf Rechenoperationen auf die GPU auszulagern Es mussten drei dimen sionale R ume und Figuren mit Polygonen berechnet und im n chsten Schritt mit Texturen gef llt werden Rendern Der stets wachsende Wunsch 3D Spiele immer realistischer werden zu lassen befl gelte die Grafikkartenhersteller immer leistungsf higere GPUs mit immer leis tungsf higere Architekturen zu entwickeln Wann die GPU f r allgemeine Rechenaufgaben als Co Prozessor herangezogen wurde wird sp ter im Stand der Technik Abschnitt GPGPU 3 1 2 behandelt 2 1 2 Heutige GPU Architektur Heutige GPUs haben durch ihre hohe Anzahl von bis zu 512 Prozessorkernen ein vielfaches an Rechenleistung im Vergleich zu CPUs Eine bew hrte Technik hunderte Prozessorkernen auf einem Chip zu vereinen und dessen Komplexit t herunter zu brechen ist die Prozesso renkerne in skalierbar Strukturelemente zu gruppieren die mehrfach auf dem Chip vorhanden sind Dabei sind oft die Strukturelemente wiederum in gleiche Elemente unterteilt Die GPU Architektur die hier beschrieben wird ist die NVIDIA GF100 Architektur 62 die auf dem Vorg nger der Fermi Architektur 63 aufbaut Die Strukturelemente der h chsten Chipebene hei en grafische prozessierende Cluster GPC Vergleichbar mit Multikern CPUs besitzt je der GPC den vollen Funktionsumfang einer GPU Die Elemente de
76. e Slave ID zum Selektieren ermittelt Das Selektionssignal wird synchron mit den Daten und dem G l tigkeitssignal auf den Bus gesendet Die Daten werden von den Datenpuffern des selek tierten Transferblocks aufgenommen 5 4 7 Kontrolleinheit Bild 5 22 zeigt den schematischen Aufbau der Kontrolleinheit aus dem Rahmendesign Die Aufgaben der Einheit sind die Berechnungen der Pipeline zu steuern dem Host Zugriff auf die Register zu geben und die aktuellen Parallelindizes der Pipeline mitzuteilen clkUser rst rstDesign Parallel idx_wr_data Index idx_local_size x y z idx_wr_en Register idx_work_group_size x y z idx_wr_id idx_work_group_id x y z idx_rd_id Kontrollregister idx_rd_data ctrl_wr_reg ctrl_rd_reg ctrl_wr_reg_en id_pipeline ctrl_block_end ctrl_rd_reg_rdy ctrl_pr_config ctrl_block_start Bild 5 22 Schematisches Blockschaltbild der Kontrolleinheit e Die Parallelindizes werden in neun Registern gespeichert die tiber eine Lese und eine Schreibschnittstelle zur PCle Einheit verbunden sind Die Registerinhalte k nnen ber die idx Signale von den Adressbl cken innerhalb der Pipeline ausgelesen werden e Das 32 Bit breite Kontrollregister ist in Kontrollbits Bit 0 bis 15 und in Informationsbits Bit 16 bis 31 aufgeteilt Nur die Kontrollbits k nnen vom Host beschrieben werden Die Kontrollbits steuern die Berechnung den Partieller Rekonfigurations Modus und 98 5 4 Rahmendesign den Pipeline
77. e die Bedingung dass jede Zeilenstartadresse ein vielfaches von 256 sein muss Bei Matrizen die aus mehreren Zeilen bestehen kann am Zeilenende eine L cke mit unbenutzten Elementen entstehen Die Implementierung ber cksichtigt L cken am Zeilenende 4 3 2 4 Normalisierte Co Matrix Die Co Matrizen m ssen f r die Bildmerkmalsberechnung normalisiert sein indem jedes Ele ment durch die Matrixsumme dividiert wird Da die Division eine zeitaufwendige Operation ist multipliziert eine Kernelfunktion alle Matrixelemente mit dem Kehrwert der Matrixsumme Die Ausf hrungszeit wird effizienter weil nur noch eine Division berechnet werden muss 4 3 2 5 Merkmale erzielen durch Aufsummieren Die Gleichungen der Bildmerkmale 4 1 4 13 sowie die Gleichungen der Definitionen 4 14 4 21 bestehen haupts chlich aus Summen Gleichzeitig verf gt jede Kernelfunktion Tabelle 4 2 ber eine ressourcenangepasste Anzahl an parallel arbeitenden Threads die f r die Sum menbildung genutzt werden Die Quelldaten werden blockweise gelesen mit arithmetischen Operationen Multiplikation Logarithmus und andere verrechnet und zu den bereits prozes sierten Daten im Shared Speicher parallel addiert Ergebnis ist ein Block mit Zwischensum men der mit einer parallelen Reduktion zu einer einzelnen Summe addiert wird Die Blockgr e wird definiert durch die Anzahl vorhandener Threads Es gibt zwei Implementierungen der Blockstruktur eine Vektor Block St
78. e die Khronos Group die erste OpenCL Spezifikation 36 eine parallele Sprache die CUDA hnlich ist und die unter anderem f r GPUs und weite re Rechen Architekturen geeignet ist In Abschnitt 3 4 4 1 werden die Implementierungen der Sprache weiter erl utert 3 1 3 FPGA Folgende Liste zeigt Beispiele in wie vielen Bereichen FPGAs eingesetzt werden e Digitale Signalverarbeitung FFTs digitale Signalfilter Kodierer Decodierer CRC Bildverarbeitung Frame Grabber Netzwerktechnik Routen von Datenpakteten mit sehr kurzer Latenzzeit e Glue logic als Kommunikationsbaustein der andere digitale Bausteine miteinander ver bindet e System on a Chip auf dem mehrere funktionelle Einheiten CPU RAM Controller BU Se Peripherie Controller auf einem Chip vereint werden e Data Acquisition DAC Datenaufnahme Vorprozessierung und Weiterverteilung von Sensorwerten e Prototyping im ASIC Entwurf zur kosteng nstigen Entwicklung e High Performance Community HPC Gemeinde zur Beschleunigung von Algorithmen und Rechenanwendungen FPGAs sind n tzliche Prozessoren die beliebige Aufgaben in der digitalen Elektronik ber nehmen k nnen Lediglich bei den HPC Anwendungen wird der FPGA blicherweise in einen PC verbaut in dem er als Co Prozessor fungiert In den anderen Einsatzgebieten sind FPGAs ein preiswerter Ersatz f r ASICs Application Specific Integrated Circuit Der FPGA hat im Vergleich zum ASIC eine deutliche
79. e mit 85 vom Design ver wendet wurden Neuere FPGA Hardware bietet 240 tausend Slices zw lf mal mehr Platz um die fehlenden sechs Bildmerkmale beschreiben zu k nnen und um weitere Beschleunigung zu erziehlen Die zu erwartende Beschleunigung die legt folgenden berlegungen zugrunde die mit Fak toren gesch tzt werden Die damalige Vergleichs CPU Pentium4 mit 2 4 GHz ist circa um den Faktor zwei langsamer als eine heutige CPU Intel 17 mit 3 4 GHz Die FPGA Designfre quenz hat sich seitdem circa um den Faktor zwei erh ht Die fehlenden Bildmerkmale w rden sch tzungsweise 12 Tausend Slices ben tigen da diese aus komplexeren Berechnungen be stehen Das Design w rde dann 30 tausend Slices verwenden die acht mal in einen heutigen FPGA hinein passen w rde Vorausgesetzt es l sst sich ein Konzept entwickeln das diese Par allelit t zul sst Die gesch tzte Beschleunigung eines neuen Designs auf aktueller Hardware 31 3 Stand der Technik verglichen mit einer aktuellen CPU liegt bei circa 50 Der Sch tzwert ermittelt sich aus der damaligen Durchschnittsbeschleunigung der Matrizen und der Bildmerkmale 4 75 7 3 2 und unterliegt folgenden den Faktoren 2 langsamere CPU x2 h here Designfrequenz und x8 mehr FPGA Ressourcen Die Entwicklungszeit das komplexe Design zu berarbeiten und die hohen Kosten f r die FPGA Hardware rechtfertigen die erwartete Beschleunigung nicht Das Ziel einer Beschleu nigung liegt im B
80. eamten Datenelements mit der entsprechenden Threadnummer globale work item berechnet Sie enth lt das Speicherzugriffsmuster das vom sourceAnalyser analysiert wurde und die Basisadresse die von den Kernel Funktionsparametern stammt Eine InstTransfer Klasseninstanz wird immer in eine Kombination von BlockAddr mit BlockTransRd oder BlockTransWr umgesetzt Die Funktion der InstGetzlemptr Klasse r ckt in die Block Addr Komponente Eine bedingte Zuweisung besteht aus einem Vergleich und einer Auswahl der weiter gestreamten Daten vergleichbar mit einem Multiplexer Blocknummer und Typ AddrO TransRdO Addr1 TransRd1 Bild 5 11 Block AST Beispiel der Matrixaddition Addr3 TransWrO Rechenoperation Anhand des Beispiels Matrixaddition soll gezeigt werden wie der Block AST aussieht Bild 5 11 zeigt den entstandenen Pipeline Baum Im Vergleich zum SSA AST 5 7 auf Seite 75 ist dieser einfacher in seinem Aufbau Das liegt daran dass viele Instruktionen auf wenige VHDL Bl cke verteilt wurden Auch die Operationen zur Adressberechnung der Matrixelemente ver bergen sich im Block Addr 5 3 5 3 Verz gerungen in der Pipeline Beim beliebigen Zusammensetzen der VHDL Bl cke zu einer Pipeline k nnen Datenpfade mit unterschiedlicher Latenz entstehen Da am Ende der Pipeline nach der Durchlaufverz gerung jeder Takt ein Ergebnis liefern soll m ssen alle Datenpfade die gleiche Durchlaufverz gerung 81 5 OpenCL zu FP
81. eichertransfers haben und andere die nur einen Bruchteil der maximalen Leistung verwenden In den Spalten Effizienz wurden die erzielte Leistungen im Verh ltnis zu theoretisch maximalen Leistungen dargestellt Es ist zu erkennen dass die Rechengeschwindigkeit von den Speichertransfers gebremst wird da sie eine weitaus h here Ausnutzung hat als die Rechenleistung Weiter l sst sich erkennen dass die Implementierung mit besseren Architekturen skaliert Die Effizienz der Rechenleis tung bleibt im Schnitt bei einem Prozent Der Anstieg auf 1 3 der Recheneffizienz von der GTX280 liegt an der verbesserten Implementierung siehe n chster Abschnitt 112 6 2 OpenCL Kompilier 6 1 3 Optimierungsergebnisse der zweiten Version Die Verbesserungen die im Abschnitt Profiler 4 3 3 auf der Seite 63 beschrieben wurden ergaben ein beschleunigtes Verhalten Die Optimierungskonzepte konnten auf die meisten Ker nelfunktionen angewendet werden In der Tabelle 6 3 sind die Ausf hrungszeiten der zweiten GPU Versionen aufgelistet sowie deren Beschleunigungsfaktor errechnet Im Fokus der Op timierung standen haupts chlich diejenigen Kernelfunktionen mit den l ngsten Ausf hrungs zeiten Die Funktionen 2A 2B 2C 3A 3B 3C und 3D haben jeweils eine Ausf hrungszeit von Ams 6ms Die Funktionen A4 4B und 4C haben Ausf hrungszeiten um die 10ms Diese Funktionen sind bereits sehr effizient wurden nicht optimiert und in die Tabelle nicht aufg
82. einer API auch eine Assemblerschnittstelle f r ihre GPUs bereitge stellt Das er ffnete ebenfalls die M glichkeit Algorithmen auf der GPU zu implementieren CTM wurde 2008 von dem Ati Stream SDK bzw dem AMD FireStream abgel st Mitte 2007 brachte NVIDIA eine Grafikkarte auf den Markt die Vertex Shader Geometry Shader und Pixel Shader in allgemeine Shadereinheiten vereint Das hatte f r die Grafikan wendungen den Vorteil die Rechenlast besser auf die Threadprozessoren verteilen zu k nnen Die Durchlaufrate einer Grafik Pipeline orientiert sich an der langsamsten Einheit w hrend die anderen Einheiten unbesch ftigt bleiben F r die GPGPU Anwendungen hatte die neue Architektur die Flexibilit t hnlich einer CPU Rechenoperationen in beliebiger Reihenfolge ausf hren zu k nnen NVIDIA bot zeitgleich CUDA an womit Programmierer einfach paral lele Programme f r NVIDIAs GPUs entwickelten konnten 25 3 Stand der Technik Mit CUDA konnten bereits viele Algorithmen aus der Forschung beschleunigt werden sie he 61 Typische Beschleunigungen gegen ber einer CPU Version liegen zwischen 3 und 60 Aber auch weitaus h here Werte mehrere Hundert sind in der Literatur zu finden Das Poten zial Algorithmen nur noch in einem Bruchteil der Zeit auszuf hren erm glicht Simulationen mit h herer Aufl sung rechenintensive Algorithmen werden echtzeitf hig bzw erst dann ver wendbar Im Dezember 2008 ver ffentlicht
83. eite zwischen Prozessor und Speicher Viele Algorithmen werden von der verf gbaren Speicherbandbreite gebremst Gerade deswegen ist das Wachstum der Speicherbandbreite ebenso wichtig wie die Rechen 28 3 1 Co Prozessoren GFLOPS GB s A A GeForce GeForce GTX 580 GTX 580 1500 200 GeForce GeForce GTX 480 GTX 480 180 1250 160 GeForce 1000 140 GTX 280 4 NVIDIA GPU GeForce 4 NVIDIA GPU O Intel CPU Se nt 120 O Intel CPU 750 100 GeForce 9800 GTX GeForce 9800 GTX GeForce GeForce 8800 GTX 80 8800 GTX 500 60 Westmere GeForce Westmere 7900 series GeForce 7900 series 250 40 Hapertown Prescott Harpertown Prescott 20 0 0 2003 2004 2005 2006 2007 2008 2009 2010 2011 2004 2005 2006 2007 2008 2009 2010 2011 a Rechenleistung b Speicherbandbreite Bild 3 1 Vergleich CPU und GPU der maximal theoretischen a Rechenleistung und b Band breite 65 leistung Die Grafikkarte eignet sich besonders f r daten parallele Anwendungen mit Daten volumen bis zur Speichergr e der Grafikkarte bei dem jeder Thread unterschiedliche Daten verarbeitet Aber auch task parallele Anwendungen werden von den neueren GPUs unterst tzt indem mehrere Kernelfunktionen zeitgleich gestartet werden F r eine Echtzeitverabeitung eig net sich die GPU nur bedingt da die Daten zwischen CPU Speicher und
84. ellt und in einer Instanzvariablen gespeichert Weitere Attribute die herausgefunden werden betreffen die Quelltextzeilen in welcher der Funkti onskopf die erste und die letzte SSA Instruktion zu finden ist Mit den Zeileninformationen kann die sourceParser Instanz zeilenweise die Instruktionen lesen und einen SSA AST aus Instruction Objekten generieren Abschnitt 5 3 3 Der sourceAnalyser besch ftigt sich mit der Semantik des Programms und analysiert Programmteile wie z B welche Adressierungs art verwendet wird Abschnitt 5 3 4 Mit der Analyse sind alle notwendigen Informationen zusammengetragen um den Block AST aus dem SSA AST zu generieren Abschnitt 5 3 5 Die Instanz vndiarchitecture benutzt den Block AST bestehend aus vna B1ock Instanzen den aufbereiteten Informationen der Analyse und generiert daraus eine VHDL Datei Abschnitt 5 3 6 71 5 OpenCL zu FPGA bersetzer SourceCheck sae lo IN SourceAttrib kx ParameterValue RegisterValue InstructionSet InstructionType lt return gt SourceParser O lt Instruction gt lt param gt SourceAnalyser Parametervalue SourceParser instruction NEUE A AN nstGomp InstComp InstLoad InstStore N Generalisierung abgeleitet von 0 Aggregation SourceCompiler gt lt VhdIBlock gt VhdIPort teil von 4 Komposition teil von Existenzabh ngig VhdlArchitecture VhdlComp Konnektor in Bezie
85. eml if status CL_SUCCESS coutAndExit Could not set kernel argument status status clSetKernelArg kernel 2 sizeof mem2 mem2 if status CL_SUCCESS coutAndExit Could not set kernel argument status const size_t global_work_size 3 El All peo All Shee MEGA 1 1 const size_t local_work_size 3 status clEnqueueNDRangeKernel queue kernel 1 NULL global_work_size local_work_size 0 NULL NULL if status CL_SUCCESS coutAndExit Could not execute kernel status clEnqueueReadBuffer queue mem2 true 0 sizeof unsigned int MEGA h_mem2 NULL NULL if status CL_SUCCESS coutAndExit Could not transfer memory status for i 0 i lt MEGA i Z h_meml i h_mem1 i if Z h_mem2 i 124 0 84 85 86 87 88 89 90 91 92 93 94 95 96 97 break if i MEGA cout lt lt TestProgramKernelExec success lt lt endl else cout lt lt There is a computational miss match at position lt lt i lt lt endl clReleaseMemObject meml clReleaseMemObject mem2 clReleaseCommandQueue queue clReleaseKernel kernel clReleaseProgram program clReleaseContext context Quelltext A 1 Lauff hige OpenCL Anwendung auf dem FPGA 125 Literatur 1 2 LL 3 LL 4 5 6 a 7 8 a 9 10 11 12 Khronos Group OpenGL Standard URL http www khronos org opengl 199
86. en Diese wiederum k nnen f r den FPGA in Pipelinemodule ber setzt werden Dynamisch zur Laufzeit k nnen die Pipelinemodule im FPGA ausgetauscht und ausgef hrt werden Pipeline und Rahmendesign zusammen lassen den Bildverarbeitungsal gorithmus auf dem FPGA ausf hren Das komplexe Zusammenspiel aller Einzelkomponen ten liefert gute Ergebnisse Diese Arbeit erm glicht den Biologen in Bezug auf die Online Prozessierung e die bekannte und weit verbreitete parallele Sprache OpenCL zur Programmierung der FPGA basierten Beschleunigerkarte einzusetzen e ohne Hardwarekenntnisse Kernelfunktionen entwickeln zu k nnen e diese in eine gestreamte Pipeline f r den FPGA zu bersetzen e und die FPGA Beschleunigerkarte mit einfachen Funktionen aus der standardisierten OpenCL Laufzeitumgebung ansteuern zu k nnen Weder FCUDA noch OpenRCL bzw keine bisherige Entwicklung vereint alle aufgelisteten Vorteile Eine zu dieser Arbeit parallele k rzlich erschienene OpenCL Entwicklung f r Altera FPGAs 16 zeigt dass es einen reellen Bedarf gibt FPGAs mit OpenCL programmieren zu k n 120 7 2 Verbesserungen f r die Zukunft nen FPGAs sind sparsamer im Energiebedarf und mit der Pipelinetechnik rechnen sie eine bis zwei Gr enordnungen schneller als Einkern CPUs Der Trend zeigt dass die Taktfrequenz der CPUs kaum noch ansteigt hingegen steigt die Anzahl der Kerne um leistungsf higere CPUs herzustellen Die h here Integrati
87. en Kernelfunktionen auf der GPU vielfach mit unterschiedlichen Threads aus gef hrt Die Threads sind in Bl cken CUDA Bl cken strukturiert die wiederum in einem Grid angeordnet sind siehe in den GPU Grundlagen 2 1 2 D h jeder Thread in jedem Block 55 4 Haralick Algorithmus GPU beschleunigt Schleife ber alle Zellen generiere Matrizen Schleife ber den Winkel A Schleife ber die Distanz D berechne Pxy Pxmy Pxpy berechne fl berechne mean var berechne f2 f10 f11 macPxmy berechne f6 berechne hxyl hxy2 berechne f3 speichere Bildmerkmale l sche Matrizen Bild 4 4 Struktogramm der optimierten Softwareversion des Grids f hrt die gleiche Kernelfunktion auf unterschiedlichen Daten aus Es besteht die Freiheit die angelegten Bl cke ein oder zweidimensional in einem Grid und die Threads drei dimensional innerhalb eines Blocks anzuordnen Dabei entstehen bis zu f nf Indices tx ty tz f r die Threads und bx by f r die Bl cke mit denen jeder Thread nummeriert wird In einer Kernelfunktion werden die Indices genutzt f r jeden Thread unterschiedliche Datenelemente zu adressieren Dabei ist es wichtig die Bl cke und das Grid so zu dimensionieren dass die Indizierung zur Datenstruktur im Speicher passt Die passende Zuordnung der vielen Threads zu den Datenelementen im Speicher erleichtert die Adressierung und bietet lineares Lesen f r schnelle Datentransfers In dieser Anwendun
88. en seiner intensiven Nutzung gut gepflegt d h die Verfah ren werden stets verbessert bzw neue hinzugef gt 68 5 3 VHDL Kompilierer _ kernel void int idx int idy Clidy clang matrixAdd int A int B int C get_global_id 0 get_global_id 1 idx Alidy w idx int w Blidy w idx define void matrixAdd i32 A 132 B i32 SC 132 w nounwind 1 alloca i32 align 4 2 alloca i32 align 4 3 alloca i32 align 4 4 alloca i32 align 4 Sidx alloca i32 align 4 Sidy alloca i32 align 4 store i32 A i32 1 align 4 store i32 B i32 2 align 4 store i32 C i32 3 align 4 store i32 Sw 132 4 align 4 5 call i32 get global _id i32 0 store i32 5 132 idx align 4 6 call i32 get global id i32 1 store i32 6 i32 Sidy align 4 7 load i32 idy align 4 8 load i32 4 align 4 9 mul nsw i32 7 8 10 load i32 idx align 4 11 add nsw 132 9 10 12 load i32 1 align 4 13 getelementptr inbounds i32 12 132 11 14 load i32 13 15 load i32 idy align 4 16 load i32 4 align 4 17 mul nsw i32 15 16 18 load i32 idx align 4 19 add nsw i32 17 18 20 load i32 2 align 4 21 getelementptr inbounds i32 20 132 19 22 load i32 21 23 add nsw i32 14 22 24 load i32 idy align 4 25 load i32 4 align 4 26 mul nsw i32 24 25 27 load i32 idx align 4
89. en sich analog zu der Indizierung eines Matrixelements im linearen Speicher Element Index ix Zeilenlaenge Index j Die globale Threadnummer kombiniert die Threadnummer im Block und die Blocknummer zur Eindeutigkeit Die globale Threadnummer wird f r die Adressie rung des Hauptspeicher benutzt 13 2 Grundlagen CUDA gibt dem Programmierer die Freiheit die Threads und die Speicher ohne Einschr nkun gen zu verwenden zu k nnen Beispielsweise funktioniert es aber nicht effizient wenn einige Threads unterschiedliche Wege im Programm durchlaufen obwohl die Hardware 32 Threads in einem Warp gemeinsam ausf hren muss Es gibt viele Regeln die zu beachten sind um effi ziente Kernel Funktionen zu entwickeln die im Benutzerhandbuch der vorbildlichen Praktiken 64 beschrieben sind Hier ein Auszug der wichtigsten Praktiken 14 Lineare Speicherzugriffsmuster sind am effizientesten da der Speicherkontroller keinen schnelleren Betrieb hat als den Burst Modus Soll hei en dass egal wie das Speicher abbild aussieht Feld Matrix oder Volumen die Threaddimensionierung dem angepasst werden muss Dann kann ein Thread ohne komplexere Adressberechnung sein Ele ment aus dem Speicher bearbeiten Als Beispiel wieder die Kernelfunktion vom Quell textabschnitt 2 1 in diesem Fall existieren genau so viele Threads wie Matrixelemente die in der gleichen Struktur angelegt sind Bei einem Speicherzugriff auf das nullte Ele men
90. en werden alle ste nummeriert und als Transferteil im Bild mit gr n markiert Zuletzt muss begin nend bei den InstTransfer store Operation dessen Transferteil r ckw rts durchlaufen wer den Wenn eine Operation gefunden wird die bereits der Pipeline zugeordnet wurde bricht die weitere Suche auf diesem Zweig ab analyseMemAccessPattern ist ein Platzhalter f r die n chste Version um die statischen bzw variablen Zugriffsmuster auf dem Speicher zu analysieren Im Prototyp wird diese Methode nicht ben tigt da die Anforderung existiert dass ausschlie lich statische Speicherzugriffe im Quelltext erlaubt sind 5 3 5 Parsebaum bersetzung Dieser Abschnitt entspricht dem bersetzungsschritt 2 aus dem Blockschaubild 5 4 5 3 5 1 SSA AST zu Block AST Nach der Analyse kann eine Instanz der Klasse sourcecompiler angelegt werden siehe Bild 5 10 Die ffentliche Methode compile generiert aus dem SSA AST einen neuen Block AST der aus Knoten besteht die der VHDL Pipeline entsprechen Dabei wird der SSA AST Knoten f r Knoten durchlaufen um den neuen Baum entstehen zu lassen SourceCompiler vhdlAst latencyLayerArray insertBlockAst layerDetermineRec lt VhdIBlock gt SourceAnalyser latencyFillLatencyArray latencySetinputDelay Bild 5 10 Auszug Klassendiagramm um die Compilerklasse Mit einer bersetzungstabelle siehe n chster Abschnitt wird auf jeden Knoten des SSA AST
91. enenverteiler engl crossbar switch Scheduler global geteilter Speicher Bild 3 6 Schematische Architektur der Speicher und der prozessierenden Elemente die Threadprozessoren aus einfachen fiinfstufigen MIPS Multithread Prozessoren mit dynami schen Prozess Schedulern implementiert worden Jeder Prozessor ist parametrisiert so dass die Anzahl der Threadprozessoren und die Bitbreite je nach FPGA Gr e gew hlt werden kann Weiter haben die Autoren die Idee spezifische Instruktionseinheiten f r eine Leistungssteige rung hinzuzuf gen bersetzungsvorgang Um den Programmieraufwand einer bersetzung gering zu halten werden so viele existierende Kompiliertechiken und Programmteile verwendet wie nur m g lich Zum einen spart dies viel Entwicklungszeit und zum anderen erh ht dies die Zuverl ssig keit da die Kompilierer Programmteile bereits weitl ufig genutzt werden Der bersetzungs vorgang ist in Bild 3 7 dargestellt Es gibt zwei Quellen f r die bersetzung einmal die Open CL Kernelfunktionen und einmal die Laufzeitumgebung die in unterschiedlichen Sprachen geschrieben werden k nnen Das GCC Frontend kann beide Quellen bersetzen W hrend die Laufzeitumgebung die LLVM Optimierer durchlaufen und effiziente bersetzte Objekte gene rieren werden die bersetzten Kernelfunktionen einer statischen Speicherzugriffsanalyse un terzogen Somit kann der Datenfluss zur Kompilierzeit optimal konfiguriert werden wodurch die O
92. entierungen Der Test PC auf dem die Messung durchgef hrt wurde besitzt ein Intel Core 2 Quad CPU Q6600 mit 2 4 GHz Taktrate 4 GBytes DDR2 Speicher mit 1066MHz Speichertakt Die Leistung der Grafikkarten werden im n chsten Abschnitt vorgestellt 111 6 Ergebnisse und Diskussion 6 1 2 Skalierung des Algorithmusses Die theoretischen Spitzenleistungen der drei Grafikkarten und der CPU sowie die erreichten Effizienzen der Haralick Bildmerkmalsimplementierung sind in Tabelle 6 2 aufgelistet Effizienz Effizienz Rechenleistung Speicherdurchsatz Rechnen Speicher GFLOPS GBytes s leistung durchsatz 1 CPU Q6600 theor Maximal 9 6 17 Implementierung 0 18 1 9 2 GPU 8800GTX theor Maximal 345 86 Implementierung 3 36 10 6 0 9 12 4 3 GPU GTX280 theor Maximal 622 141 Implementierung 8 20 8 1 3 14 8 4 GPU GTX480 theor Maximal 1345 177 Implementierung 15 37 7 1 1 21 3 Tabelle 6 2 Leistungsvergleich der Architektur mit der Implementierung Die Spalte Rechenleistung zeigt die theoretisch maximale Rechenleistung der jeweiligen Ar chitektur und die gemessenen Werte der Implementierung Ebenso wurde der maximale und der gemessene Speicherdurchsatz angegeben Die Messungen sind Durchschnittswerte f r den gesamten Algorithmus inklusive des Datentransfers zwischen GPU und CPU D h es gibt ein zelne Kernelfunktionen die sehr effizient rechnen bzw effiziente Sp
93. epr sentation von LLVM als AST verwenden k nnen Mit einem LLVM Programm l sst sich der LLVM AST aus dem LLVM IR SSA Quelltext generie ren Einen Parser f r LLVM IR SSA zu entwickeln ist einfach weil die assembler hn lichen Instruktionen zeilenweise zu lesen und zu interpretieren sind Den komplexeren LLVM AST zu verwenden weil er schon existiert war nicht Grund genug f r dessen Verwendung Weiter kann der eigene Parser gezielt f r die VHDL bersetzung entwi ckelt werden Eine nderung des LLVM AST f r VHDL w re weniger einfach gewesen 2 Aus dem SSA AST wird ein weiterer Syntaxbaum der Block AST generiert Die Kno ten des neuen Syntaxbaums sind keine Instruktionen mehr sondern Bl cke aus einem Baukastensystem f r Hardware Pipelines F r einige Instruktionen ist die Abbildung auf die Bl cke direkt m glich Hierbei zahlt es sich aus auf SSA Quelltext gesetzt zu ha ben da dieser einen unendlicher Registervorrat besitzt vergleichbar mit Signalen im 70 5 3 VHDL Kompilierer VHDL Quelltext Jedes Ergebnis wird in einem eindeutigen Register hinterlegt 35 add i32 30 33 entsprechend gibt es f r jedes Ergebnis in VHDL ein eindeutiges Signal s5 lt sO s3 3 Die Pipeline enth lt weitere Logik die neben dem Block AST existieren muss In diesem Schritt werden die Latenzzeiten berechnet und eventuelle Verz gerungsglieder hinzuge f gt Ebenso m ssen die Verbindungsglieder zum Rahmendesign konfiguriert
94. er CPUs im Bereich der parallelen Algorithmen erwartet wie z B bei der Bildverarbeitung Letzteres ist der kos teng nstigere und energiesparsamere Ansatz Eine Erweiterung des Rechen Clusters mit mehr Knoten und Beschleunigerkarten wird dadurch nicht ausgeschlossen 1 4 Forschungsfragen In dieser Arbeit werden zwei Themengebiete behandelt Erstens die Beschleunigung des Ha ralick Bildmerkmalalgorithmuses um die Geschwindigkeitsdiskrepanz zwischen der Daten aufnahme und Offline Prozessierung zu reduzieren Zweitens die Entwicklung einer verein fachten Programmierung der FPGA Karte f r die Online Prozessierung der aufgenommenen Bilddaten Mit einzelnen Fragen werden zentrale Forschungsfragen rund um das jeweilige Themengebiet entwickelt die in dieser Dissertation beantwortet werden e L sst sich der Haralick Bildmerkmalalgorithmus parallelisieren e Welche Co Prozessoren w rden f r eine Beschleunigung in Frage kommen Welche Re chenarchitektur passt besonders gut f r die Beschleunigung 1 Einf hrung und Ziele des Viroquant Projekts e Welche Beschleunigerkarte ist besser geeignet Grafikkarte oder FPGA Karte e L sst sich der Algorithmus im Bereich von zwei bis drei Gr enordnungen gegen ber einer CPU beschleunigen um den Biologen Wartezeiten zu ersparen e Welche Einflussfaktoren behindern eine weitere Beschleunigung e Rechtfertigt ein weiterer Arbeitsaufwand eine weitere Beschleunigung e Wie verh lt s
95. ereich von zwei bis drei Gr enordnungen Folgender Abschnitt zeigt einen Ansatz der den Anforderungen gerecht werden kann 3 2 2 Fazit f r eine Beschleunigung Diese Arbeit strebt den Ansatz an mit GPUs den Haralick Algorithmus inklusive aller 13 Bildmerkmale zu beschleunigen Folgende Gr nde sprechen daf r e Der Algorithmus enth lt berwiegend Flie kommaberechnungen die auf der GPU ein fach zu rechnen sind e Die Entwicklungszeit den Algorithmus auf die GPU zu parallelisieren ist k rzer als die Entwicklungszeit eines FPGA Designs auf der neusten Hardwaregeneration mit den fehlenden Bildmerkmalen e Die GPU bersteigt die theoretische maximale Rechenleistung der Flie kommaberech nungen eines FPGAs e Wegen der Offline Prozessierung ist es nicht wichtig die Berechnung nahe an die Sensor Elektronik zu kn pfen Auch der Energiebedarf der GPU ist im Rechencluster nicht kri tisch Eine h here Latenzzeit bei der blockweisen Berechnung ist bei der Offline Prozes sierung ebenfalls nicht relevant 3 3 Kompiliererentwicklung Die Online Prozessierung hat die Anforderung den FPGA Algorithmus den Bed rfnissen der Biologen entsprechend ver ndern zu k nnen Hardwarebeschreibungssprachen mit denen man den Algorithmus ver ndern kann sind f r die Biologen zu komplex Aus diesem Grund muss ihnen eine einfache Sprache zur Verf gen gestellt werden die sich in ein Hardwaredesign ber setzen l sst Dieser Abschn
96. ert werden damit ein Programm unterschiedli che OpenCL Ger te z B GPU und FPGA verwenden kann A OpenCL FPGA Beispielanwendung 1 void TestProgramKernelExecVecAdd const unsigned charx fileContent const size_t N o o o na wu v JO Ua A UDN 20 21 22 23 24 25 26 fileSize bool binary el_int status CL_SUCCESS cl_uint number 0 cl_device_id device NULL cl_context context NULL cl_program program NULL cl_kernel kernel NULL cl_command_queue queue NULL cl_mem meml NULL cl_mem mem2 NULL unsigned int h_meml NULL unsigned intx h_mem2 NULL unsigned int i 0 unsigned int Z 0 status clGetDeviceIDs NULL CL_DEVICE_TYPE_ACCELERATOR 1 amp device amp number if status CL_SUCCESS coutAndExit Could not find a device within platform status context clCreateContextFromType NULL CL_DEVICE_TYPE_ACCELERATOR NULL NULL amp status if status CL_SUCCESS coutAndExit Could not create context from Type status if binary program clCreateProgramWithBinary context 1 amp device amp fileSize amp fileContent NULL amp status if status CL_SUCCESS coutAndExit Could not create program with binary status else program clCreateProgramWithSource context 1 const char x 8fileContent amp fileSize amp status if status CL_SUCCESS coutAndExit Could not create program
97. erte und es entsteht mit dem Datentyp float eine Matrix mit der Gr e von 4096 x 4096 x 4Bytes 64M Bytes Speicherbedarf In einen 1024M Bytes gro en Grafikkartenspeicher w rden nur 16 Co Matrizen hineinpassen was wiederum die GPU nur zu einem Bruchteil auslasten w rde F r eine mas sive Parallelisierung des Algorithmusses m ssen die Co Matrizen kleiner werden Tats chlich sind die Co Matrizen nur sp rlich besetzt Das liegt daran dass die Zellbilder nicht rein zuf llig sind und die Pixelpaare bevorzugte Grauwerte haben Beispielsweise hat der Zel lenrand nur einen kleinen Wertebereich was bedeutet dass der Zellenrand rechts und links sehr hnlich ist Das gleiche trifft f r den Zellkern zu Besonders der Hintergrund des seg 49 4 Haralick Algorithmus GPU beschleunigt mentierten Zellbildes hat berall den gleichen Intensit tswert Allgemein entstehen bei der Co Matrix Berechnung mehr oder weniger bevorzugte Regionen in denen die Pixelpaare gez hlt werden w hrend andere Regionen komplett leer sind Bild 4 1 a zeigt eine sp rlich besetzte Co Matrix 0 4095 a b Bild 4 1 Bin rbild einer vollen Co Matrizen a und einer gepackten b Wei e Pixel entspre chen dem Wert Null schwarze Pixel einem von Null verschiedenen Wert Um Speicherplatz einzusparen werden alle Zeilen Aufgrund der Symmetrie auch Spalten die ausschlie lich Nullwerte enthalten entfernt Bild 4 1 b zeig
98. estandteile f r einen OpenCL FPGA bersetzer 66 5 3 VHDL Kompilierer 1 Die OpenCL Laufzeitumgebung ist eine Bibliothek mit Funktionen aus dem OpenCL Standard 36 siehe Bild 2 4 aus dem Grundlagenkapitel In der Bibliothek ist ein Kom pilierer integriert der Kernelfunktionen in unserem Fall f r den FPGA bersetzt All gemein verwaltet die Laufzeitumgebung die bersetzung und die Ausf hrung der Ker nelfunktionen die Speichertransfers und die Registerzugriffe auf den FPGA 2 Der VHDL Kompilierer besteht aus drei Programmen Clang Frontend LLVM IR Optimierer und VHDL Backend die zusammen eine bersetzungskette bilden In ihr wird eine OpenCL Kernelfunktion in eine VHDL Pipeline bersetzt 3 Das Rahmendesign bietet f r die generierte VHDL Pipeline einen Rahmen mit umlie gender Logik Speicherkontroller PCIe Core mit DMA Engine und Kontrolllogik Erst mit ihr kann die Pipeline mit Daten gef llt und eine Berechnung gestartet werden Der n chste Abschnitt 5 3 beginnt mit dem VHDL Kompilierer und beschreibt die Glieder der bersetzungskette sowie deren Implementierung Im anschlie enden Abschnitt 5 4 wird gezeigt welche Logik im Rahmendesign f r eine Ausf hrung notwendig ist und welche Im plementierungsans tze gew hlt worden sind Erst im letzten Abschnitt 5 5 nachdem das Rah mendesign bekannt ist wird die Implementierung der Softwareschnittstellen mit den OpenCL Funktionen beschrieben 5 3 VHDL Ko
99. f hrung ben tigen Handel C und CHiMPS oder ein Algorithmus versucht den seriellen Quelltext zu parallelisieren Trident Die paral lelen Sprachen haben den Vorteil bereits ein Paradigma zu liefern wie die Parallelit t auf dem FPGA abgebildet werden kann e F r den Biologen w rden die parallelen Sprachen OpenCL bzw CUDA und die Micro soft Accelerator Bibliothek in Frage kommen Sie sind leicht zu erlernen und erfordern nicht zwingenderma en Hardwarekenntnisse F r alle Genannten gibt es eine FPGA Entwicklung Das Derivat FCUDA CUDA f r den FPGA ben tigt allerdings zus tzli che Anweisungen f r den bersetzungsprozess und scheidet deswegen aus OpenRCL OpenCL f r rekonfigurierbare Logik hat alle w nschenswerten Eigenschaften mit einer Ausnahme n chster Punkt Der Microsoft Accelerator ist nicht so bekannt und verbrei tet wie OpenCL oder CUDA und die Accelerator Bibliothek ist im Vergleich nicht intuitiv zu erlernen OpenCL ist von der Programmierwelt besser akzeptiert e Die OpenRCL und die FCUDA Entwicklung verfolgt den Ansatz einer Rechnerarchi tektur wie die einer GPU vielen Threadprozessoren nachzuahmen Die Berechnungen werden auf mehrere Threadprozessoren verteilt wobei jede Operation mehrere Takte Re chenzeit beanspruchen kann FPGAs entfalten ihr Potenzial mit einer Hardwarepipeline in der alle Operationen parallel in jedem Takt berechnet werden Auch die Latenzzeit ist in einer Pipelineverarbeitung ge
100. g geachtet um Funktionalit t hinzuf gen zu k nnen Folgende Vorschl ge w rden den OpenCL FPGA Kompilierer verbessern e Die Verwendung eines OpenCL Frontends w rde die Nutzung des Shared Speichers er m glichen wof r es ein Konzept im FPGA Design zu entwickeln gilt e Das Hinzuf gen weiterer Sprachelemente wie if e1se Strukturen und Schleifen w rde die bersetzung komplexerer Programme erm glichen e Die Erweiterung der Speicherzugriffsanalyse und der entsprechenden Adresskomponen te l st die Einschr nkung bestimmter Speicherzugriffsmuster 121 7 Fazit und Ausblick 122 Zur Unterst tzung von loat Datentypen muss eine Flie kommabibliothek dem Kompi lierer und dem VHDL Block Vorrat hinzugef gt werden Komplexere Kernelfunktionen erh hen den Ressourcenbedarf der Pipelineregion auf dem FPGA der vergr ert werden muss Sofern die FPGA Ressourcen ausreichen k nnte die Pipeline mehrfach implementiert werden um unterschiedliche work groups parallel abarbeiten zu lassen was den Re chendurchsatz erh hen w rde Das Rahmendesign k nnte angepasst werden um gleichzeitig Rechnungen und Daten transfer zwischen Host und OpenCL Ger t zuzulassen Die vereinfachte Implementierung der Laufzeitumgebung m sste erweitert werden um dem vollen OpenCL Standard zu entsprechen Es gibt einen ICP Treiber um unterschiedliche OpenCL Laufzeitumgebungen nebenein ander anzubieten Sie m sste implementi
101. g wird f r jede generierte Co Matrix ein eigener Block geschaffen Jede Operation die auf die Bl cke angewendet wird impliziert die parallele Ausf hrung auf alle Co Matrizen In Bild 4 5 ist die Struktur der GPU Version in einem Struktogramm erl utert Die u erste Schleife iteriert ber alle Zellen des Multizellbildes Der Unterschied zur CPU Version ist dass mit jedem Scheifendurchlauf C Zellen gleichzeitig gelesen werden Innerhalb der Schleife werden f r alle C Zellen wiederum gleichzeitig alle Co Matrizen AD erstellt F r jede Sichtweise des Winkel A und der Distanz D wird eine eigene Co Matrix generiert Aus diesem bel uft sich die Anzahl an Kombinationen zu Ax D AD 56 4 3 GPU Implementierung Die Anzahl der CUDA Bl cke bel uft sich auf Cx AD in denen die Zwischenergebnisse und Bildmerkmale berechnet werden Am Ende des Schleifenk rpers werden die Bildmerkmale gespeichert und die Co Matrizen gel scht Schleife ber alle Zellen C in parallel generiere Matrizen C AD in parallel Berechne alle Zwischenergebnisse und Bildmerkmale C AD in parallel speichere Bildmerkmale l sche Matrizen Bild 4 5 Struktogramm der parallelen GPU Version Die Berechnung des Haralick Algorithmusses mit allen Bildmerkmalen und Zwischenergeb nissen ist Komplex Implementiert in eine einzige Kernelfunktion w rde das den Quellcode seitenlang werden lassen und die ben tigten Ressourcen der GPU w rden nicht ausrei
102. gbare OpenCL Implementierungen auf Datum Entwickler Architektur Quelle 20 04 2009 NVidia GPU 11 05 08 2009 AMD GPU und CPU 9 30 06 2010 IBM Power und Cell 12 13 09 2010 Intel CPU 13 Tabelle 3 2 OpenCL Implementierungen aufgelistet nach Erscheinungsdatum Apple 10 entwickelte f r die GPUs von Nvidia und AMD eine eigene OpenCL Implementie rung die im Betriebssystem Mac OS X Snow Leopard verankert ist ARM S3 und VIA bieten bereits Produkte an die OpenCL f hig sind jedoch existieren noch keine Softwarepa kete f r potenzielle Entwickler Eine vollst ndige Liste von OpenCL Implementierungen bzw Produkten die OpenCL f hig sind gibt es auf der Seite von Khronos 14 OpenCL f r den FPGA nutzbar zu machen wie es das OpenRCL Projekt 3 4 3 2 gemacht hat 43 1 2 3 4 5 6 7 Aa Bw N Oo amp VD o N 0 3 Stand der Technik bietet den Vorteil keine weitere Programmiersprache lernen und keine weitere Entwicklungs zeit f r eine Portierung investieren zu m ssen 3 4 4 2 Microsoft Accelerator Die Ver ffentlichung Computer without Processors 70 vertritt die Meinung dass der Re chenbedarf von Cloud Computing am besten mit einer Mischung vieler Rechenarchitekturen CPU GPU und FPGA erf llt wird und dass in der Zukunft h ufiger Mischarchitekturen zum Einsatz kommen Das Entwicklungswerkzeug Accelerator 72 von Microsoft zielt auf die Unabh ngigkeit der Ar
103. h der Pipeline 6 Optional kann die acht Bit gro e Pipeline Modul ID mit devsetprid aus dem Kontroll register ausgelesen werden um den Austausch zu verifizieren 110 6 Ergebnisse und Diskussion Nachdem die Implementierungen der GPU Beschleunigung offline Prozessierung im vierten Kapitel dargelegt und die Implementierung des OpenCL Kompilierers online Prozessierung im f nften Kapitel erl utert wurde werden in diesem Kapitel die Ergebnisse zu den Implemen tierungen zusammengetragen 6 1 GPU Beschleunigung 6 1 1 Geschwindigkeitsgewinn Folgende Tabelle 6 1 zeigt die Ausf hrungszeiten des Haralick Texturen Algorithmus die al le das gleiche Multizellbild f r ihre Berechnung verwendet haben Verglichen wird die Ori ginalsoftware mit einer optimierten Software Version einer ersten GPU Version I und einer optimierten GPU Version II Mit enthalten sind die Ausf hrungszeiten dreier unterschiedlicher Grafikkarten die im Zeitraum dieser Arbeit erschienen sind Ausf hrungs Faktor zu Faktor zu Faktor zu Zeit s 1 2 3 1 Original Software Version 2378 2 Optimierte Software Version 214 11x 3 GPU Version I 8800 GTX 11 1 214x 19x 4 GPU Version I GTX 280 6 6 360x 32x 1 7x 5 GPU Version II GTX 280 4 65 511x 46x 2 4x 6 GPU Version II GTX 480 2 55 933x 84x 4 3x Tabelle 6 1 Ausf hrungszeiten und Beschleunigungsfaktoren im Vergleich aller vorgestellten Implem
104. hen In Hardware wurde dies mit Multiplexer und Demultiplexer realisiert kontrolliert vom Transfermodus Im DMA Transfermodus be kommt die PCle Einheit Signale mit dma Pr fix den exklusiven Zugriff auf die Spei cherschnittstelle Die Speicherzugriffe werden direkt an die Speicherschnittstelle wei tergeleitet Im BUS Transfermodus erhalten die Transferbl cke Signale mit bus Pr fix die Kontrolle ber den Speicher Aufgrund der Einfachheit der Implementierung wur de darauf verzichtet beiden Schnittstellen gleichzeitig Speicherzugriffe zu erm glichen D h der Host kann erst auf den Speicher zugreifen wenn die Pipeline nicht rechnet Am Lese Bus und am Schreib Bus k nnen mehrere Transferbl cke die Slaves ange schlossen sein Die Anzahl der an den Bussen angeschlossenen Slaves wird von den Signalen bus_def_rd_size und bus_def_wr_size aus der Pipeline von der zus tzlichen Logik geliefert In der Speicherverwaltungseinheit sitzt der Bus Master der ber die sel Signale alle Slaves nacheinander selektiert die ihrerseits mit den done Signalen ent weder einen Speicherzugriff anfordern oder mitteilen dass sie keinen Bedarf eines Spei cherzugriffs haben Der Bus Master selektiert alle Slaves abwechselnd auf dem Lese Bus und dann auf dem Schreib Bus da es keine Notwendigkeit des Full Duplex Betriebs gibt obwohl die M glichkeit mit zwei getrennten Bussen best nde Wenn ein Slave des Schreib Busses selektiert wird kann dieser mit de
105. hreib Schnittstelle Sie besteht aus Datenleitungen Maskierungsleitungen und Kon trollleitungen Die minimale Datenmenge von 512 Bit muss immer in zwei aufeinander folgenden Takten mit 256 Bit Datenworten gesendet werden Ebenso kann die Schnitt stelle mitteilen dass sie gerade keine Daten akzeptiert beispielsweise wenn der interne Schreibpuffer voll ist Lese Schnittstelle Sie besteht aus den Datenleitungen und Kontrollleitungen Die ange forderten Daten werden ebenso wie beim Beschreiben als zwei aufeinander folgende 256 Bit Worte geliefert F r den Zweck dieser Arbeit besitzt die Benutzerschnittstelle des Speicherkontroller mehrere Nachteile Die Benutzerschnittstelle arbeitet mit fest eingestellten 200MHz Die Kommandoschnittstelle und die Schreibschnittstelle m ssen synchronisiert ange sprochen werden Es existiert ein spezifisches Zeitverhalten beim Schreiben was einen Schreibvorgang kompliziert gestaltet und eine Zustandsmaschine bedarf Beim Lesen einer Adresse mit Byteoffset werden die Daten innerhalb der 256 Bit Worte umsortiert was eventuell gar nicht gew nscht ist Die selben Adressleitungen m ssen f r das Lesen und das Schreiben verwendet werden Eine zwischengeschaltete Zugriffs Komponente besitzt vereinfachte Schnittstellen logisch in zwei Teile aufgeteilt eine zum Lesen und eine zum Schreiben Beide habe ihre eigenen Adress leitungen und Wartesignale die einer FIFO Schnittstelle hneln Die
106. hung zu Bild 5 5 Klassendiagramm des VHDL Backends 72 5 3 VHDL Kompilierer In den folgenden Abschnitten wird die Implementierung der bersetzungsschritte 1 bis 4 er l utert und anhand von Beispielen verdeutlicht 5 3 3 Parsebaum Generierung Dieser Abschnitt entspricht dem bersetzungsschritt 1 aus dem Blockschaubild 5 4 Bild 5 6 zeigt die Klasse sourceParser mit allen n tigen Klassen um den SSA AST zu generieren Das Parsen geschieht in der Methode parse in einer Schleife die jede Zeile des SSA Quelltextes mit drei Hilfsmethoden auswertet SourceAttrib InstructionType Bild 5 6 Klassendiagramm des Parsers mit unvollst ndiger Bezeichnung der Instanzvariablen und der Methoden findInstructionType identifiziert die Instruktion der Quelltextzeile und ordnet sie einer Ka tegorienummer zu In der Klasse instructionset sind alle Instruktionen als string gespeichert in der die Methode nach dem entsprechenden Eintrag suchen kann Die Klasse InstructionType enth lt die Zuordnung der Kategorienummer eine Art Enumerationstyp mit der sich die In struktion besser identifizieren und vergleichen l sst als mit einem string parseInstruction erstellt anhand der Kategorienummer eine spezialisierte Instanz von der abstrakten Klasse Instruction im Bild nicht dargestellt Das Parsen also das Auswerten der Quelltextzeile passiert im Konstruktor der abgeleiteten Klasse Jede Instruktion h
107. i gen sie f r ihre Ausf hrung Ein Beispiel einer OpenCL Anwendung wie die Funktionen der Laufzeitumgebung verwendet werden befindet sich im Anhang A 2 2 Rekonfigurierbare Hardware 2 2 1 Aufbau eines FPGAs Die Abk rzung FPGA bedeutet field programmable gate array frei bersetzt hei t das feld programmierbarer Logikschaltkreis Das Bild 2 5 zeigt den schematischen Aufbau eines FPGAs Er besteht aus vielen einzelnen Logikzellen LZ Blockspeichern Block RAM Multiplizie rern Ein und Ausgabebl cken IOB und einem programmierbaren Verdrahtungsnetzwerk Wie ein FPGA aufgebaut wird ist im Nachschlagewerk Das FPGA Kochbuch 78 gut er kl rt 17 2 Grundlagen BEN device_id e ee Ti ane context cl al coun Pe aa i clGetDevicelDs gt clCreateContextFromType gt lt W u clCreateCommandQueue cLeommand_queve command cLeommand_queve cl_kernel clSetKernelArg clEnqueueWriteBuffer ee 4 clEnqueueNDRangeKernel clEnqueueReadBuffer Bild 2 4 Verwendete Strukturen und Funktionen eines minimalen OpenCL Programms ein schlie lich einer bersetzung mit Kernelaufruf Pfeile sind als generierendes Ergeb nis zu interpretieren Punkte als Abh ngigkeit Hi ate uta HHH mi TT CHIH irh Eile ptr C ant a db ele an m me tuts tuts un E mE Eu N zus
108. ich die Entwicklungszeit einer GPU L sung zu einer FPGA L sung e Welche Programmiersprachen k nnen genutzt werden um die Entwicklungszeit eines FPGA Designs zu beschleunigen und zu vereinfachen e Welchen Vorteil besitzt eine parallele Programmiersprache wie z B OpenCL gegen ber einer seriellen Programmiersprache zur FPGA Beschreibung e Worin liegen die Unterschiede einer Architektur in der eine Pipeline entsteht gegen ber einer Architektur mit gleich bleibendem Rechenwerk e Wie sieht die Struktur eines Kompilierers f r eine Pipelinegenerierung aus e Welche weitere Logik wird an den Schnittstellen zur generierten Pipeline ben tigt F r das Themengebiet der Onlineprozessierung ergibt sich folgende zentrale Forschungsfra ge Wie sehen die Bausteine einer bersetzungskette aus die von der parallelen Pro grammiersprache OpenCL in eine VHDL Hardwarepipeline f r FPGAs bersetzen und welche Vorteile bietet diese Struktur Zusammenfassend l sst sich f r die Offlineprozes sierung fragen Wie l sst sich der Bildmerkmalalgorithmus von Haralick auf einer GPU beschleunigen welcher Beschleunigungsfaktor gegen ber einer CPU ist zu erreichen und welche Einflussgr en tragen ma geblich zur Beschleunigung bei 2 Grundlagen 2 1 Grafikkarten als Rechenbeschleuniger 2 1 1 Geschichtliche Entwicklung Die Graphics Processing Unit GPU ist ein Prozessor der die Central Processing Unit CPU f r grafisch
109. ickeln 5 4 2 PCle Core und DMA Engine Mit dem PCIe Core von Xilinx 8 1 wird ein Kommunikationskanal zwischen der Host Software und dem Hardware Design ber den PCI Express Bus hergestellt Mit dem Coregenerator von Xilinx wird der vorhandene Hardware PCle Core auf dem Virtex6 Chip konfiguriert Die we sentlichen Eigenschaften der Konfiguration sind e Der PCIe Core wird in der Xilinx Version 1 3 verwendet Aktuellere Versionen laufen nicht auf der verwendeten Entwicklungssteckkarte da dessen FPGA ein Prototyp Engi neering Sample ist und in diesem Fall eine eingeschr nkte Funktionalit t besitzt 91 5 OpenCL zu FPGA bersetzer e Es werden vier von m glichen acht Lanes verwendet e F r die Bus Kommunikation wird der PCle Standard der Generation 1 1 zugrunde ge legt Jede Lane hat eine maximale Ubertragungsrate von 250MB s 1000MB s entspre chend f r vier Lanes e Die Schnittstelle des PCle Cores soll mit einer Frequenz von 100 MHz angesprochen werden e Der PClIe Core ben tigt eine Lizenz die der Universit t geh rt Wenn die CPU Daten ber den PCIe Bus sendet oder liest PIO Mode kann eine Datenrate in der Gr enordnung von zehn Megabytes pro Sekunde erwartet werden Aus diesem Grund wird eine DMA Engine an den PCle Core geheftet die Datenraten von bis zu 790MB s lesend und 507MB s schreibend unterst tzt Der Unterschied zur theoretisch maximalen Bandbrei te besteht in den notwendigerweise zu ber
110. ie Harder Apichat Suratanee Karl Rohr Rainer Koenig und Reinhard Maenner Haralick s Texture Features Computation Accelerated by GPUs for Biological Applications In To appear in Modeling Simulation and Opti mization of Complex Processes Proceedings of the Fourth International Conference on High Performance Scientific Computing March 2 6 2009 Hanoi Vietnam Seite 127 138 Springer Verlag Berlin Heidelberg 2011 doi 10 1007 978 3 642 25707 0_11 Khronos Group OpenCL Quick Reference Card URL http www khronos org files opencl quick reference card pdf 2009 Khronos OpenCL Working Group The OpenCL Specification version 1 0 48 6 October 2009 R M Haralick Statistical and structural approaches to texture Proceedings of the IEEE Volume 67 5 786 804 1979 doi 10 1109 PROC 1979 11328 R M Haralick und K Shanmugam Computer Classification of Reservoir Sandstones Geoscience Electronics IEEE Transactions on Volume 11 4 171 177 1973 doi 10 1109 TGE 1973 294312 Robert M Haralick K Shanmugam und Its Hak Dinstein Textural Features for Image Classification Systems Man and Cybernetics IEEE Transactions on Volume 3 6 610 621 1973 John Hennessy und David Patterson Computer Architecture A Quantitative Approach Morgan Kaufmann 2007 Allen Holub Compiler design in C Prentice Hall Inc Upper Saddle River NJ USA 1990 Agility Design Solutions Inc Handel C Language Reference Manua
111. ie entsprechende Stelle geschoben werden Das ist eine gute L sung um 44 3 4 Software Hardware Kompilierer Speicherzugriffe zu reduzieren da die Daten einmal aus dem Speicher gelesen werden aber aus dem Schieberegister mehrfach verwendet werden Die Berechnung wird in Zeile 15 auf dem Zielger t zur Ausf hrung gebracht je nachdem welches Target instantiiert wurde Es gibt Implementierungen f r FPGAs Fpcatarget f r GPUs px9Target die auf die Shadersprache DirectX Version 9 aufsetzt und CPUs x64MulticoreTarget f r Vielkern CPUs mit Ausnut zung der SSE3 Vektorisierung Die Ver ffentlichung demonstriert in den Ergebnissen wie die Beschleunigung der DX9 Ver sion auf Ati und NVidia GPUs mit l nger werdenden Datenreihen linear skaliert W hrend die Beschleunigung mit der Vielkern CPU Implementierung aufgrund der Cachegr e ein Maxi mum hat und die Beschleunigung mit l nger werdenden Datenreihen mit kleinerem Beschleu nigungsfaktor nicht weiter ansteigt Ziel der Entwicklung ist es Algorithmen in einer Sprache zu schreiben und f r viele Zielger te nutzen zu k nnen Entwicklungszeit bzw Portierungszeit einzusparen M chte man das Maximum an Leistung des Zielger tes aussch pfen bleibt nichts anderes brig als die Nativ Sprachen CUDA VHDL der Zielger te zu benutzen 3 4 5 Fazit der FPGA Sprachen Diese Arbeit strebt den Ansatz an einen FPGA f r die Online Prozessierung einzusetzen Fol gende Gr n
112. ie sich aus der Basisadresse und dem Adressoffset ergeben Der Adressoffset wird aus den Parallelindizes hergeleitet PARAM_POSITION TRANS_MODE LINEAR_GLOBAL clkUser work item id rst idx_local_size_ x y z Adress berechnung idx_work_group_size_ x y z idx_work_group_id_ x y z base_pos base_rdy acalc_addr acalc_request req acalc_rdy acalc_update UP acalc_burst acalc_next acalc_valid acalc_start_grou group acalc_fin Bild 5 14 Schematische Darstellung des VHDL Adressblocks Oben Generic Ports und unten die Entity Ports e Die Basisadresse ist erst zur Laufzeit bekannt und muss ber die base Schnittstelle mit geteilt werden Der Genericparameter gibt der Komponente eine eindeutige Nummer zur Identifikation e Die Parallelindizes werden in aufsteigender Reihenfolge abgearbeitet In der Kompo 84 5 3 VHDL Kompilierer nente wird der kleinste Parallelindex inkrementiert und mit den brigen Indices der idx Schnittstelle verrechnet Zusammen mit dem Genericparameter der das Speicher zugriffsmuster bestimmt wird der Adressoffset bestimmt e Die Adressberechnung wird von einer Zustandsmaschine gesteuert Sie regelt auch die Kommunikation mit der acalc Schnittstelle nimmt Anfragen entgegen und gibt Be scheid wenn die Adressberechnung beendet ist Der funktionale Aufbau des Transferleseblocks ist in Bild 5 15 dargestellt Dieser Block hat die Aufgabe mit Hilfe des Adressblocks die D
113. ieder zu synchronisieren und am Ende die prozessierten Daten in den Grafikkartenspeicher zu kopieren In der Implementierung der GPU Version II werden in den meisten Kernelfunktionen die Operationen direkt auf dem Grafikkartenspeicher angewandt Lesen Ausf hren der Operationen und Speichern der prozessierten Daten geschieht ohne den Shared Speicher zu verwenden Synchronisation wurde hinf llig was zu einer beschleunigten Ausf hrung gef hrt hat Auch die Caches die in den neueren GPU Generationen vorhanden sind tragen dazu bei den Shared Speicher nicht mehr als Datenpuffer einsetzen zu m ssen Mit den gezeigten Ma nahmen reduzieren sich die Ausf hrungszeiten im Durchschnitt um den Faktor 1 4 Eine detaillierte Auflistung der Kernelfunktionen mit den Ausf hrungszeiten mit und ohne Optimierungen ist im Kapitel Ergebnisse 6 1 auf Seite 111 zu finden An dieser Stelle ist ebenso ein Geschwindigkeitsvergleich zur CPU und das Skalierungsverhalten mit der erreichten Rechenleistung in GFLOPS dargestellt 63 5 OpenCL zu FPGA bersetzer 5 1 Konzept Der beschriebene Ansatz f r einen OpenCL FPGA bersetzer aus Kapitel 3 4 5 wird hier ver feinert und gegen ber Alternativen abgewogen Einen FPGA einzusetzen ist notwendig weil eine FPGA Karte einen Datendurchsatz von mehreren hundert MBytes s aufnehmen kann Die Sensoren werden ber differentiale Signale LVDS mit dem FPGA verbunden Andere bliche Schnittstellen wie zum Beispiel USB o
114. ign Beide Instruktionen werden kombiniert und in InstSelect einen VHDL Block bersetzt InstComp BlockComp Wird mit einer Eins zu Eins Beziehung bersetzt Die SSA Instruktion parametrisiert die VHDL Komponente InstGetElemPtr Die Berechnung der Adresse passiert in der BlockAddr Komponente kombiniert mit der Ana lyse der parallelen Struktur InstTransfer BlockAddr Diese Komponente ist immer an eine BlockTransfer Komponente gekoppelt je nach dem welche Instruktion gemeint ist BlockTransRd Wird generiert wenn die Instruktion ein 1oad ist BlockTransWr Wird generiert wenn die Instruktion ein store ist Tabelle 5 2 bersetzungstabelle vom SSA AST zum Block AST Die OpenCL Kernelfunktion wird von vielen Threads durchlaufen genauso soll die Pipeli ne von vielen Datenelementen gestreamt werden Folglich existiert eine Verbindung zwischen dem n ten Datenelement mit dem n ten Thread aus dem work items Vorrat F r die Rechenpi 80 5 3 VHDL Kompilierer peline ist es nicht wichtig zu wissen von wie vielen Datenelementen Threads sie durchlaufen wird Aus diesem Grund wird die instca11 Klasse f r den Block AST nicht ben tigt Auch das Zugriffsmuster auf den Speicher ist f r die Rechenpipeline uninteressant Die Komponenten Block TransRd und BlockTransWr bieten lediglich einen lesenden bzw schreibenden Zugang zum Speicher In der BlockAddr Komponente wird der Index und die Zieladresse des aktu ell gestr
115. ilder l sst sich im allgemeinen sehr gut auf den Grafikkarten sowohl in der Pixel Ebene als auch in der Bild Ebene parallelisieren bzw beschleunigen Eine Anwendung f r die beschleunigte Offline Prozessierung ist der Haralick Bildmerkmalsalgorithmus der den Biologen gute Ergebnisse liefert daf r aber einen hohen Rechenaufwand besitzt Die GPU basierte Beschleunigung dieser Arbeit reduzierte die Re chenzeiten von Monaten auf Stunden Aufgrund des Skalierungsverhaltens der letzten GPU Generationswechsel versprechen zuk nftige Grafikkarten mit einem einfachen Austausch ei ne weitere Beschleunigung ohne den Algorithmus anpassen zu m ssen Die zu erwartende Beschleunigung mit der bereits erzielten ergeben keinen Bedarf den Algorithmus weiter ver bessern zu m ssen Eine weitere Beschleunigung w rde f r die Gesamtausf hrungszeit der Algorithmenkette aus der automatischen Bildanalyse keinen nennenswerten Vorteil bieten Eingesetzte CPU Version 1 Monat Optimierte CPU Version 3 Tage 8800 GTX GPU Version 2 Stunden GTX 480 GPU Version Il 45 Minuten Bild 7 1 Vergleich der Ausf hrugszeiten der unterschiedlichen Versionen Bild 7 1 illustriert die Ausf hrungszeiten des Haralick Algorithmuses mit unterschiedlichen Implementierungen Als Referenz dient die Originalversion die eingesetzt wurde um die Bild merkmale zu berechnen Sie ben tigt f r einen Datensatz einer bestimmten Gr e einen Monat 119
116. in ein Speicherabbild berf hrt und die Funktion berpr ft Die se Aufgaben werden von den drei Teilen erledigt Zeilenrekonstruktion Als vorprozessierenden Schritt werden Leerzeichen Tabulator Zeichen Zeilenende Zeichen und Kommentare gefiltert da sie f r die bersetzung in den meisten Spra chen keine Relevanz haben 21 2 Grundlagen Lexikalische Analyse Als erstes muss der Quelltext in Tokens zerlegt werden Tokens sind grammatikalische Bausteine z B Schl sselworte Sprachsymbole Bezeichner Operatoren usw Syntaktische Analyse Im zweiten Schritt werden die Tokens den Grammatikregeln der Spra che unterzogen und gepr ft ob deren Reihenfolge zul ssig ist Dabei wird ein Syntaxbaum AST abstract syntax tree im Speicher konstruiert Gibt es einen Regelversto bricht die syn taktische Analyse auch Parser genannt mit einer Syntax Fehlermeldung ab Semantische Analyse Zuletzt wird inhaltlich nach der Bedeutung und dem Sinn gepr ft Mit Hilfe von Attributen wird der Syntaxbaum mit zus tzlichen Informationen angereichert Varia blen und parametrisierte Funktionsreferenzen werden in einer Objektabelle aufgelistet und mit jeder Zuweisung einer Typpr fung unterzogen Widerspricht das Programm der Sprachlogik bricht der Kompilierprozess mit einer Semantik Fehlermeldung ab 2 3 2 Backend Das Backend ist der zweite Teil eines Kompilierungsprozesses der folgende Aufgaben um fasst Generierung ei
117. in passen Die Sch tzung ber cksichtigt ausschlie lich Integer Operatoren und eine durchschnittliche Nutzung aller existierender Pipelinebausteine Sofern eine Flie komma bibliothek in den Kompilierer einbezogen wird w re die Bausteindichte mit Flie kommaope ratoren wesentlich kleiner 6 2 5 Beispiel Applikationen Ein Multizellbild das vom Haralick Bildmerkmalsalgorithmus offline auf der GPU prozessiert wird muss einen planen Hintergrund der Bereich zwischen den Zellen mit Nullwerten haben Eine Variante den Hintergrund zu entfernen ist das Multizellbild 6 1 a mit einem segmen tierten Bin rbild 6 1 b zu multiplizieren Das Bin rbild hat den Hintergrundwert Null und innerhalb der Zellen den Wert Eins Die Aufgabe den Hintergrund zu entfernen l sst sich auf dem FPGA online prozessieren Fol gendes Quelltextbeispiel 6 1 zeigt die Kernelfunktion die dazu imstande ist und sich f r den FPGA bersetzen und ausf hren l sst __ kernel void removeBGwithSement Img intx multicell int segment int Z int w int idx get_global_id 0 116 OIDO ua a LODO a BF BW Ye 6 2 OpenCL Kompilier a Bild 6 1 Multizellbilder a verrauscht im Hintergrund und b bin r segmentiert Il int idy get_global_id 1 int index idy w idx Z index multicell index segment index Quelltext 6 1 Kernelfunktion die ein Multizellbild mit einem segmentierten Bin rbild multipl
118. in x oder exp x Speicher und Register Jeder TP hat unterschiedliche Speicherbereiche zur Verf gung Daten abzulegen Am schnellsten sind die 32786 Register mit je 4 Byte Speicher die auf alle TPs auf geteilt werden Der geteilte Speicher Shared Speicher ist f r den Datenaustausch zwischen unterschiedlichen TPs gedacht Es existiert ein 64 kBytes Shared Speicher der gleichzeitig als L1 Cache verwendet wird Weitere Details verschiedener Speicher sind im Abschnitt CUDA erl utert Die theoretisch maximale Rechenleistung berechnet sich durch 480 Thread prozessoren x 1 4 GHzx2 Operationen 1344 GFLOPS mit einfacher Genauigkeit SP single precision Die TPs sind mit 1 4GHz getaktet und mit der MAC Operation k nnen sie gleichzeitig zwei Ope rationen die Multiplikation und die Addition ausf hren Wenn in doppelter Genauigkeit DP double precision gerechnet wird ist die Rechenleistung um den Faktor acht kleiner 2 1 3 Programmiersprache CUDA Die Compute Unified Device Architecture CUDA ist eine Programmiersprache die auf C auf setzt Sie erm glicht das Programmieren von NVIDIAs Grafikprozessoren mit nicht grafischen Anwendungen CUDA besteht aus zwei Teilen den Kernel Funktionen die parallel tausende Threads auf der GPU ausf hren k nnen und der Laufzeitumgebung einem Funktionsumfang der Speichertransfers und Kernelaufrufe vom Host aus regelt um die GPU zu steuern In CUDA kann der Programmierer einen Algorithmus pa
119. ine Variable im Shared Speicher hinter legen Diese Einschr nkung hat Einfluss auf die F higkeiten des Kompilierers Daten k nnen zwischen den Threads nur ber den globalen Speicher ausgetauscht werden Urspr nglich war geplant ein OpenCL Frontend zu verwenden Zu Beginn der Entwicklung war bekannt dass OpenCL Entwickler daran arbeiten Clang f r OpenCL Kernelfunktionen zu erweitern Heute ist bekannt dass Apple und NVIDIA ein OpenCL Frontend basierend auf Clang und LLVM verwenden 17 um Quelltext in OpenCL f r ihre Plattformen zu berset zen Wir hatten darauf spekuliert dass das OpenCL Frontend mit der Zeit ver ffentlicht wird um es als Ersatz zu Clang verwenden zu k nnen was bisher nicht geschehen ist Clang in die ser Arbeit f r OpenCL Kernelfunktion abzu ndern war zeitlich keine Option denn der Fokus dieser Arbeit liegt auf dem neuartigen VHDL Backend Ein Vorteil LLVM IR zu verwenden ist es den umfangreichen Optimierer f r diese Zwischen sprache nutzen zu k nnen Bild 5 3 zeigt ein Beispiel wie die Kernelfunktion vom Clang Frontend in die Zwischensprache LLVM IR bersetzt wird und danach die Anzahl der Instruk tionen vom LLVM Optimierer reduziert wird Ohne Optimierer betr gt der LLVM IR Quell text ber 40 Zeilen mit lediglich 12 was einer Reduktion von 70 entspricht Die Kommando zeilen Dokumentation des Optimierers zeigt welche Verfahren f r die Quelltext Reduktion existieren Der Optimierer wird weg
120. iprozessor ausgef hrt durch andere CUDA Bl cke verdr ngt bzw beendet wenn alle Thread des Blocks das Ende der Kernelfunktion erreicht haben Die genaue Zuordnung der CUDA Bl cke zu den SMs und die Verteilung der Warps auf die Threadprozessoren passiert dynamisch zur Laufzeit und ist deswegen nicht vorhersagbar Die CUDA Bl cke werden in ihrer Ausf hrung verdr ngt wenn ihre Threads Speichertransfers initiieren und auf die Daten vom Speicherkontroller warten Da die Latenzzeiten viele hundert Taktzyklen dauern lohnt es sich w hrend dessen einen anderen CUDA Block auszuf hren Sofern ein Vielfaches an Bl cken zu den SMs existiert k nnen die Latenzzeiten der Speicherzugriffe hinter der Berechnungszeit anderer CUDA Bl cke vollst n dig versteckt werden Tabelle 2 1 zeigt alle verf gbaren Speicherbereiche die von den Kernelfunktionen genutzt wer den k nnen Register Die Programmierer k nnen auf die Register nicht direkt zugreifen Der CUDA Kompilierer verwaltet die Register und strebt an sie sehr effizient zu nutzen da sie die ge ringste Latenzzeit aufweisen Lokale Speicher Falls ein CUDA Block mehr Register ben tigt als vorhanden sind m ssen 11 2 Grundlagen Gr e Latenz Chip Cached GPU Zugriffs zeiten integriert Speicher Zugriff beschr nkung Register 8192 1 Ja Nein lesen schreiben pro TP Local global 1 800 Nein Ja lesen schreiben pro TP Shared 16 KB 2 Ja Nein lesen schreiben pro SM Global 1 5
121. it weniger Rechenoperationen ersetzt werden Die restlichen Bildmerkmale und Definitionen sind unver ndert und werden zur Vollst ndigkeit mit Namen aufgelistet Angular Second Moment 4 1 Contrast 4 2 Variance 4 4 Inver se Difference Moment 4 4 Sum Difference Average 4 6 Sum Variance 4 7 Sum Entropy 4 8 Entropy 4 9 Difference Variance 4 10 Difference Entropy 4 11 und Information Measurement II 4 13 Die meisten Bildmerkmale 4 1 4 4 4 6 4 8 und 4 10 4 13 h ngen von anderen Bild merkmalen und Zwischenergebnissen bzw der Definitionen ab Um eine zeitintensive doppelte Berechnung der Bildmerkmale und Zwischenergebnisse zu vermeiden muss die richtige Rei henfolge ermittelt werden Die Abh ngigkeiten wurden analysiert und in einem Graphen in Bild 4 3 dargelegt Jeder Kreis des Graphen ist ein Bildmerkmal f r dessen Berechnung alle anderen mit Linien verbundenen Kreise bzw K stchen mit Zwischenergebnissen berechnet sein m ssen da dessen Ergebnisse in die Berechnung mit einflie en Zum Beispiel muss erst das Ergebnis von Bildmerkmal 4 7 ermittelt werden weil Bildmerkmal 4 6 es f r seine Be rechnung ben tigt 53 4 Haralick Algorithmus GPU beschleunigt PRESA er Er a RR A y Ze yA E On O O gt gt abh ngig von Bild 4 3 Abh ngigkeitsgraph fir die Berechnung des Haralick Texturen Bildmerkmals in Kreise und Zwischenergebni
122. itt behandelt die Entwicklung von Kompilierern um eine geeignete Sprache in ein Hardwaredesign bersetzen zu k nnen 32 BOW Ne 3 3 Kompiliererentwicklung 3 3 1 Ubersicht Kompilierer Baukasten Die ersten Entwickler von Kompilierern mussten Assembler benutzen was viele Jahre Ent wicklungszeit ben tigte Von da an konnten weitere Kompilierer mit hohen Programmierspra chen schneller entwickelt werden Auch das war noch immer m hselig da die Komplexit t der Grammatiken beispielsweise in C sehr hoch ist Es wurden Programme entwickelt wie z B LEX die die lexikalische Analyse bernahm und YACC 45 die eine programmierte Gram matik syntaktisch analysiert und einen AST konstruiert Die Open Source Varianten hei en FLEX und BISON Der n chste Schritt der Entwicklung war es ein Framework zu program mieren das hilft Kompilierer zu entwickeln Es enth lt viele vorgefertigte modulare Struktur elemente eines Kompilierers zusammengefasst in eine Bibliothek mit Hilfsprogrammen zur Analyse Omniware 19 bietet ein Framework mit dem Fokus auf die sichere Ausf hrung von Programmmodulen in mobilen Endger ten an ohne die laufende Ausf hrungsumgebung sch digen zu k nnen Das Kompilierer Framework Phoenix 60 ist f r die Entwicklung von Kompilierer Backends gedacht die auf Microsoft Kompilierer aufsetzen ROSE 69 ist ein freies Kompilierer Framework das speziell f r objektorientierte Sprache geeignet ist LLVM ist derzeit
123. iziert Existiert zur Zeit der Aufnahme kein bin res Segmentbild aus einer anderen Quelle der Online Prozessierung kann ein Algorithmus der den Hintergrund entfernt fiir den FPGA tibersetzt werden Der vorgestellte Algorithmus 6 2 verwendet einen Schwellwert der tiber dem Rau schen liegt um den Hintergrund auf Null zu setzen __kernel void removeBGwithSementImg int multicell ints Z int w int idx get_global_id 0 get_global_id 1 int index idy w idx int idy Z index multicell index gt 10 multicell index 0 Quelltext 6 2 Kernelfunktion die ein Multizellbild einem Schwellwert unterzieht Die letzte Methode die alle Pixel unterhalb eines Schwellwertes auf Null setzt manipuliert sowohl die Pixel die sich im Hintergrund befinden als auch diejenigen die sich innerhalb der Zellen befinden Werden zu viele Pixel innerhalb der Zellen ver ndert bleibt die M glich keit einen komplexeren Segementierungsalgorithmus in OpenCL zu implementieren Kann die komplexe Kernelfunktion nicht mit dem FPGA Kompilierer bersetzt werden dann kann sie f r GPUs bersetzt werden ohne dass diese ver ndert werden m ssen 117 7 Fazit und Ausblick 7 1 Ziele der Arbeit Diese Arbeit bietet L sungen zur Online und Offline Prozessierung aus dem ViroQuant Pro jekt an Bei der Offline Prozessierung k nnen GPUs eingesetzt werden um einen Rechencluster zu beschleunigen Die Verarbeitung der Mikroskopb
124. jeder Takt einem Ergebnis eines Threads entspricht ben tigt die Kernelfunktion in Form einer Pi peline entsprechend viele Takte plus der Latenzzeit um alle Threads einer work group auszuf hren 5 4 8 Taktnetz Wie bereits erw hnt gibt es drei Taktnetze mit unterschiedlichen Frequenzen clkDDR3 200 MHz Benutzerschnittstelle Speicher clkUser 133 MHz Rahmendesign und Pipeline cIkPCle 125 MHz Benutzerschnittstelle PCIe Die Taktrate der Pipeline und weite Teile des Rahmendesigns miissen schneller getaktet sein als clkPCle weil es sonst zum Uberlauf der Datenpuffer in der PCIe Einheit kommen k nnte Ebenso sollte sie wegen eines m glichen Pufferiiberlaufs in der Speicherverwaltungseinheit nicht schneller als 200 MHz sein Die Komponenten der Pipeline sind fiir eine Frequenz mit 200MHz entwickelt worden Beliebige Kombinationen der Pipeline Komponenten hoher Ver drahtungsaufwand der Stall Logik der Datenflusskontrolle und der Speicherbus Oder Logik k nnen die Frequenz einschr nken Die Pipelinefrequenz wird auf vorsichtige 133 MHz ge 99 5 OpenCL zu FPGA bersetzer setzt Mit dieser Frequenz konnten eine Vielzahl unterschiedlicher Kernelfunktionen in synthe sef hige und lauff hige Pipelines bersetzt werden und garantieren so eine fehlerfreie berset zung im Zeitverhalten 5 5 OpenCL Laufzeitumgebung 5 5 1 FPGA Kommunikation 5 5 1 1 Entwicklungssteckkarte ML605 7 5 Bild 5 23 ML605 Entwicklungsp
125. ktion bergeben wird diese von der Funktion cicreateProgramWith Source eingelesen und einer Programm Struktur zugeordnet Die bersetzung passiert erst mit dem Aufruf von c1BuildProgran Befindet sich in der Programm Struktur die bersetzte Repr sentation wird diese in den FPGA geladen Handelt es sich um Quelltext wird dieser mit der Ausf hrung 1 eines Bash Skripts 2 des VHDL Kompilierers und 3 eines TCL Skripts 106 1 2 3 4 5 6 7 8 9 10 11 12 13 5 5 OpenCL Laufzeitumgebung in die bersetzte Repr sentation gebracht und dann in den FPGA geladen Bash Skript Es beinhaltet zwei Programmaufrufe und mehrere Pr fungen Als Parameter er wartet das Skript eine OpenCL Datei mit einer Kernelfunktion und der Dateierweitung cl Das Skript pr ft die Existenz des Parameters und die Existenz der Datei mit der cl Endung Das C Frontend wird aufgerufen clang c m32 emit llvm Si o Sfile bc um in die SSA Zwischensprache LLVM IR zu bersetzen Die Ausgabedatei hat eine bc Endung Der Optimierer reduziert die IR Befehle in ein kompaktes Programm opt 03 s o Sfile 11 file bc VHDL Kompilierer Dieser wurde im Abschnitt 5 3 ausf hrlich beschrieben Er bersetzt eine 11 Datei in eine pipeline vhdl Datei ssacompiler build pipeline 11 build pipeline vhd TCL Skript Die pipeline vhdl wird vom einem TCL Xilinx Skript Tool Command Lan guage in eine bit Datei ein Hardwarede
126. l 2009 Justin Richardson Kunal Gosrani Siddarth Suresh Jason Williams Alan D George Com putational Density of Fixed and Reconfigurable Multi Core Devices for Application Ac celeration RSSI 2008 Randi Rost John Kessenich Dave Baldwin The OpenGL Shading Language URL http www opengl org documentation glsl1 2002 Stephen C Johnson Yacc Yet Another Compiler Compiler Technischer Report 1979 Bernd Schwarz Jiirgen Reichardt VHDL Synthese Entwurf digitaler Schaltungen und Literatur 47 48 49 50 51 52 53 54 55 56 57 Systeme Oldenburg Verlag M nchen 2009 Andreas Kugel Guillermo Marcus und Wenxue Gao The MPRACE Framework URL http 1i5 ziti uni heidelberg de mprace Chris Lattner und Vikram Adve LLVM A Compilation Framework for Lifelong Program Analysis amp Transformation In CGO 04 Proceedings of the international symposium on Code generation and optimization Seite 75 IEEE Computer Society Washington DC USA 2004 doi 10 1109 CGO 2004 1281665 Chris Lattner und Vikram Adve LLVM Language Reference Manual 2011 G Lienhart G Marcus Martinez A Kugel und R Manner Rapid Design of Special Purpose Pipeline Processors with FPGAs and its Application to Computational Fluid Dynamics In Field Programmable Custom Computing Machines 2006 FCCM 06 14th Annual IEEE Symposium on Seite 301 302 april 2006 doi 10 1109 FCCM 2006 6
127. latine als PCle Steckkarte verwendet Das Bild 5 23 zeigt die Entwicklungssteckkarte von Xilinx 82 die in dieser Arbeit fiir den Kompilierer verwendet wird Die Karte ist mit einer Vielzahl von Bausteinen und Schnittstel len ausgestattet um m glichst viele unterschiedliche Beispieldesigns und Entwicklungsanwen dungen demonstrieren zu k nnen F r die Kompiliererentwicklung unwichtige Merkmale sind Gigabit Transceiver Gigabit Ethernet Schnittstelle USB 2 0 Schnittstelle ein DVI Monitor anschluss und ein 16 mal 2 Zeichen LCD Monitor Die wichtigen Hauptmerkmale in Bezug auf den Kompilierer die teilweise bereits erw hlt wurden sind hier aufgelistet 100 5 5 OpenCL Laufzeitumgebung DDR3 SO DIMM Speicher 512 MB Das 512 MB gro e Speichermodul wird als globaler Speicher verwendet Es ist m glich es durch ein gr eres zu ersetzen womit der Speicherkon troller neu konfiguriert werden muss PCI Express x8 Stecker Die PCIe Schnittstelle wird f r die Kommunikation zwischen Karte und Host PC verwendet Die Anbindung der DMA Engine liegt bei vier Lanes der ersten PCIe Generation PCIe x4 v1 0 200 MHz Differentialoszillator Dieser Oszillator ist die Taktquelle der Taktnetze clkUser und clkDDR3 Das Taktnetz clkPCle wird von der PCIe Schnittstelle gespeist LEDs und DIP Schalter Die Leuchtdioden werden f r die Fehleranzeige und der Betriebsan zeige verwendet Mit den Schaltern kann Testlogik aktiviert werden um die o
128. lge auf siehe Bild 5 8 SourceAnalyser analyse analyseParallelStruct analyseParallellndices analyseBranchPart SourceParser analysePipelinePart analyseTransferPart analyseMemAccessPattern Bild 5 8 Auszug Klassendiagramm um die Analyseklasse analyseParallelIndices untersucht welche parallele Indizierung im Quelltext vorhanden ist Das Untersuchungsergebnis ist welche Dimensionierung die Parallelindizes benutzen Die Analysemethode sucht im Parsebaum nach ca11 Instruktion hinter der sich folgende Funkti onsaufrufe 35 befinden k nnen e uint get_work_dim Gibt die Anzahl benutzter Dimensionen zur ck size_t get_global_size uint D Dimensionsgr e der globalen work items e size_t get_global_id uint D Globale work item Nummer der entsprechenden Dimen sion size_t get_local_size uint D Dimensionsgr e der lokalen work items size_t get_local_id uint D Lokale work item Nummer der entsprechenden Dimensi on size_t get_num_groups uint D Dimensionsgr e der work groups size_t get_group_id uint D Nummer der work group der entsprechenden Dimension Mit der Abfrage des Parameters n kann die Dimension der entsprechenden Gruppe ausgelesen werden Die Dimensionierung gibt Hinweise auf das Zugriffsmuster der Speichertransfers z B das Lesen eines Arrays einer Matrix oder eines Volumens Die Methode analyseParallelstruct ist ohne Implementierung Sie ist ein Pl
129. lt die eine Art zweidimensionale Histogramme darstel len Auf den Matrizen werden die Bildmerkmale berechnet Die Matrizen und die Bildmerk male werden im Folgenden beschrieben und f r eine beschleunigte Berechnung analysiert 4 1 1 Co occurrence Matrizen Die Berechnung der Co occurrence Matrizen Co Matrizen basiert auf einer Statistik zweiter Ordnung und ist in 37 und 38 beschrieben Es werden Histogramm Matrizen Co Matrizen anhand benachbarter Pixelpaare erstes und zweites Pixel aus dem Quellbild gebildet Die Pi xelpaare werden f r eine bestimmte Sichtweise angeordnet gemeint ist ein bestimmter Pixel abstand und ein Winkel des ersten und des zweiten Pixel zueinander Wobei der Grauwert des ersten Pixel die Zeile der Co Matrizen adressiert und das zweite Pixel die Spalte Die ermittelte Zelle wird entsprechend eines Histogramms um Eins akkumuliert Die Co Matrix ist vollst n dig wenn alle Pixelpaare die aus dem Quellbild entstehen k nnen aufsummiert worden sind Ein ausf hrliches Beispiel gibt es in 37 F r jede Sichtweise wird eine eigene Co Matrix gebildet die ein Vorkommen der Grauwerte unter einer gewissen Anordnung der Pixelpaare repr sentiert Veranschaulicht sind die Matrizen eine Kombination aus Ortsinformationen und zweidimensionalem Histogramm Die Gr e der Co Matrizen ist abh ngig von der Anzahl an m glichen Grauwerten im Quell bild Bei einer Bittiefe von 12 Bit existieren 4096 unterschiedliche Grauw
130. m done Signal die Adresse die Daten und die Information ob es sich um einen Burst Zugriff handelt senden Das valid Signal zeigt ob der Bus f r einen Transfer beansprucht wird Auf dem Lese Bus gibt es die Problematik dass der Slave der Daten angefordert hat wieder identifiziert werden muss um die Daten richtig zuzuordnen Gel st wird das Pro blem mit einem Job Puffer und einer Zustandsmaschine die Speicheranfragen mit der Slave ID zwischenspeichert Die Anfrage besteht aus der Adresse einem Burst Signal 5 4 Rahmendesign clkUser rst ddr3_rd_valid ddr3_rd_data dma_wr_en dma_wr_addr dma_wr_data dma_rd_addr dma_rd_burst dma_rd_en bus_rd_burst bus_rd_addr_valid bus_rd_addr bus_wr_addr bus_wr_data bus_wr_valid bus_wr_burst bus_wr_write bus_ctrl_rd_done bus_ctrl_wr_done bus_def_rd_size bus_def_wr_size ctrl_pr_config ctrl_block_end ctrl_block_start MemManager FIFO Zustandsmaschine ddr3_rd_addr ddr3_rd_burst ddr3_rd_en ddr3_wr_addr ddr3_wr_burst ddr3_wr_en ddr3_wr_valid ddr3_wr_data dma_rd_data dma_rd_valid bus_rd_data bus_rd_data_valid bus_rd_data_sel bus_ctrl_rd_sel bus_ctrl_wr_sel Bild 5 21 Schematisches Blockschaltbild der Speicherverwaltungseinheit 97 5 OpenCL zu FPGA bersetzer und einem Giiltigkeitssignal ob es eine Leseanforderung gibt Kommen nach der La tenzzeit des Speicherkontrollers die Daten wird aus dem Job Puffer di
131. menge aller OpenCL Funktionen in einer Biblio thek implementiert genug um eine Demonstration zu erm glichen Die nicht implementierten Funktionen geben einen Hinweis aus und beenden das Programm falls sie von einer OpenCL Anwendung verwendet werden Die OpenCL Funktionen der Laufzeitumgebung sind ANSI C w hrend die Kommunikations klasse und die MPRACE Bibliothek in C entwickelt sind Das bedeutet dass aus den C 104 on Dn Fw NY eS 5 5 OpenCL Laufzeitumgebung Funktionen der Laufzeitumgebung Klassenmethoden aufgerufen werden miissen Abhilfe schaf fen R ckruffunktionen call back functions die in der C Umgebung deklariert aber in C definiert werden Die Implementierung der Call Back Funktionen erstellt die n tigen Klassen Instanzen und setzt die C Funktionsaufrufe in Klassen Methodenaufrufe um Es existiert f r je de Methode der Kommunikations Klasse DeviceTrans und der Speichertabellen Klasse Device Mem eine entsprechend bezeichnete Call Back Funktion Die Funktion systemca11 ist eine selbst entwickelte Variante der Bibliotheksfunktion system die Linux Programmaufrufe ausf hrt Die Bibliotheksfunktion lie sich nicht korrekt aus f hren weil deren fork zur Erzeugung eines Kind Prozesses eine Kopie der DMA Puffer erstellt der physikalische Speicheradressen enth lt Sobald der Kind Prozess beendet wird werden alle Speicherbereiche inklusive DMA Puffer freigegeben auch der physikalische Spei cher
132. mmable Logic and Applications 2005 International Conference on Seite 317 322 aug 2005 doi 10 1109 FPL 2005 1515741 75 Justin Tripp Preston Jackson und Brad Hutchings Sea Cucumber A Synthesizing Com piler for FPGAs In Manfred Glesner Peter Zipf und Michel Renovell Editors Field Programmable Logic and Applications Reconfigurable Computing Is Going Mainstream Volume 2438 von Lecture Notes in Computer Science Seite 51 72 Springer Berlin Hei delberg 2002 doi 10 1007 3 540 46117 5_90 76 Richard Wain lan Bush Martyn Guest Miles Deegan Igor Kozin Christine Kitchen Cheshire Wa Ad Richard Wain lan Bush Martyn Guest Miles Deegan Igor Kozin und Christine Kitchen An overview of FPGAs and FPGA programming Initial experiences at Daresbury Technischer Report 2006 doi DL TR 2006 010 77 Xiaojun Wang und Miriam Leeser VFloat A Variable Precision Fixed and Floating Point Library for Reconfigurable Hardware ACM Trans Reconfigurable Technol Syst Volume 3 16 1 16 34 September 2010 doi 10 1145 1839480 1839486 78 Markus Wannemacher Das FPGA Kochbuch MITP Verlag 1998 79 Xilinx Development System Reference Guide v10 1 Edition 2008 80 Xilinx Partial Reconfiguration User Guide ug702 v12 3 Edition Oktober 2010 81 Xilinx Virtex 6 FPGA Integrated Block for PCI Express User Guide 2010 82 Xilinx Virtex 6 FPGA ML605 Evaluation Kit URL http www xilinx com products
133. mmierer entwickelt worden die eine einfache C hnliche Sprache gegen ber den g ngigen Hardware Beschreibungssprachen bevorzugen Im Benutzerhandbuch 42 sind alle nicht standardisierten C Spracherweiterungen erl utert die eine gezielte Hardwaresynthese auf einer h heren Abstraktionsebene erm glichen Die Konzepte von Handel C basieren auf seriellen und parallelen Programmabl ufen und Kanal Kommunikation Das Bild 3 2 demonstriert die Konzepte und zeigt Details der Sprache void main void Block 1 int 2 a int 4 b int 8 c int 8d int 10 e wann chan ch with fifolength 8 b afa Block 1 Block par 2 seq y b b ta Block 2 c b 3 Block 3 ch e Kanal 1 3 Block _ Kanal 1 Block 4 ch d d dq gt gt 2 Block 4 Block e c d Block 5 5 a Handel C Quelltext b Strukturdiagramm Bild 3 2 Handel C Quelltextbeispiel a mit Strukturgraph b so angeordnet dass die parallelen Abl ufe deutlich werden e In Handel C werden Integer Variablen mit einer frei w hlbaren Bitbreite angegeben 36 3 4 Software Hardware Kompilierer Weiter hat man die Wahl zwischen Vorzeichen behaftetem und Vorzeichen losem In teger e Die Ausf hrung wird in serielle Abl ufe seq in b von oben nach unten und in parallele Istinlinelparl in b auf gleicher Ebene unterteilt Im parallelen Segment gibt es zwei serielle Abl ufe e Jede Zuweisung entspricht einer Taktst
134. mpilierer 5 3 1 bersetzungskette Es gibt viele Ans tze wie der OpenCL Quelltext bersetzt werden kann Beispielsweise l sst sich mit Lex und Yacc ein OpenCL Frontend entwickeln das den Quelltext in einen Parser baum im Speicher umsetzt Diese Aufgabe ben tigt viel Entwicklungszeit Statt dessen k nnte man das C Frontend von GCC verwenden dann br uchte man keinen C Parser entwickeln und man k nnte die Entwicklung auf die Zwischensprache aufsetzen Da das GCC C Frontend in die Jahre gekommen ist wurde es mit LLVM berarbeitet und erneuert Auch diese Arbeit setzt auf LLVM auf Das LLVM C Frontend Clang bersetzt in eine standardisierte Zwischenspra che f r die es in dieser Arbeit einen Parser und ein Backend f r den FPGA zu entwickeln gilt Die bersetzungskette l sst sich in drei Glieder aufteilen die in Bild 5 2 angeordnet sind Das Clang Frontend wird f r die bersetzung der Kernelfunktion in LLVM IR verwendet Besser w re es ein OpenCL Frontend zu verwenden da die Kernelfunktion OpenCL spezifi sche Schl sselworte enthalten kann die von Clang nicht identifiziert werden Beispielsweise spezifizieren die Schliisselworte 1oca1 und globai die Speicherbereiche in denen die Variablen 67 5 OpenCL zu FPGA bersetzer OpenCL Kernel bersetzung Clang Frontend llvm opt Vhdl Backend Bild 5 2 Ubersetzungskette des VHDL Kompilierers abgelegt werden Folglich kann das Clang Frontend ke
135. n Transferlesebl cken und den Transferschreibbl cken existieren um sie selektieren zu k nnen 89 5 OpenCL zu FPGA bersetzer Pipeline Kennung Es ist ebenso wichtig zu wissen welche Pipeline sich gerade in der Hard ware befindet Deswegen muss jedes Design ber eine ID verf gen Eine Zufallszahl zwischen 0 und 255 ist ausreichend zuf llig genug um eine generierte Pipeline zu kennzeichnen 5 3 7 Einschr nkungen in der bersetzung Der bersetzungsvorgang von einer OpenCL Kernelfunktion in eine VHDL Pipeline unter liegt Einschr nkungen die hier aufgelistet sind Der Shared Speicher kann nicht verwendet werden deshalb ist eine Threadkommunika tion nicht m glich Schleifen werden nicht unterst tzt Es fehlt die Implementierung der Sprungbefehle und deren bersetzungsvorschrift die im Prototyp nicht vorgesehen sind Komplexe is Strukturen k nnen ebenfalls wegen fehlender Sprungbefehle nicht ber setzt werden Auch dieser Punkt ist Ziel der n chsten Version Datenabh ngige Speicherzugriffe und komplexere Speicherzugriffsmuster werden nicht unterst tzt Die Datenbreite der Pipelinearchitektur ist f r 32 Bit entwickelt worden F r andere Bitbreiten muss die Entwicklung angepasst werden Bisher gibt es keine Implementierung der Flie kommaoperatoren in den Rechenbl cken F r zwei der Einschr nkungen gibt es Behelfsl sungen die weniger effizient sind Kleinere Schleifen k nnen mit
136. n Das stall Signal zeigt dass der Datenpuffer leer ist und gibt der Pipeline den Be fehl die Berechnungen anzuhalten Der in Bild 5 16 dargestellte Transferschreibblock hat die Aufgabe Ergebnisdaten aufzuneh men in einem Datenpuffer zwischenzuspeichern und sie ber den Bus in den Speicher zu transferieren BLOCK_NUM BlockTransferWr clkUser gt acalc_next rst gt acalc_update acalc_addr acalc_request acalc_rdy bus_ctrl_wr_done acalc_burst Zustandsmaschine bus_wr_addr acalc_valid bus_wr_burst acalc_fin bus_wr_write bus_ctrl_wr_sel bus_wr_data ee bus_wr_valid data_valid data_stall Bild 5 16 Schematische Darstellung des VHDL Transferschreibblocks Oben Generic Ports und unten die Entity Ports 86 5 3 VHDL Kompilierer e Die Ergebnisse kommen ber die data Schnittstelle im 32 Bit Format an und werden in den Datenpuffer geschrieben Wenn er voll ist gibt das stall Signal der Pipeline die Anweisung anzuhalten e Vergleichbar mit der Zustandsmaschine im Transferleseblock hat diese ebenfalls die Kontrolle ber die acalc Schnittstelle Wenn der Datenpuffer Daten enth lt wird die Adresse angefordert an der die Daten gespeichert werden sollen e ber die bus Schnittstelle gibt die Zustandsmaschine den Schreibbefehl zusammen mit den Daten auf den Speicherbus Der Datenpuffer ordnet die 32 Bit Ergebnisse in 256 Bit breite Datenworte um markiert die g ltigen 32 Bit Werte und f llt wenn n tig fehlende
137. n Die Ausf hrung einzelner Operationen unterliegt allerdings Regeln denn eine Instrukti on wird parallel auf mehreren TPs nach dem SIMD Prinzip ausgef hrt Warp Scheduler Ein Scheduler ist eine Ausf hrungseinheit die Instruktionen aus dem Spei cher lie t dekodiert und auf die TPs verteilt Diese Verteilung passiert in Hardware was bli cherweise ein Betriebssystem in Software erledigt Ein Warp ist eine Gruppe von 32 Threads Ausf hrungsf den D h dass ein Warp Scheduler eine Instruktion auf 32 TPs parallel mit unterschiedlichen Daten ausf hrt In der Hardware werden allerdings lediglich 16 TPs das entspricht einem half Warp beauftragt mit der gleichen Instruktion zu rechnen Erst zu einem sp teren Zeitpunkt wird die zweite H lfte des half Warps ausgef hrt Damit zu jedem Zeitpunkt 2 Grundlagen alle 32 TPs einer SM besch ftigt sind gibt es zwei Warp Scheduler die zu einem Zeitpunkt zwei half Warps unterschiedlicher Warps ausf hren Lade und Speichereinheiten IO Jede SM besitzt 16 Lade und Speichereinheiten die pro Takt ein Ziel oder eine Quelle im Speicher adressieren k nnen und einen Speichertransfer in itiieren Der Speichertransfer richtet sich als erstes an den L1 Cache bevor die Daten vom oder zum Massenspeicher transferiert werden Spezielle Funktionseinheiten SFU In ihnen werden komplexere Instruktionen abgearbeitet die die TPs nicht unterst tzen Beispiel f r die Instruktionen sind s
138. n Some Computer Organizations and Their Effectiveness IEEE Trans Comput Volume C 21 948 1972 doi 10 1109 TC 1972 5009071 W Gao und Z Han PCIe SG DMA controller URL http opencores org project pcie_sg_dma 2011 Wenxue Gao Andreas Kugel Reinhard M nner und Guillermo Marcus PCI Express DMA Engine Design Technischer Report CBM Progress Report 2007 M Gipp G Marcus N Harder A Suratanee K Rohr R K nig und R M nner Ha ralick s Texture Features Computations Accelerated by GPUs in Biological Applications In GPU Technology Conference GTC 09 NVIDIA San Joes California USA 2009 Poster Research Summit Markus Gipp Guillermo Marcus Nathalie Harder Apichat Suratanee Karl Rohr Rainer K nig und Reinhard M nner Haralick s Texture Features using Graphics Processing Units GPUs In Proceedings of The World Congress on Engineering 2008 Volume I von ICPDC 08 Seite 587 592 International Association of Engineers Newswood Limited London UK UK 2008 Markus Gipp Guillermo Marcus Nathalie Harder Apichat Suratanee Karl Rohr Rai ner K nig und Reinhard M nner Haralick s Texture Features Computed by GPUs for Biological Applications LAENG International Journal of Computer Science Volume 36 129 Literatur 34 ja 35 a 36 37 38 39 40 41 42 a 43 44 45 46 130 2009 Markus Gipp Guillermo Marcus Nathal
139. n ausl sen Die Ausgabesignale m ssen w hrend des Programmierens von der statischen Logik entkoppelt werden Der einfachste Weg der Ent koppelung ist alle Signale mit der Quelle aus dem dynamischen Modul im statischen Design mit einem UND Gatter zu verkn pfen Mit einem Steuersignal kann der Ausgang des UND Gatters und somit das Signal aus dem dynamischen Design gezielt auf logisch Null gesetzt werden Das UND Gatter bezeichnen wir als Torschaltung das von einem Kontrollsignal ge steuert wird und das Tor ffnen und schlie en kann Wie die OpenCL Funktion c1BuildProgram die Kernelfunktion bersetzt wurde bereits be schrieben Es fehlt wie das generierte dynamsiche Pipelinemodul in den FPGA geladen wird 1 Die Bit Datei mit dem Pipelinemodul wird vom Dateisystem gelesen die Dateil nge bestimmt und in eine OpenCL Programm Struktur gespeichert 2 Mit der Call Back Funktion devsetconfigModerr 1 wird ein Bit im Kontrollregister ge setzt und die Torschaltung schlie t Die Signale aus dem dynamischen Modul sind im statischen Design logisch entkoppelt 3 Das Pipelinemodul wird mit devConfigurePR program gt bitfile program gt bitlength ber die ICAP Schnittstelle in den FPGA geladen 4 Danach wird mit devsetconfigModepr 0 die Torschaltung ge ffnet und die Signale aus der Pipeline haben wieder Einfluss auf die statische Logik 5 Ein Pipelinereset mit der Call Back Funktion devresetPipeline beendet den Austausc
140. n m ssen Die dritte Variante ist die Oderlogik bei der alle Quellsignale mit Odergatter zu einem Signal kom biniert werden Dabei m ssen alle Quellsignale im inaktiven Zustand ein Low Signal ausgeben und nur der aktive Teilnehmer darf beide Signalzust nde verwenden Die Oderlogik hat an die ser Stelle das beste Zeitverhalten und wurde f r diese Arbeit gew hlt Stall Logik und Datenfluss Kontrolle Die Oderlogik kommt auch zum Einsatz um die Stall Signale zu einem zu kombinieren Sofern kein VHDL Block einen Datenmangel Transferle seblock bzw einen Datenstau Transferschreibblock aufweist kann das kombinierte Stall Signal verwendet werden um den Transferlesebl cken im n chsten Takt der Pipeline einen Wert zu liefern Diese Logik steuert den Datenfluss der Pipeline Registerstufen im Speicherbus Das Zeitverhalten erfordert Registerstufen zwischen dem Rahmendesign und dem Pipelinedesign um die Speicherbussignale in beide Richtungen zeit lich zu entkoppeln Diese Ma nahme erm glicht den Einsatz einer dynamischen partiellen Rekonfiguration um Pipelinemodule austauschen zu k nnen Pipeline Fertigsignal Die Pipeline muss zeigen wann sie mit allen Berechnungen fertig ist Dieses Signal wird dem Adressierungsblock entnommen denn dieser kennt die Adresse vom letzten Datenelement und wei wann sie f r einen Datentransfer verwendet wurde Anzahl der Transferinstanzen Das Rahmendesign muss wissen wie viele Instanzen von de
141. n und bestimmt 27 3 Stand der Technik welche Co Prozessoren f r diese Arbeit in Frage kommen CPU Die CPU Central Processing Unit hat einen umfassenden Befehlssatz mit dem sich Programme entwickeln lassen die keine Einschr nkung in ihrer Funktionalit t haben Eine Cache Hierarchie reduziert die Zugriffszeiten auf den Hauptspeicher die viele hundert Pro zessortaktzyklen dauern k nnen Die Taktraten von CPUs um die 3GHz steigen kaum noch Das mooresche Gesetz eine Verdoppelung der Integrationsdichte bei integrierten Schaltkreisen ICs alle 18 bis 24 Monate wird genutzt um die Architektur einer CPU in ihrer Leistungs f higkeit zu steigern Alle modernen CPUs besitzen eine mehrstufige Pipeline um in prak tisch jedem Takt eine Instruktion auszuf hren Eine Weiterentwicklung geht sogar dahin dass mehrere Instruktionen in einem Takt ausgef hrt werden k nnen Ein Beispiel stellt die Hy perThreading Technik von Intel da die einen virtuellen Kern bietet um in einem Takt mehrere Instruktionen ausf hren zu K nnen Eine andere Technik den Grad der parallelen Ausf hrung zu erh hen bieten die Streaming SIMD Extensions Register SSE Mit ihnen k nnen einzel ne Instruktionen auf mehrere Daten angewendet werden Seit vielen Jahren steigt die Anzahl der SSE Register deren Registerbreite und der SSE Instruktionen an um immer mehr Daten nach dem SIMD Prinzip parallel zu verarbeiten Die letzte Steigerung der Integrationsdichte li
142. nbus anzuschlie en daf r keine Ca ches in den Transfer Bl cken zu installieren hnlich wie bei einer CPU Gibt es viele Transfer bl cke in der Pipeline wird der Datenbus zum Flaschenhals da jeder Transferblock gleich zeitig Daten aus dem Cache anfordert Aus diesem Grund werden viele Caches eingesetzt um jedem Transferblock Zeit zu geben Daten aus dem Speicher anzufordern w hrend die Caches die Pipeline mit Daten versorgen Der Busmaster der den Datenbus kontrolliert wird in der Speicherverwaltungseinheit des Rah mendesigns implementiert 5 4 5 Speicherkontroller und vereinfachtes Ansprechen Um Zugriff auf das 512 MByte gro e DDR3 Speichermodul zu bekommen das auf der Ent wicklungssteckkarte gesteckt ist ben tigt der FPGA einen Speicherkontroller Der Virtex6 be sitzt keinen Hardcore Speicherkontroller somit muss ein Softcore beschrieben werden Diese Arbeit nutzt das Xilinx MIG 83 Memory Interface Generator um eine Hardwarebeschrei bung eines Speicherkontrollers 85 erzeugen zu lassen Die Benutzerschnittstelle des erzeugten Speicherkontrollers l sst sich logisch in drei Teile glie 94 5 4 Rahmendesign dern Kommando Schnittstelle Mit ihr kann man zusammen mit einer Adresse Lese und Schreib Kommandos absetzen Gleichzeitig gibt es Signale die mitteilen dass der Spei cherkontroller gerade keine Kommandos akzeptiert beispielsweise wenn gerade ein Re fresh Zyklus passiert Sc
143. ne Datenbank Native Generic Database die den Logikschaltplan auf einfache Logikelemente wie UND Gatter ODER Gatter Deko dierer Flip Flops und RAMs herunter bricht und auflistet Neben dem Logikschaltplan enth lt die NGD Datei auch die Logikbeschreibung 3 MAP bildet die einfachen Logikelemente auf die Logikzellen eines speziellen FPGAs ab so dass die CLBs m glichst effizient genutzt werden Das Werkzeug liefert eine NCD Datei Native Circuit Description 4 PAR Place And Route platziert und verdrahtet die vorkonfigurierten CLBs im FPGA Wieder liefert das Werkzeug eine NCD Datei die diesmal die ben tigten Chip Ressour cen nicht nur listet sondern auch mit Ortsinformationen und Verbindungswegen versieht 5 BitGen bringt die platzierten und verdrahteten CLBs in ein Bin rformat das f hig ist den FPGA ber die Konfigurationsschnittstelle zu programmieren Das Ergebnis der bersetzung ist eine BIT Datei Bitstream file mit der urspr nglichen Hardwarebe schreibung Wird auch nur ein Logikgatter in der Hardwarebeschreibung ver ndert muss der gesamte ber setzungsprozess neu angesto en werden Dieser Nachteil l sst sich mit einer Partitionierung 20 2 3 Kompiliererentwicklung eingrenzen Die bersetzungsschritte 1 4 k nnen f r jede Partition unabh ngig geschehen Die nderung einer Partition mit dem Durchlauf der bersetzungskette nutzt die bereits bersetz ten anderen Partitionen f r die Platzier
144. ner Zwischensprache Der AST wird in diesem Schritt in eine Zwischenspra che bersetzt die der Zielsprache hnelt Optimierung der Zwischensprache Wegen der standardisierten Zwischensprache gibt es vie le Optimierer die den Quelltext im Umfang reduzieren Z B Zwischenergebnisse werden in Registern gehalten ohne sie neu zu berechnen oder unerreichbarer Quelltext wird entfernt Generierung der Zielsprache Erst jetzt wird aus der Zwischensprache die Zielsprache gene riert Diesen Teil nennt man Assembler Dank des bereits optimalen Quelltextes in der Zwi schensprache l sst sich der Assembler f r andere Computerarchitekturen austauschen Der Assembler modifiziert den Quelltext f r dessen Architektur Beispielsweise wird die Regis teranzahl und die Registerbreite in der Zielsprache angepasst Das Frontend und das Backend sind sehr ausf hrlich in Compiler Design in C 41 beschrie ben 22 3 Stand der Technik 3 1 Co Prozessoren 3 1 1 Beschleunigung Co Prozessoren werden eingesetzt um die CPU zu entlasten und somit die gesamte Ausf h rungszeit eines Programms zu reduzieren Dabei wird der rechenintensive Teil bzw der Teil der besonders viel Ausf hrungszeit beansprucht vom parallel arbeitenden Co Prozessor ber nommen Die gesamte Ausf hrungszeit eines Programms l sst sich in zwei Teile zerlegen einen der nicht beschleunigt wird ts und einen der beschleunigt bzw parallelisiert wird tp Welche Be
145. ng ben tigt Mit dem Index der gepackten Co Matrix wird der zugeh rige Grauwert ermittelt Die Grauwert Indextabelle wird bei der Co Matrixgenerierung ben tigt F r den Grauwert der Zel le wird der Index der gepackten Co Matrix nachgeschlagen Die Grauwerte Index Zuordnung f r eine Zelle ist eine 1 1 Beziehung Ermittelt wird die Zu ordnung indem alle vorkommenden Grauwerte in einem Vektor markiert werden und die Zei len der unmarkierten Grauwerte entfernt werden Die Gr e des brig gebliebenen Vektors entspricht der Anzahl der vorkommenden Grauwerte aus der Zelle Aus der eben gewonnenen Index Grauwerttabelle wird durch Umkehrung die Grauwert Indextabelle gewonnen 59 4 Haralick Algorithmus GPU beschleunigt 4 3 2 3 Gepackte Co Matrix gezielt generieren Wie viele Grauwerte in einer Zelle tats chlich vorkommen ist von der Generierung der Lookup Tabellen bekannt Die Anzahl der vorkommenden Grauwerte ist gleich der Kantenl nge der zu generierenden gepackten Co Matrix Somit wird die gepackte Co Matrix gezielt generiert oh ne eine volle Co Matrix im Speicher halten zu m ssen Nachdem ein Grauwertepaar gebildet wurde werden dessen Grauwerte mit der Grauwert Indextabelle durch Indices der gepackten Co Matrix ersetzt Das identifizierte Element der gepackten Co Matrix wird um eins erh ht hnlich wie bei einem Histogramm Bei der Adressierung einer Datenreihe im Grafikkartenspeicher gibt es f r effiziente Speicher zugriff
146. nos org conformance adopters conformant products 2011 Hardware description language URL http de wikipedia org wiki HDLC 2011 Learn About Altera s OpenCL Program for FPGAs URL http www altera com b opencl html 2011 LLVM Users URL http 11vm org Users html 2011 Intel microprocessor export compliance metrics URL http www intel com support processors xeon sb CS 020863 htm 5 Dez 2008 Ali Reza Adl Tabatabai Geoff Langdale Steven Lucco und Robert Wahbe Efficient and language independent mobile programs In Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation PLDI 96 Seite 127 136 ACM New York NY USA 1996 doi 10 1145 231379 231402 Gene M Amdahl Validity of the single processor approach to achieving large scale computing capabilities In Proceedings of the April 18 20 1967 spring joint computer conference AFIPS 67 Spring Seite 483 485 ACM New York NY USA 1967 doi 10 1145 1465482 1465560 P Banerjee D Bagchi M Haldar A Nayak V Kim und R Uribe Automatic conver sion of floating point MATLAB programs into fixed point FPGA based hardware design In Field Programmable Custom Computing Machines 2003 FCCM 2003 11th Annual IEEE Symposium on Seite 263 264 april 2003 doi 10 1109 FPGA 2003 1227262 Michael J Beauchamp Scott Hauck Keith D Underwood und K Scott Hemmert Em bedded floating point uni
147. nsertSignalDeclarationBlock compile insertSignalDeclarationConst insertComponentinstances setBlockSizeRd setBlockSizeWr Bild 5 13 Ausschnitt Klassendiagramm betreffend der VHDL Generierung Im Gegensatz zu den vorherigen Klassenbeziehungen ist die Bindung dieser Klasse an die SourceCompiler Klasse gering Die sourceCompiler compile Methode erzeugt eine vnalarchi tecture Instanz die ausschlie lich mit string Datentypen Textbausteine der Klasse hinzuf gt hnlich wie die tostring Methoden in Javaklassen haben auch die VHDL Block Instan zen die Methode getvhdlInstance die eine VHDL Textrepr sentation der Komponente zu r ck gibt Der VHDL Text jedes VHDL Blocks im Block AST wird ber die insertcomponent Instances hinzugef gt Mit der Methode insertsignalDeclarationBlock werden der VHDL Klasse alle VHDL signale mitgeteilt die von den VHDL Bl cken gebraucht werden Es gibt mit der Methode insertsignalDeclarationConst die Option weitere Signale hinzuzuf gen 83 5 OpenCL zu FPGA bersetzer die von der zus tzlichen Logik siehe folgenden Abschnitt verwendet werden Die gesam melten Textbausteine der Signaldeklarationen der Blockinstanzen und der zus tzlichen Logik werden in der Methode writevnalcode in eine VHDL Datei geschrieben 5 3 6 2 VHDL Bl cke als Bausteine Bild 5 14 zeigt den funktionalen Aufbau des Adressierungsblocks Er hat die Aufgabe die Adressen zu berechnen d
148. nteger Arithmetik Logik Aufgab en und Bit Operationen Die ideale Anwendung m sste eben aus einer Pipeline bestehen mit genau den Operationen die der FPGA gut kann Der FPGA erzielt besonders hohe Rechen geschwindigkeit dadurch dass in jedem Takt alle Operationen der Pipeline parallel ausgef hrt werden Wenn die Abw rme bzw Verlustleistung ein Problem darstellen werden FPGAs be vorzugt eingesetzt Eine Untersuchung 43 von Williams zeigt dass FPGAs einen besseren Wirkungsgrad gemeint ist Rechenleistung pro Watt als GPUs haben Der FPGA ist bei Inte geroperationen um das sechsfache und bei Flie kommaoperationen um das zweifache effizien ter im Energieverbrauch f r die gleiche Rechenleistung Ein FPGA ben tigt ca 25W Leistung hat aber die Nachsicht bei den Anschaffungskosten von 1000 10000EUR Die Kosten ver einen die Entwicklung oder die Anschaffung einer Steckkarte mit einem FPGA Chip Eine Aussage ber die GFLOPS zu treffen ist nicht einfach Ein Virtex 5 mit 330 Tausend Logik zellen konnte laut 76 56 GFLOPS erreichen einschlie lich aller arithmetischen Operatoren aus den DSP slices und den vorhandenen Logigbl cken Inzwischen gibt es Virtex 6 FPGAs und Virtex 7 sind angek ndigt diese laufen mit h heren Taktraten und haben mehr Logikzel len F r die neuste Generation wird die Rechenleistung auf 100 GFLOPS gesch tzt Es ist uns nicht wichtig eine genaue Zahl zu berechnen da es sich lediglich um die theoretisch maxi
149. onen k nnen den kleinen Speicherbereich lediglich lesen Dieser Speicherbereich hat an Be deutung verloren seit dem der globale Speicher ber ein Cachesystem verf gt Denn dieser besitzt einen separaten Cache um m glichst immer gute Cachetreffer zu erzielen Texturenspeicher Dieser ist vergleichbar mit dem konstanten Speicher der ber ein separates Cache verf gt Allerdings kann er wesentlich gr er sein indem Teile des globalen Speichers f r den Texturenzugriff reserviert werden Wenn die Kernelfunktion viele Ressourcen ben tigen kann die Effizienz leiden Braucht ein CUDA Block den gesamten Shared Speicher kann somit nur dieser auf einer SMs ausgef hrt werden statt m glichen acht Die Effizienz leidet auch wenn wenige Threads zu viele Register ben tigen dann k nnen eben auch nur wenige Threads gleichzeitig auf einer SM ausgef hrt werden Die limitierenden Faktoren sind in Formeln einer Excel Tabelle hinterlegt die die Aus 12 So oa wu WwW WN e U N 2 1 Grafikkarten als Rechenbeschleuniger lastung der SMs bzw die Anzahl parallel arbeitender CUDA Bl cke berechnet siehe 66 Die typische Abfolge eines einfachen CUDA Programms beginnt mit der Kopie der Eingangs daten in den Grafikkartenspeicher Beim Kernelaufruf wird die Anzahl an Bl cken und Threads definiert und dimensioniert je nachdem wie h ufig es gew nscht ist das Kernelprogramm pa rallel auszuf hren Nach der Berechnung werden die Ergebni
150. onsdichte der zuk nftigen Chips steigert bei FPGAs die Anzahl und die Komplexit t der Logikzellen um einen h heren Grad der Parallelisierung zu erreichen Die Frequenzen der FPGAs steigen nur zweitrangig an OpenCL ist heute und in der Zukunft eine ideale Sprache Algorithmen wahlweise parallel auf Vielkern CPUs GPUs oder FPGAs ausf hren zu lassen Die Ergebnisse dieser Arbeit konnten teilweise in Journals einem Konferenzbeitrag und in einem Poster ver ffentlicht werden Die Ver ffentlichung zur Beschleunigung der Haralick Bildmerkmale auf der GPU wurde auf der ICPDC 08 zum Best Paper normiert 32 Auf ei ne Einladung hin wurde der Konferenzbeitrag zu einem Journal erweitert 33 und im JAENG International Journal of Computer Science ver ffentlicht Die Ergebnisse der zweiten GPU Version konnten im Proceedings of the Fourth International Conference on High Performan ce Scientific Computing vorgestellt werden 34 Zuletzt wurden technische Details zur GPU Beschleunigung auf der NVIDIA Konferenz GTC 09 mit einem Poster dem Fachpublikum pr sentiert 31 7 2 Verbesserungen f r die Zukunft Wie bereits erw hnt lohnt sich eine weitere Beschleunigung der Haralick Bildmerkmalserken nung nicht und es besteht auch kein Bedarf einer Weiterentwicklung Der OpenCL FPGA Kompilierer besitzt den Stand eines Prototyps der eine gezielte Aufga be erf llt F r eine allgemeinerer Verwendung wurde explizit auf eine modulare Entwicklun
151. penRCL Implementierung ihre Geschwindigkeitsleistung erzielt Die Analyse ist neben dem Kernel Scheduler die entscheidende nderung zur klassischen OpenCL bersetzungs kette Die Generierung der Zielsprache und das Linken wurde auf ein existierendes LLVM Backend aufgesetzt und der speziellen MIPS Multithread Archtitektur auf dem FPGAs ange 42 3 4 Software Hardware Kompilierer E externe i A Bibliothek E FORTRAN i cpu LV ee gt M Generierung I bersetzte und linken der Kernel OpenCL Objekte Zielsprache Funktionen Ea Speicher lt A PESA a Kernel gcc Kernel 2 zugriff arth Scheduler Front end Optimierung Bild 3 7 Leicht modifizierte OpenCL Ubersetzungskette Die grauen Bl cke machen den Un terschied von der OpenRCL Implementierung aus passt Die Main Funktion wird auf der CPU ausgef hrt die Kernelfunktionen aus einer Queue startet die ihrerseits auf dem FPGA ausgef hrt werden 3 4 4 Architektur bergreifende C Sprachen f r den FPGA 3 4 4 1 OpenCL In der Spezifikation von OpenCL 36 wird angedeutet dass die Sprache f r alle m glichen Ar chitekturen unabh ngig vom Betriebssystem geeignet ist Dazu z hlen Vielkern CPUs GPUs Cell Prozessoren und DSP Weiter gibt es f r den eingebetteten Bereich eine Spezifikation die geringere Anforderungen an die Funktionalit t stellt Die folgende Tabelle listet existierende und verf
152. perator InstComp add Addition sub Subtraktion mul Multiplikation udiv vorzeichenlose Division sdiv Division urem vorzeichenlose Modulo srem Modulo shl links Schieben lshr rechts Schieben MSB aufgef llt mit Nullen and Und or Oder xor exklusives Oder InstGetElemPtr getelementptr Operator zur Adressberechnung von Vektoren und Matrizen InstSelect select bedingte Zuweisung InstTransfer load lesender Speicherzugriff store schreibender Speicherzugriff Tabelle 5 1 Abgeleitete Instruktions Klassen die LLVM Befehle repr sentieren und kurze Beschreibung Im LLVM Language Reference Manual 49 sind alle LLVM IR Befehle erl utert Tabelle 5 1 listet die Instruction Spezialisierungen auf und zeigt welche LLVM IR Befehle sie abdecken 74 5 3 VHDL Kompilierer k nnen i y Funktionsparameter gt Register Lesepfad k Y Schreibpfad Bild 5 7 Beispiel des generierten SSA AST der Kernelfunktion matrixada Als Beisliel der SSA AST Generierung wird wieder die Kernelfunktion matrixada aufgegrif fen Aus dem optimierten LLVM IR Quelltext entsteht das Speicherabbild des Syntaxbaums der mit dem Bild 5 7 veranschaulicht wird 5 OpenCL zu FPGA bersetzer 5 3 4 Parsebaum Analyse Der sourceAnalyser ben tigt ein sourceParser Objekt das bereits den SSA AST generiert hat Bild 5 8 zeigt dass nur die Methode parse ffentlich ist Sie ruft intern die privaten Metho den in entsprechender Reihenfo
153. r REG gelesen wird und wie viele 92 5 4 Rahmendesign ctrl_rd_reg_rdy clkPCle ram_wr_en clkUser Schreib ram_wr_addr rst RAM ram_wr_data i FIFO ram_rd_addr pcie_wr_data pcie_wr_addr ram_rd_en pole_wr_en O ram_rd_burst pcie_rd_addr o y idx_wr_id pcie_rd_addr_en Ro Schreib idx_wr_en pcie_rd_addr_size Zustandsmaschine ES idx_wr_data pcie_rd_data_get idx_rd_id ctrl_wr_reg ram_rd_data ctrl_wr_reg_en ram_rd_valid wr_reg_ idx_rd_data base_addr base_pos ctrl_rd_reg BEN pcie_rd_empty pcie_rd_data pcie_rd_count Bild 5 20 Schematisches Blockschaltbild der PCIe Einheit Worte die Lesel nge umfasst Danach ist die Zustandsmaschine in der Lage nachein ander mehrere Leseoperationen auszuf hren bis die Lesel nge ausgesch pft ist Die Lesedaten werden von den Schnittstellen geliefert und von der Logik gez hlt Ist die entsprechende Lesel nge an Worten an die DMA Schnittstelle gesendet worden ist die Zustandsmaschine f r die n chste Lesetransaktion bereit Der PCle Benutzer Adressraum ist auf die Schnittstellen RAM Index idx Register ctrl und Base aufgeteilt um vom Host aus auf diese zugreifen zu k nnen Die ram Schnittstelle hat 256 Bit breite Datenworte Aus diesem Grund existiert im Le sepfad ein separates FIFO f r den Speicher und die Register Das Lese RAM FIFO setzt die Wortbreite auf 32 Bit breite Datenworte f r die pcie Schnittstelle um Die idx Schnittstelle ist Teil de
154. r Register Schnittstelle auf der die Parallelindizes in Re gister der Kontrolleinheit geschrieben und gelesen werden k nnen Die base Schnittstelle ist Teil der Register Schnittstelle Sie existiert um die 26 Bit brei 93 5 OpenCL zu FPGA bersetzer ten Basisadressen in die Transferbl cke zu schreiben da diese erst zur Laufzeit bekannt werden Es existiert kein Lesepfad f r die Basisadressen e Die ctrl Schnittstelle ist Teil der Register Schnittstelle Sie f hrt zu einem 32 Bit breiten Kontrollregister in der Kontrolleinheit mit einem Lese und einem Schreibpfad 5 4 4 Datenflusskonzept In der Pipeline gibt es VHDL Transfer Bl cke die als Dateneinspeisepunkt und als Datenaus gabepunkt dienen Das Konzept einen Datenfluss in der Pipeline aufrecht zu erhalten sieht vor ein Bussystem mit dem Speicherkontroller zu verbinden ber das die Transferbl cke Zu griff zum Speicher bekommen Wenn in der Pipeline an einem Punkt keine Daten bereitstehen muss sie angehalten werden bis wieder Daten geliefert wurden Um die Pipeline am laufen zu halten ist eine kontinuierliche Versorgung mit Daten unerl sslich Aus diesem Grund besitzt jeder Transferblock einen Datenpuffer vergleichbar mit kleinen Caches Bei jedem Speicher zugriff wird ein Burstzugriff bestehend aus 128 Werten initiiert um m glichst effizient viele Werte zu lesen und in den Caches abzulegen Ein anderer Ansatz w re einen gro en Cache an den Date
155. r ein Thread pro Stream Multiprozessor laufen siehe Kapitel 2 1 2 Zur Bestimmung der effizientesten Implementierung wurde die Kernelfunktion IF siehe Ta belle 4 2 mehrfach in CUDA implementiert In der ersten Implementierung wurde der Zwi schenergebnisvektor unterteilt so dass jeder Abschnitt in den Shared Speicher passt Eine wei tere Implementierung lagert den Zwischenergebnisvektor in den gr eren lokalen Speicher aus Die optimale Implementierung liest blockweise eine Matrixzeile berechnet die Indizierung des Zwischenergebnisvektors und summiert das entsprechende Element Die Blockgr e ist gleich der Anzahl vorhandener Threads d h ein Block wird gleichzeitig gelesen und verarbeitet Die Index Berechnung basiert auf der Indizierung der gelesenen Daten i und j zu denen die Grau werte J und J aus der Lookup Tabelle bestimmt werden Die Summe aus und J indiziert das Element des Zwischenergebnisvektors auf den die zuvor gelesenen Daten addiert werden 4 3 2 8 Zwischenergebnisvektor Px y k Die Gr e des Zwischenergebnisvektors P x y k betr gt nur 4096 Elemente mitk 0 1 2 Ng 2 und Ng 4096 Auch dieser Zwischenergebnisvektor ist zu gro er w rde den Shared Spei cher komplett ausf llen und aufgrund des mangelnden Speichers keine weiteren Threads zur Ausf hrung zulassen F r die Implementierung ist die gleiche Strategie optimal wie sie auch beim Zwischenergeb nisvektor P y genutzt wird Der Unterschied liegt
156. r zweiten Ebene aus denen die GPC bestehen hei en Stream Multiprozessoren SM die sp ter weiter erl utert werden Erst in der dritten Ebene sind die Threadprozessoren TP CUDA Kerne zu finden Die drei stufige Struktur zu sehen in Bild 2 1 ist in der Lage bis zu 512 Threadprozessoren effizient zu verwenden Die schnellste in dieser Arbeit benutzte Grafikkarte NVIDIA GTX 480 mit der GF100 2 Grundlagen GPU Chip i SM Ebene d TP Ebene Bild 2 1 Hierarchieebenen der GF100 Architektur JT Architektur besteht aus vier GPCs Jeder GPC kann aus bis zu vier SMs bestehen Insgesamt gibt es in der GTX 480 allerdings nur 15 SMs aus den vier GPCs mal vier SMs wird ein SM bestimmt und ausgeschaltet Das wird gemacht um eventuelle Herstellungsfehler die den Aus fall einer SM zur Folge h tte miteinzubeziehen Entsprechend werden bei den anderen Gra fikkarten der GF100 Serie GTX 470 und GTX 465 mit Herstellungsfehlern h herer Dichte mehrere Einheiten abgestellt um dennoch eine funktionst chtige GPU mit geminderter Leis tung zu erhalten In jedem SM sind 32 TPs verbaut Zusammen besitzt die GTX480 eben 480 Threadprozessoren 15SM 32T P Auf der Chip Ebene sind bis zu sechs 64 Bit breite GDDRS5 Speicherkontroller ber ein Kom munikationsnetz an die GPC angeschlossen Die Gesamtbreite der Speicherschnittstelle um f
157. rallelisieren und als Quelltext in Kernel Funktionen abbilden Die Kernel Funktionen werden auf der GPU parallel ausgef hrt Die Skalierung der Parallelit t gemeint ist die Anzahl der Threads die die Kernel Funktionen durchlaufen sollen wird beim Funktionsaufruf mit der Angabe einer Dimension f r ein Grid und CUDA Bl cken definiert siehe Quelltext Beispiel 2 1 auf Seite 13 Das hei t innerhalb ei 10 2 1 Grafikkarten als Rechenbeschleuniger nes Grids werden CUDA Bl cke bestimmter Anzahl geschaffen die wiederum eine bestimmte Anzahl an Threads beinhalten Bild 2 3 veranschaulicht den Zusammenhang zwischen Grid Bl cken und Threads mit der M glichkeit einer mehrdimensionalen Anordnung Jeder Thread innerhalb der Bl cke f hrt die gleiche Kernelfunktion f r unterschiedliche Daten aus hnlich dem SIMD Prinzip nennt NVIDIA dieses Prinzip Single Instruktion Multiple Threads SIMT erw hnt in der CUDA Programmieranleitung 65 Thread 2d Block Feld Z 3d Thread Feld x x Bild 2 3 Anordnung vieler Threads in einem Grid und Bl cken Ein CUDA Grid besteht aus einem bis zu zweidimensional gro en Block Feld Ein CUDA Block kann eine bis zu dreidimensionale Anordnung von Threads sein Die Anzahl der Threads die beim Kernelaufruf bestimmt und angelegt werden werden von der Hardware dynamisch zur Laufzeit auf die Threadprozessoren verteilt Genauer wird je der CUDA Block vergleichbar wie ein Prozess auf einem Stream Mult
158. rdnungsgem e Funktion einzelner Teile zu ermitteln BPI Linear Flash 32 MB Der Flash Speicher h lt das Rahmendesign das mit dem Ein schalten des PCs und der Versorgung der Karte automatisch geladen wird 5 5 1 2 PCle Treiber und MPRACE Bibliothek Die Entwicklungssteckkarte ML605 als Beschleunigerkarte kommuniziert mit dem Host ber den PCle Bus Die Kommunikation wird mit Hilfe eines Linux Treibers PCle Treiber und einer C C Bibliothek MPRACE bew ltigt siehe 56 Der Puffermanager 57 aus der MPRACE Bibliothek der Transfers zwischen dem virtuellen und dem physikalischen Adress raum koordiniert arbeitet mit der bereits beschriebene DMA Engine zusammen Die MPRACE Bibliothek umfasst einfache Funktionen f r einen peripheren Transfer PIO einen direkten Speichertransfer DMA und Registerzugriffe in der DMA Engine die die Kommunikation steuert Die Kommunikation des Kompilierers basiert auf DMA Zugriffen und Registerzugrif fen Quelltextabschnitt 5 1 zeigt die verwendeten Lese und Schreibfunktionen virtual void readDMA const unsigned int address FPGA Adresse DMABuffer amp buf DMA Puffer const unsigned int count Anzahl zu lesender 32Bit Werte 1 2 3 4 5 const unsigned int offset 0 Versatz des ersten Wertes 6 const bool inc true Adresse im FPGA inkrementieren 7 const bool lock true Warte bis der Transfer fertig ist 8 const float timeout 0 0 Abbruchzeit in Millisekun
159. re Prozessoren abgebildet Der serialisierte Quelltext wird durch mehrfache Funktionsaufrufe wieder paralle lisiert die nacheinander auf den Softkernprozessoren ausgef hrt werden 3 4 3 2 OpenRCL OpenRCL ist eine Entwicklung die OpenCL f r den FPGA nutzbar macht Der Konferenz beitrag 52 von 2010 beschreibt die Architektur des entsprechenden FPGA Designs erl utert den bersetzungsvorgang und zeigt vergleichbare Ausf hrungsgeschwindigkeiten gegen ber GPUs Ziel der Entwicklung ist es erstens FPGAs f r die Architektur bergreifende Sprache OpenCL nutzbar zu machen und zweitens einen besseren Wirkungsgrad im Energieverbrauch zu erreichen als die Vergleichsarchitekturen GPU und CPU FPGA Design Bild 3 6 zeigt die unterschiedlichen Speicher ein Kommunikationsnetzwerk Kreuzschienenverteiler und die Threadprozessoren Jeder Threadprozessor PE hat einen privaten und einen lokalen Speicher P L Auf den privaten Speicher kann nur der anlie gende Threadprozessor zugreifen Auf den lokalen Speicher haben alle Threads der selben work group gegenseitigen Zugriff F r den Datenaustausch nutzen sie den Kreuzschienenver 41 3 Stand der Technik teiler mit eignen Speichern SP der mit Blick auf eine maximale Leitungsl nge im FPGA sehr viele Kommunikationsteilnehmer erlaubt Auf den global geteilten Speicher k nnen al le Threads direkt zugreifen Die Architektur ist der einer GPU sehr hnlich Tats chlich sind Kreuzschi
160. rer f r OpenCL zu entwickeln als f r CUDA da OpenCL einem offenen Standard unterliegt Es gibt einen standardisierten und gut dokumentierten Funktionssatz was bei CUDA nicht der Fall ist e Weiter ist OpenCL oder CUDA eine weit verbreitete Sprache die von vielen Pro grammierern akzeptiert wurde Das macht eine Einarbeitung in die Sprache n tzlich da es mehrere Anwendungsgebiete gibt Sprachen die mit Sprachkonstrukten erweitert werden m ssen haben es schwerer sich durchzusetzen 65 5 OpenCL zu FPGA bersetzer Die weiteren Gedanken lehnen daran an wie der Kompilierer OpenCL in ein FPGA Design umsetzt Die OpenRCL Entwicklung simuliert eine GPU hnliche Architektur im FPGA f r die ein Programm bersetzt werden kann Der Ansatz dieser Arbeit sieht vor einen Pipeline generator zu entwickeln der das Programm in eine Hardwarepipeline bersetzt Somit werden die Ressourcen zielgerichtet f r das OpenCL Programm eingesetzt und das Pipelinekonzept verspricht eine hohe und effiziente Auslastung der synthetisieren Hardware 5 2 bersicht Die entwickelten Bestandteile des bersetzer Konzepts sind miteinander verwoben Aus die sem Grund wird hier eine bersicht in Bild 5 1 gegeben die nur im Groben die Bestandteile beschreibt und deren Interaktionen mit Pfeilen darlegt OpenCL main OpenCL kernel OpenCL Laufzeitumgebung VHDL Kompilierer Rahmendesign 3 Pipeline Bild 5 1 B
161. reset Die Informationsbits geben Auskunft ber einen FIFO berlauf und die Pipeline ID e Eine Zustandsmaschine verwaltet die Berechnung Sie verharrt in einem Ruhezustand in dem die Pipeline nicht rechnet bis das nullte Bit des Kontrollregisters gesetzt wird Der Berechnungsstart wird der Speicherverwaltungseinheit und der Pipeline mitgeteilt Im n chsten Zustand wird gewartet bis die Pipeline das Ende der Berechnung f r die aktu elle Kombination der Parallelindizes meldet Dann wird die Pipeline zur ckgesetzt und gepr ft ob alle Parallelindizes Kombinationen ausgesch pft wurden An dieser Stelle verzweigt sich die Zustandsmaschine entweder startet die Berechnung mit neuen Paral lelindizes Kombinationen oder alle Berechnungen sind fertig und die Zustandsmaschine geht in ihren Ruhezustand zur ck Das nullte Bit des Kontrollwortes wird zur ckgesetzt e Die Parallelindizes Kombination wird zwischen jeder Berechnugnsphase ermittelt Wel che gerade berechnet wird bestimmen die Register work group id x bis z In den Be rechnungspausen wird die work group id erh ht wie bei einer dreifach verschachtelten Schleife die ein Volumen elementweise durchl uft Die work group size entspricht der Schleifengr e von jeder Dimension mit der sich die Anzahl aller Pipelineberechnun gen ermitteln l sst Die Pipeline berechnet alle Threads einer work group Die Anzahl der Threads l sst sich von den Registern work item size x bis z bestimmen Da
162. ringer als die einer Vielkernrechnerarchitektur e Der gravierende Vorteil einer OpenCL Implementierung ist die doppelte Einsatzf hig keit In dieser Arbeit k nnen Algorithmen die f r die Online Prozessierung FPGA entwickelt werden dann auch f r die Offline Prozessierung GPU eingesetzt werden Der Ansatz dieser Arbeit einen OpenCL Kompilierer zu entwickeln ist vergleichbar mit der Mischung der drei gezeigter Ans tze Erstens es wird eine hnliche Pipelinegenerierung wie die von CHiMPS verwendet zweitens wird die parallele Sprache OpenCL f r den FPGA be nutzt nach der Grundidee von OpenRCL und drittens lehnt der bersetzungsvorgang an Tri dent an LLVM verwenden zu wollen Die Mischung der drei existierenden Ans tze zu einem besitzt Vorteile gegen ber jedem der einzeln gezeigten Dieser Ansatz vereint die Vorteile e FPGAs mit der einfachen parallelen Programmiersprache OpenCL beschreiben zu k n nen 46 3 4 Software Hardware Kompilierer e ber einen Pipelinegenerator zu verf gen der die Vorteile der Streambarkeit und des hohen Rechendurchsatzes nutzt e Die bersetzung auf LLVM aufzubauen um die Optimierer nutzen zu k nnen und die bersetzung einfach entwickeln zu k nnen 47 4 Haralick Algorithmus GPU beschleunigt 4 1 Untersuchung des Haralick Algorithmusses Der Haralick Algorithmus besteht aus zwei Teilen Im ersten Teil werden von den Mikroskop bildern Co occurrence Matrizen erstel
163. rst ndlicherweise liefern nicht alle aufgenomme nen Daten n tzliche Ergebnisse Mit dem beschleunigten Mikroskop ndert sich die Situation dahingehend dass nicht nur weniger Zeit f r die Datenaufnahme ben tigt wird sondern auch dass der Datendurchsatz und die anfallende zu speichernde Datenmenge um den Beschleuni gungsfaktor 20 ansteigen Auch die Diskrepanz zwischen Aufnahmezeit und Datenanalysezeit verschlechtert sich weiter und mehr kostenintensive Daten Cluster werden ben tigt die viel Energie verbrauchen um die Daten abrufbereit zu halten Eine Beschleunigung der Offline Prozessierung ist au erordentlich wichtig um e die Datenmengen die gespeichert werden m ssen zu reduzieren e rechenintensive Algorithmen in der Offline Prozessierung verwenden zu k nnen e den Geschwindigkeitsgewinn des beschleunigten Mikroskops auf die Offline Prozes sierung zu bertragen um Ergebnisse schneller auswerten zu k nnen Eine Konsequenz ist den bestehenden Rechen Cluster durch weitere Rechner CPUs zu er weitern CPUs eignen sich f r alle Rechenaufgaben was bedeutet dass sich durch eine ver mehrte Anzahl eine Beschleunigung erzielen l sst sofern die Anzahl nicht zu gro wird Eben so kann eine Beschleunigung durch Beschleunigerkarten realisiert werden die in den bestehen den Rechner Knoten eingesetzt werden Beispiele f r Beschleunigerkarten sind FPGAs und GPUs In der Regel wird von ihnen eine h here Beschleunigung gegen b
164. rt als Ergebnis bernommen In dieser Implementierung darf der boolesche Ausdruck lediglich eine Vergleichsoperation mit einer Konstanten sein F r eine Demonstration gen gt die Annahme einer Konstan te wodurch bereits viele Beispielprogramme bersetzungsf hig werden Die Konstante l sst sich in einer Weiterentwicklung durch eine Variable ersetzen indem der Parser an gepasst wird analysePipelinePart UNd analyseTransferPart weisen alle arithmetischen Operatoren der Pipeline oder des Datentransfers zu Die Pipeline soll nur die Operationen enthalten die zur Ergebnisberechnung beitragen Die Operationen die zur Berechnung der Adresse ben tigt wer den beispielsweise die Indexberechnung eines Elements in einem Array Index Basis i soll in einer speziellen Komponente des Pipeline Baukastens passieren Wie die beiden Analyse methoden die Zuordnung herausfinden wird am Beispiel einer Matrixaddition verdeutlicht Die Kernelfunktion besteht im wesentlichen aus der Zeile Clidy w idx Alidy w idx Blidy x w idx Der daraus entstehende SSA AST ist in Bild 5 9 dargestellt 77 5 OpenCL zu FPGA bersetzer InstCall global_id 1 ta i InstComp InstCall mul global_id 0 aa add d N getelementptr getelementptr J 4 InstTransfer InstTransfer load load getelementptr Pipelineoperation Adressoperation InstTransfer store Funktionsparameter
165. ruktur bei der eine Untermenge der Quellzeile eingelesen wird und eine Matrix Block Struktur bei der ein Ausschnitt aus der Quellmatrix eingelesen wird Aufgrund eines besseren Verhaltens beim Datentransport wird f r die Bildmerkmale f5 f6 und f3 die Matrix Block Struktur zur Summenbildung verwendet 60 4 3 GPU Implementierung 4 3 2 6 Index abh ngige Merkmal Gleichungen Ein Blick auf die Gleichungen der Bildmerkmale und der Definitionen zeigt dass einige den Index mit in die Berechnung einbeziehen Gemeint ist dass der Grauwert entsprechend der Po sition in der vollen Co Matrix mit einbezogen wird Indexabh ngige Gleichungen sind 4 3 4 4 4 5 4 14 4 15 4 17 und 4 18 die die Bildmerkmale f3 f4 f5 und die De finitionen Py y Py mean und var berechnen Aufgrund der gepackten Co Matrix entsteht f r die Berechnung der indexabh ngigen Gleichungen ein Mehraufwand da ein zus tzlicher Lesezugriff auch die Lookup Tabellen f r die Grauwertbestimmung notwendig ist Um den Geschwindigkeitseinbruch klein zu halten wird ein Texturencache f r die Lesezugriffe auf die Lookup Tabelle verwendet 4 3 2 7 Zwischenergebnisvektor Px y k Der Zwischenergebnisvektor P k mit k 2 3 2Ng 2 und Ng 4096 hat eine Gr e von 8188 Elementen zu gro f r den Shared Speicher mit 4096 Elementen 16kBytes 4By tes pro Element Falls doch der gesamte Shared Speicher verwendet wird k nnte aufgrund der Knappheit nu
166. s eine Vorschrift angewendet wie ein entsprechender Knoten im Block AST zu generieren ist Dieser Vorgang ist in private Hilfsmethoden unterteilt worden die von compile aufgerufen werden Im privaten Bereich unter der Instanzvariable vnaiast wird der Block AST entste hen Die Hilfsmethode findBlockInast sucht im Block AST eine bestimmte Stelle an der 79 5 OpenCL zu FPGA bersetzer die Hilfsmethode insertBlockast einen neuen Block einf gen kann Die Knoten des Block ASTs sind Spezialisierungen der abstrakten Klasse vnaiBlock Die Ab geleiteten Klassen werden im n chsten Abschnitt vorgestellt 5 3 5 2 Zuordnung Instruktion zum VHDL Block Der Pipeline Baukasten enth lt f nf VHDL Bl cke aus denen die Pipeline zusammengesetzt wird Mit wenigen Bl cken auszukommen hat den Vorteil dass ein Zusammensetzen wenig komplex ist D h es gibt nicht viele M glichkeiten die Bl cke miteinander zu verbinden Der entstehende Nachteil ist dass viel Funktionalit t aus der OpenCL Kernelfunktion auf wenig Bl cke verteilt werden muss Diese Arbeit verfolgt den Ansatz die Funktionalit t der VHDL Bl cke f r Standardf lle auszulegen und zu optimieren Die Tabelle 5 2 geht in der ersten Spalte von den Instruktion Klasseninstanzen aus die in der zweiten Spalte auf VHDL Bl cke widergespiegelt werden Klassenname VHDL Block Kommentar InstCall Wird nicht in einen VHDL Block bersetzt InstCmp BlockCondAss
167. schleunigung durch den Einsatz von Co Prozessoren zu erwarten ist l sst sich mit der Formel von Amdahl 3 1 berechnen Der Parameter n steht f r die m gliche Parallelisierung d h auf wie viele Prozessoren die Rechenzeit aufgeteilt wird Die Formel hat den Ursprung in Amdahls Ver ffentlichung von 1967 20 Besser und mit vielen Beispielen erl utert ist sie in 40 Computer Architecture Beschleunigung 3 1 ts 2 Mit genauer Betrachtung der Formel wird klar dass f r eine gro e Beschleunigung die Aus f hrungszeit des seriellen Programmteils deutlich kleiner sein muss als die des parallelen Pro grammteils Die theoretisch maximale Beschleunigung konvergiert schnell gegen einen maxi malen Wert Intuitiv kann bei einem 50 prozentigen parallelen Programmteil eine maximale Beschleunigung von zwei erwartet werden bei 90 Prozent ergibt das einen Faktor von Zehn Ob sich der Aufwand einer Beschleunigung lohnt kann somit genau abgewogen werden Daher ist es wichtig die genauen Ausf hrungszeiten der seriellen und der parallelen Programmteile zu kennen Profiling Werkzeuge sind in der Lage ein Profil der Ausf hrungszeiten aller Funk tionen zu ermitteln Wei man welcher Teil der Anwendung am langsamsten ist geht es darum diesen zu be schleunigen Der erste Ansatz sollte sein den Algorithmus mathematisch zu untersuchen Gibt es die M glichkeit die Formeln zu vereinfachen um Rechenoperationen einzusparen oder re cheninten
168. se Schreibtransfers auf den Speicher Es gibt Anforderungen an die Basisadresse und die Zugriffsblockgr fe beim Lesen bzw beim Schreiben auf den globalen Speicher Die kleins te Zugriffsgr e besteht aus einem zusammenh ngenden Block von 64 Bytes der mit einem 102 5 5 OpenCL Laufzeitumgebung Vielfachen von 64 Bytes und der genauen Bytegrenze von allen 64 Bytes adressiert werden muss Der DMA Transfer besitzt die Anforderung einer konfigurierbaren maximalen Daten l nge Die Methoden readram und writeram ber cksichtigen alle drei Anforderungen und setzen beliebige Adressen und Datenl ngen wenn n tig in mehrere DMA Transfers um Reset Funktionen Vor jedem DMA Transfer muss die entsprechende Lese bzw Schreib DMA Engine r ckgesetzt und die Abbruchzeiten neu gesetzt werden Die Methode resetPCIe o bernimmt diese Aufgabe Sie wird von den Transferfunktionen vor jedem DMA Transfer aufgerufen Die Methode resetPipeline setzt ein Bit im Kontrollregister das f r wenige Taktzyklen ein Reset in der Pipeline durchf hrt Lese Schreibtransfers auf die Register Beim Lesen und Schreiben der Register in der Kon trolleinheit des Rahmendesigns implizieren die Methoden readreg und writereg die Re gisteradresse im Adressraum so dass zur Adressierung lediglich die gew nschte Registernum mer angegeben werden muss Gr e der parallelen Indizes setzen Mit den Methoden writeworkGroupSize und writework ItemSize
169. sign synthetisiert pipelineTCL sh build pipeline vha Das Skript generiert lediglich die Hardware Pipeline als dynamischen Teil und wird zum bersetzen statischen Rahmendesigns verkn pft Der n chste Schritt ist die Pipeline auf dem Chip auszutauschen Weitere Details sind im Abschnitt Pipeline Module mit DPR austau schen 5 5 3 2 erl utert 5 5 2 4 Daten bertragung und Pipeline starten Befindet sich die Kernelfunktion als Pipeline im FPGA Kann sie f r eine Berechnung heran gezogen werden Der Quelltextausschnitt 5 4 zeigt welche Strukturen ben tigt werden um die Berechnung auszuf hren kernel clCreateKernel program kernel amp status queue clCreateCommandQueue context device 0 amp status meml clCreateBuffer context CL_MEM_READ_WRITE sizeof unsigned int MEGA NULL amp status mem2 clCreateBuffer context CL_MEM_READ_WRITE sizeof unsigned int MEGA NULL amp status h_meml new unsigned int MEGA h_mem2 new unsigned int MEGA status clEnqueueWriteBuffer queue meml true 0 sizeof unsigned int x MEGA h_meml 0 NULL NULL status clSetKernelArg kernel 0 sizeof meml meml status clSetKernelArg kernel 1 sizeof meml meml status clSetKernelArg kernel 2 sizeof mem2 mem2 107 14 15 16 18 5 OpenCL zu FPGA bersetzer const size_t global_work_size 3 MEGA 1 1 const size_t local_work_size 3 1 1 1 status
170. sive Operationen Divisionen Logarithmus zu vermeiden bietet das die gr t 23 3 Stand der Technik m gliche Beschleunigung Schneller als gar nicht Rechnen zu m ssen geht nicht Wenn der Algorithmus seriell ist kann man in der Literatur nach einer parallelen Version suchen Es kann durchaus sein dass der Algorithmus f r die bisher seriell rechnende Welt serialisiert wurde und urspr nglich parallel war Erst der letzte Schritt ist die Portierung und Anpassung an die Co Prozessor Architektur beispielsweise auf eine GPU oder einen FPGA In erster Linie wird durch eine Parallelisierung beschleunigt Die einfachste Variante ist die Parallelisierung der Anwendung nach Flynn MISD 28 indem die Anwendung mehrfach ausgef hrt wird Die Parallelisierung des Datenflusses SIMD betrifft die Anwendung selbst in dem die Operatoren gleichzeitig auf mehreren Werte angesetzt werden SIMD Eine Paralle lisierung mit einer Pipeline basiert darauf das ganze Programm in Funktionseinheiten gleicher L nge zu unterteilen In jedem Takt k nnen die Funktionseinheiten ihr Teilprogramm berech nen und die Ergebnisse an die n chste Einheit weiterreichen Dieses Prinzip wird bei der Pro zessorentwicklung genutzt die Taktrate einer Abarbeitung von Instruktionen zu steigern Bei einer Parallelisierung eines Programms liegt der Gewinn in der gleichzeitigen Ausf hrung al ler berechnenden Operatoren im Programm zu jedem Takt 3 1 2 GPGPU
171. ss die Anwei sungen an geeigneten Stellen im Quelltext erg nzen Cache Anweisungen Der Programmierer kann Cachegr e Zeilenl nge Anzahl der B nke Cache Lese Schreibrechte konfigurieren und hat damit einen entscheidenden Einfluss auf den optimalen Datenfluss Separate Speicher Das Einbinden weiterer Speicher reduziert den Zugriff auf den langsame ren Hauptspeicher Implementierungsstil Der FPGA kann eine TCL Operation mit unterschiedlichen Ressour cen umsetzen Mit Anweisungen wird dem Kompilierer mitgeteilt welche Operation beispiels weise mit Logikzellen mit DSP Slices oder sogar mit einem Softcore Prozessor implementiert wird Schleifen aufrollen Die Anzahl der Schleifendurchl ufe kann durch Daten Parallelit t redu ziert oder gar ganz aufgel st werden Integer Bitbreiten spezifizieren Nicht in jedem Programm wird die Bitgenauigkeit eines In tegers voll ausgenutzt Kennt der Programmierer den Wertebereich der Berechnungen k nnen durch Eingrenzungen der Bitbreite FPGA Ressourcen eingespart werden 3 4 3 Parallele C Sprachen f r den FPGA 3 4 3 1 FCUDA FCUDA 67 ist eine CUDA Erweiterung die Kernels auf den FPGA abbildet Mit erg nzen den Anweisungen werden die Kernel Funktionen in eine C Variante namens AutoPilot C 86 bersetzt Die Syntheseprogramme von AutoPilot erstellen eine Netzliste die mit der Xilinx Werkzeugkette das Design auf den FPGA zur Ausf hrung bringt Der erste bersetzungsschritt in Bil
172. sse in K stchen Alle Bl tter gekennzeichnet mit ei nem Stern sind ihrerseits von den Co Matrizen abh ngig Der Abh ngigkeitsgraph bietet mehrere Optimierungen f r eine Implementierung Wie bereits erw hnt zeigt er die optimale Reihenfolge der Berechnungen um doppelte zu vermeiden Des weiteren k nnen Programmstrukturen abgeleitet werden Alle Bl tter eines Zweigs k nnen ge meinsam in einer Funktion bzw Schleife implementiert werden Daraus ergibt sich dass f r diesen Zweig die Quellen nur einmalig gelesen werden was wiederum unn tige Speichertrans fers reduziert Ebenso wird das Speicherzugiffsverhalten auf kleinere Regionen des Speichers konzentriert worin Vorteile f r Architekturen mit Caches entstehen 54 4 2 CPU Implementierung 4 2 CPU Implementierung Das erste Ziel war die bereits existierende Software Version zu optimieren um sie auf einem Computercluster als Ein CPU Applikation laufen zu lassen Durch mehrfache Ausf hrung mit unterschiedlichen Zellbildern kann der gesamte Rechenaufwand parallelisiert werden Bild 4 4 zeigt die Softwarestruktur in einem Struktogramm Die u ere Schleife iteriert ber alle Zellen C eines Multizellbildes Innerhalb der Schleife werden alle Co Matrizen generiert Weiter folgt eine Doppelschleife ber den Winkel A und Distanz D Das hei t f r jede Zel le C existieren A D Co Matrizen die f r alle 13 Bildmerkmale seriell berechnet werden
173. sse vom Grafikkartenspeicher in den Hauptspeicher des PCs kopiert Bild 2 1 zeigt den Quelltext einer Kernelfunktion die ei ner Matrixaddition berechnet und somit eine zweidimensionale Threadanordnung des Grids und der Bl cke nutzt __Gglobal__ void CUDA_matrixAdd float A float B float C Anzahl Threads in einem Block int blockSize blockDim y x blockDim x aktuell ausgef hrte Blocknummer int blockNum blockIdx y x gridDim x blockIdx x aktuell ausgef hrte Threadnummer im Block int threadNum threadldx y blockDim x threadIdx x globale Threadnummer von allen Bl cken int globalNum blockNum blockSize threadNum Jeder Thread adressiert zwei Speicherzellen im Hauptspeicher addiert und schreibt sie zurueck C globalNum A globalNum B globalNum int main Kernelaufruf mit ca 50000 Threads CUDA_matrixAdd lt lt lt 256 192 gt gt gt A B C Quelltext 2 1 Von vielen Threads durchlaufene CUDA Kernelfunktion zur Berechnung einer Matrixaddition Die in der Kernelfunktion eingebauten Variablen gridDim blockDim blockIdx und threadIdx existieren ohne Deklaration und sind Strukturen mit jeweils drei Komponenten x y und z Sie zeigen an welcher Thread innerhalb welchen Blocks gerade in der Ausf hrung ist Im Quelltextbeispiel wird in lokalen Variablen die Blockgr e die Blocknummer im Grid und die Threadnummer im Block berechnet Die Blocknummer und Threadnummer berechn
174. t FPGA Beschleunigerkarte und dem externen Speicher ist sehr komplex im Vergleich zur eben gezeigten Vektor Additions Funktion F r die Aufgaben einen Datenfluss herzustellen ben tigen Programmierer sehr viel Zeit und umfang reiche Hardwarekenntnisse Die OpenCL Implementierung bietet eine Umgebung OpenCL Laufzeitumgebung in der die Kommunikation mit der FPGA Beschleunigerkarte und die Ge nerierung eines Datenflusses bereits implementiert ist Der n tige Progammaquelltext der die Laufzeitumgebung verwendet und die Kommunikation mit der Beschleunigerkarte regelt ist f r alle OpenCL Implementierungen sehr hnlich weit verbreitet und leicht zu erlernen Wei ter bietet die OpenCL Implementierung einen bersetzer an OpenCL zu FPGA Kompilierer eine C hnliche parallele Funktion in eine Hardwarebeschreibungssprache zu kompilieren Mit der Laufzeitumgebung und dem bersetzer erm glicht diese OpenCL Implementierung Programmierern ohne Hardwarekenntnisse eine FPGA Beschleunigerkarte einzusetzen ber setzte Funktionen k nnen zur Laufzeit im FPGA geladen und zur Ausf hrung gebracht werden Die bersetzungszeit einer OpenCL Kernelfunktion in ein Pipelinemodul mit weniger als zehn Operatoren betr gt ca 40 Minuten Die bersetzungszeit mit der Datenfluss und Kontrolllogik PCIe Core DMA Engine Speicherkontroller und Rahmendesign ben tigt mehr Zeit Bereits bersetzte Pipelinemodule k nnen im Bruchteil einer Sekunde in den FPGA gela
175. t dass nur noch 278 Zeilen und Spalten gespeichert werden w hrend die Co Matrix aus Bild 4 1 a in voller Gr e 4096 Zeilen und Spalten ben tigt F r dieses Beispiel Konnte der Speicherplatzbedarf von 64Mbyte auf 300kBytes reduziert werden Im Durchschnitt liegt die gepackte Co Matrix Gr e bei 1 5 MBytes F r die sp tere Bildmerkmalsberechnung ist die Position eines Wertes in der Co Matrix von Bedeutung Die Position repr sentiert einen Grauwert in der vollen Co Matrix und flie t bei manchen Bildmerkmalen mit in die Berechnung ein Um sp ter den Grauwert bestimmen zu k nnen wird neben der gepackten Co Matrix eine Index Grauwert Tabelle konstruiert Kompressionsmethoden die sp rlich besetzte Matrizen als Position Werte Paar in einer Struk turliste speichern haben den Nachteil die Elemente indirekt adressieren zu m ssen was den Speicherzugriff erheblich verlangsamen w rde Diese Methode der gepackten Matrizen stellt einen Kompromiss zwischen wenig Speicherbedarf und direkten Speicherzugriffen dar 50 4 1 Untersuchung des Haralick Algorithmusses 4 1 2 Haralick Textur Merkmale Die Haralick Texturen Merkmale umfassen 14 Bildmerkmale zusammengefasst in 73 In die ser Implementierung wurden die Bildmerkmale 4 1 bis 4 13 optimiert Bildmerkmal Num mer 14 Maximul Correlation Coefficient wurde bereits in der Implementierung der Biologen weggelassen Sie haben festgestellt das Bildmerkmal Nummer 14 keinen Beitr
176. t die Vergleichsfunktion mit der die Daten der cmp Schnittstelle mit dem konstanten Ausdruck CMP_CONSTANT vergli chen werden Implementierte Vergleichsfunktionen sind gleich ungleich gr er gr er gleich kleiner und kleiner gleich e Das boolesche Vergleichsergebnis steuert einen Multiplexer an der entweder den Daten kanal a oder b auf den Datenausgang c weiterleitet 88 5 3 VHDL Kompilierer e S mtliche Dateneing nge sind mit Verz gerungsgliedern ausgestattet die sich mit den DELAY Parametern konfigurieren lassen 5 3 6 3 Zus tzliche Logik Dieser Abschnitt entspricht dem fehlenden bersetzungsschritt 3 aus dem Blockschaubild 5 4 F r die Pipeline ist zus tzliche Logik erforderlich die mit der bersetzung generiert werden muss Ohne die zus tzliche Logik k nnte mit der benachbarten Logik dem Rahmendesign keine ordnungsgem e Funktion entstehen Speicherbus Oder Logik In der Pipeline k nnen sich mehrere Transferbl cke befinden die alle an den Speicherbus angeschlossen sein m ssen Es gibt mehrere Varianten viele Quell signale zu einem zu kombinieren Eine Variante ist das Multiplexen bei dem ein Kontrollsi gnal bestimmt welches Quellsignal auf den Bus getrieben wird Eine andere Variante ist die Tristatelogik wobei alle Quellsignale elektrisch miteinander verbunden sind aber immer nur eines senden darf w hrend die anderen einen hochohmigen Zustand einnehme
177. t werden automatisch die Elemente 0 bis 31 gelesen somit werden mit einem Spei cherzugriff die Threads O bis 31 des gleichen Warps bedient Im Benutzerhandbuch wird dies als coalescing bezeichnet Eine weitere Praktik auf die geachtet werden muss betrifft wieder die Speichertrans fers Bei der Adressierung einer Matrix oder eines Volumens muss jede Basisadresse einer Zeile ein vielfaches der Warp Gr e sein M chte man die Elemente 33 34 aus dem Speicher lesen werden aber die Elemente 31 32 33 34 angefordert vielfaches der Warp Gr e In diesem Fall sind die Elemente 31 und 32 unn tigerweise gelesen worden Verhindert wird dies indem jede Zeile in der L nge erweitert wird damit die n chste Zeile eine g ltige Basisadresse besitzt Dabei kann am Ende jeder Zeile ein Da tenbereich entstehen der nicht verwendet wird Im Benutzerhandbuch mit dem Begriff pitch zu finden Der Shared Speicher ist in B nke unterteilt die unterschiedliche Speichermodule repr sentieren Wenn viele Threads auf den Shared Speicher gleichzeitig zugreifen wollen muss garantiert werden dass jeder Thread eine unterschiedliche Bank adressiert Im Fall eines Bank Konflikts wenn mehrere Threads auf die selbe Bank zugreifen werden die Transfers serialisiert Dies gilt es zu vermeiden Siehe im Benutzerhandbuch unter dem Begriff bank conflict Wie oben bereits beschrieben sollten alle Threads eines Warps dem selben Ausf hrungs pfad folgen Da eine
178. teraktionen zwischen Viren mit Zellen geforscht Bereits in der Vergangenheit wurden Zellen mit Viren infiziert und es wurde beobachtet wie die Viren in die Zelle eindringen sich vermehren und wieder austreten Die Untersuchung konzentrierte sich auf einzelne Proteine oder Gene was auch der Grund daf r ist nur wenig allgemeine Aussagen treffen zu k nnen Ein systembiologischer Ansatz verspricht allgemeinere und zielgerichtete Aussagen treffen zu k nnen Die Systembiologie ist eine junge Disziplin in der die Zelle als biologisches System mit allen vorhandenen Zellbausteinen biologischen Prozessen und Interaktionsm glichkeiten in einem mathematischen Modell betrachtet wird Lebensprozesse mit mathematischen For meln zu beschreiben ist keine leichte Aufgabe aber der Erkenntnisgewinn wird gro sein Wirkungsvolle Medikamente mit m glichst wenigen Nebenwirkungen herstellen zu k nnen ist ein Zukunftsziel dieser Forschung An einem vereinfachten Beispiel soll verdeutlicht werden wie eine systembiologische Anwen dung funktioniert Zellen besitzen nach heutigem Kenntnisstand ca 20 25 Tausend Gene in denen alle vererbba ren Informationen gespeichert sind Einzelne Gene oder auch Kombinationen davon sind f r die Proteinproduktion Enzyme verantwortlich Die Enzyme werden f r chemische Reaktio nen ben tigt beispielsweis einer Zellteilung aber auch Viren brauchen Enzyme als Nahrung 1 Einf hrung und Ziele des Viroquant Projekts
179. tragenden Protokollinformationen und einer nicht optimalen Ausnutzung aller Takte aufgrund von Latenzzeiten Die DMA Engine steht auf der Internetseite von OpenCores 29 bzw den Institutsseiten der Universit t Heidelberg 47 zum Herunterladen zur Verf gung Details der DMA Engine sind im CBM Bericht 30 nachzu lesen Aus Designsicht bietet der PCle Core zwei einfache Benutzerschnittstellen zum Lesen und Schreiben an die mit der PCIe Einheit im Rahmendesign verbunden sind 5 4 3 PCle Einheit In Bild 5 20 ist der funktionale Aufbau der PCIe Einheit aus dem Rahmendesign schematisch dargestellt e Die PCIe Einheit verf gt ber mehrere Dualport FIFOs die unterschiedlich getaktet sind und somit neben der Datenspeicherung auch die Aufgabe der Taktumsetzung haben Die Signale von und zur DMA Engine clkPCle sind mit 125 MHz getaktet die Signale von und zu den benachbarten Einheiten clkUser sind mit 133 MHz getaktet e Es gibt zwei DMA Schnittstellen Eine um Daten aus dem FPGA zum Host zu trans ferieren Lesen und eine die Daten vom Host zum FPGA transferiert Schreiben Die Signalnamen beider Schnittstellen im Bild beginnen mit dem Pr fix pcie e Beim Schreib DMA wird ber die Adresse das Ziel FIFO zum Speicher RAM oder zu den Registern REG bestimmt und die Daten werden dahin geleitet e Der DMA Lesevorgang wird von einer Zustandsmaschine gesteuert Sie bestimmt ber die Adresse von welcher Schnittstelle RAM ode
180. ts in FPGAs In Proceedings of the 2006 ACM SIGDA 14th international symposium on Field programmable gate arrays FPGA 06 Seite 12 20 ACM New York NY USA 2006 doi 10 1145 1117201 1117204 Pavle Belanovic und Miriam Leeser A Library of Parameterized Floating Point Modules and Their Use In Proceedings of the Reconfigurable Computing Is Going Mainstream Literatur 24 25 26 27 28 29 30 31 32 33 12th International Conference on Field Programmable Logic and Applications FPL 02 Seite 657 666 Springer Verlag London UK UK 2002 Ian Buck Tim Foley Daniel Horn Jeremy Sugerman Kayvon Fatahalian Mike Houston und Pat Hanrahan Brook for GPUs stream computing on graphics hardware ACM Trans Graph Volume 23 777 786 August 2004 doi 10 1145 1015706 1015800 C Conrad H Erfle P Warnat N Daigle T L rch J Ellenberg R Pepperkok und R Eils Automatic identification of subcellular phenotypes on human cell arrays Genome Res Volume 14 6 1130 6 2004 doi 10 1101 gr 2383804 Qualis Design Corporation VHDL Quick Reference Card URL http www eda org rassp vhdl guidelines vhdlgrc paf 1995 Ron Cytron Jeanne Ferrante Barry K Rosen Mark N Wegman und F Kenneth Zadeck Efficiently computing static single assignment form and the control dependence graph ACM Trans Program Lang Syst Volume 13 451 490 October 1991 doi 10 1145 115372 115320 M Flyn
181. ufe mit Register Beispielsweise liegt das Ergeb nis nach zwei Takten im Block 2 fest Der rechte Teil der Zuweisung entspricht einer kombinatorischen Logik und darf mehrere Operatoren enthalten wobei die maximale Durchlaufzeit die Taktrate mindert e Der Kanal 1 entspricht einem FiFo der zwischen den beiden seriellen Pfaden im pa rallelem Segment einen Datenaustausch zul sst Dabei verh lt sich das FiFo wie eine Synchronisation da normalerweise Block 2 gleichzeitig mit Block 4 ausgef hrt werden w rde Der Operator speichert einen Wert im Kanal ab der Operator wartet so lange bis ein Wert bereit liegt und liest ihn aus Handel C hat einige Einschr nkungen gegen ber ANSI C die f r eine Hardware bersetzung plausibel sind Es werden keinerlei Flie8kommadatentypen oder union Datentypen unterst tzt es gibt keine dynamische Speicherverwaltung mit malloc oder free und f r die Hardware schwierig realisierbare Rekursionen funktionieren nicht Es gibt weitere Sprachkonstrukte die von Handel C nicht bersetzt werden beispielsweise darf die sizeo Funktion oder die main Funktion keine Parameter und keinen R ckgabewert haben Weitere ANSI C Sprachelemente die in Handel C nicht konform sind lassen sich im Benutzerhandbuch nachschlagen 3 4 2 2 TRIDENT Trident 74 kompiliert C C Funktionen mit 1oat oder double Berechnungen in eine Hard warebeschreibungssprache und bietet die Synthese in ein FPGA Design Der Kompilierer gi
182. ung und Verdrahtung des gesamten FPGAs In der Regel spart dieser Vorgang Zeit und bei einer bersetzung vieler Partitionen k nnen die Xilinx Werk zeuge parallel auf Mehrkernprozessoren arbeiten Eine dynamische partielle Rekonfiguration DPR gemeint ist eine teilweise Neuprogrammie rung eines FPGAs ist der Austausch einer Partition mit einer anderen w hrend des Betriebs Voraussetzungen f r das Funktionieren sind im DPR Benutzerhandbuch 80 ausf hrlich er l utert und hier zusammengefasst e Die Schnittstellen der beiden Partitionen m ssen gleich sein e Der Austausch gelingt nur zwischen dynamischen Partitionen dynamisches Design und statischer Logik statisches Design e Es m ssen auf jeder Seite statisches und dynamisches Design vor der Schnittstelle Re gisterstufen sein Diese Anforderung existiert weil die Xilinx Tools ber diese Grenze das Zeitverhalten nicht optimieren k nnen e Vor dem Austausch muss die Grenze geschlossen werden Das bedeutet alle Signale vom dynamischen zum statischen Design m ssen logisch entkoppelt werden W hrend der Programmierung des dynamischen Designs k nnen dessen Ausg nge undefinierte Werte annehmen e Das gesamte Design ben tigt eine 10 h here maximale Taktfrequenz wenn DPR ver wendet wird 2 3 Kompiliererentwicklung 2 3 1 Frontend Das Frontend ist der erste Teil eines Kompilierungsprozesses der untersuchende Aufgaben hat Dabei wird der Quelltext
183. ure Im VIROQUANT Projekt sind die Aufgaben in drei Bereiche unterteilt A Biologie In diesem Bereich werden die Zellkulturen angelegt mit den Viren infiziert und die Zellbilder ausgewertet B Modellierung Eng in Zusammenarbeit mit Bereich A wertet dieser Bereich die Zellbilder aus und erweitert mathematische Modelle mit den Messergebnissen 1 2 Hochdurchsatzmikroskopie C Technologie Dieser Bereich arbeitet an der Verbesserung des Mikroskops und an den Bildalgorithmen zur Auswertung der Zellbilder zusammen mit den Bereichen A und B In den folgenden Abschnitten besch ftigt sich diese Dissertation weiter mit den Aufgaben aus dem Technologie Bereich C 1 2 Hochdurchsatzmikroskopie F r einen sogenannten Genomweiten Screen die Untersuchung der Signalwege bestimm ter Gene sind sehr viele Aufnahmen von Zellbildern n tig F r diese Menge ist ein Hoch durchsatzmikroskop erforderlich das sehr schnell die Zellkulturen fotografiert und mit einem Roboterarm die Proben austauscht Im Rahmen des Projekts werden existierende Mikrosko pe in ihrer Arbeitsweise beschleunigt um der Anforderung gerecht zu werden Bild 1 2 zeigt schematisch alle n tigen Komponenten f r die Datenaufnahme Sensor mit Linsen Speicher und Rechencluster N Mikroskop Roboter N FPGA Karte im PC Offline Prozessierung Bild 1 2 Hochdurchsatzmikroskop mit verbundenen Komponenten Eine Konsequenz eines schnell arbeiten
184. von Mikroskopaufnahmen mit hohem Bilddurchsatz Es wurden geeignete Klassifikations und Bildmerkmal Algorithmen studiert und ein entsprechendes Softwarepaket entwickelt Das Softwarepaket klassifiziert die Zellen in Proteinfunktionen und Ph notypen mit einer Pr zision von 83 F r die automatische Analyse der Mikroskopaufnahmen besteht ein hoher Rechenbedarf in der Gr enodnung von Monaten Das Profiling des Softwarepakets zeigt dass der Haralik Texturen Merkmal Algorithmus Ha ralick Algorithmus den gr ten Teil an Rechenzeit konsumiert Im Quelltext des Algorithmu ses wurden bereits Bem hungen unternommen die Laufzeit mit optimierenden Ma nahmen zu beschleunigen die in Kapitel 4 1 verbessert und erweitert werden Die zweite Arbeit benutzt ein FPGA auf dem die co occurrence Matrizen und die Haralick Texturen Bildmerkmale in einem speziell angepassten Hardwaredesign berechnet wurden Die Berechnungen der Matrizen deren Normierungen sowie der Bildmerkmale wurden mit Handel C in einem Design realisiert Die Ergebnisse zeigen eine Beschleunigung von 4 75 bei der Be rechnung der co occurrence Matrizen und eine Beschleunigung von 7 3 bei der Berechnung der Bildmerkmale gegen ber einer CPU Implementierung Bei dieser Entwicklung wurden lediglich sieben Bildmerkmale implementiert was f r das VIROQUANT Projekt nicht reicht denn es werden 13 Bildmerkmale f r die Auswertung der Bilder ben tigt Der verwendete FPGA hat 20 tausend Slices di
185. werden 4 Im letzten Schritt wird aus allen gesammelten und berechneten Informationen eine VHDL Datei mit der Hardware Pipeline generiert Das UML C Klassendiagramm in Bild 5 5 zeigt die Softwarestruktur des VHDL Backends Das Konzept baut auf Klassen mit Kompositionsbeziehungen auf die farbig markiert sind Jede Klasse steht in einer existenzabh ngigen Teil Von Beziehung zur dar ber liegenden d h jede Klasse h lt eine Referenz der abh ngigen Klasse die beim Konstruktoraufruf mit angegeben werden musste Aus dieser Struktur ergibt sich die Reihenfolge in der die Instanzen angelegt werden m ssen Ebenso ergibt sich die Reihenfolge der Methodenausf hrung Die Instanz von source h lt lediglich den SSA Quelltext und bernimmt die Aufgaben der le xikalischen Analyse den Quelltext in Tokens zu zerlegen Die existenzabh ngige Instanz von SourceCheck pr ft im Quelltext ob genau eine Kernelfunktion enthalten ist die Kernelfunktion keinen R ckgabewert hat daf r Parameter besitzt und ob die Syntax des Funktionsrumpfes keine Fehler aufweist Wenn die Pr fung fehl schl gt ist es garantiert dass die folgenden In stanzen ihre Aufgaben nicht ausf hren k nnen und der bersetzungsvorgang bricht an dieser Stelle ab Die n chste Instanz sourceattrib extrahiert Attribute aus dem Quelltext Ein Attri but ist die Parameterliste der Funktion die Parameterpaare listet F r jedes Paar wird der Name und der Typ eines Parameters festgest
186. windigkeitsgewinn 2 22 Cm m nn rn Skalierung des Algorithmusses 2 22 Con nn nn Optimierungsergebnisse der zweiten Version OpenCL Kompilier 2 2 2 oo nn nn 6 2 1 6 2 2 6 2 3 6 2 4 6 2 5 Nutzen der OpenCL Implementierung Nutzen des Pipelinekonzepts 2 2 2 2 2 m rn nn nn Bandbreite Speicherkontroller 2 2 o nn nn Ressourcenbedarf des Designs a 2 2 2 nn nen Beispiel Applikationen 2 2 2 on nommen 7 Fazit und Ausblick 7 1 Zieleder Arbeit a e e an au nr nn dea a a e a 7 2 Verbesserungen f r die Zukunft 2 2 2 non ee e A OpenCL FPGA Beispielanwendung Literatur XIV 111 111 111 112 113 113 113 114 115 115 116 119 119 121 123 134 1 Einf hrung und Ziele des Viroquant Projekts 1 1 Orientierung im Viroquant Projekt Weltweit sterben j hrlich drei Millionen Menschen an einer HIV Infektion Da sich 60 Millio nen Menschen im selben Zeitraum infizieren wird die Zahl an HIV Toten ohne Heilmittel stark ansteigen An chronischen Hepatitis Infektionen sterben j hrlich zwei Millionen Menschen er schreckende 500 Millionen erkranken Diese Zahlen stammen aus dem Projektantrag f r das VIROQUANT Projekt und sie alleine stellen eine ausreichende Motivation dar um aussichts reiche Forschungen zu f rdern die entweder Infizierten helfen k nnen oder Neuinfektionen reduzieren sollen Im VIROQUANT Projekt wird an den In
187. with source status status clBuildProgram program 1 amp device NULL NULL NULL if status CL_SUCCESS coutAndExit Could not build program status 123 76 77 78 79 80 81 A OpenCL FPGA Beispielanwendung kernel clCreateKernel program kernel amp status if status CL_SUCCESS coutAndExit Could not create kernel status queue clCreateCommandQueue context device 0 amp status if status CL_SUCCESS coutAndExit Could not create a command queue status f meml clCreateBuffer context CL_MEM_READ_WRITE sizeof unsigned int MEGA NULL amp status if status CL_SUCCESS coutAndExit Could not create a memory object status r mem2 clCreateBuffer context CL_MEM_READ_WRITE sizeof unsigned int MEGA NULL amp status if status CL_SUCCESS coutAndExit Could not create a memory object status r h_meml new unsigned int MEGA h_mem2 new unsigned int MEGA for i 0 i lt MEGA i h_mem1 i i h_mem2 i 0 status clEnqueueWriteBuffer queue meml true 0 sizeof unsigned int MEGA h_meml 0 NULL NULL if status CL_SUCCESS coutAndExit Could not transfer memory status status clSetKernelArg kernel 0 sizeof meml meml if status CL_SUCCESS coutAndExit Could not set kernel argument status status clSetKernelArg kernel 1 sizeof meml m
188. yps Die Bio logen k nnen Algorithmen in OpenCL schreiben und in ein Hardwaredesign f r den FPGA bersetzen was in einer Hardwarebeschreibungssprache f r sie zu komplex w re Neben der Einfachheit hat die parallele Sprache OpenCL den Vorteil der Portierbarkeit auf andere Archi tekturen Falls der FPGA Kompilierer wegen existierender Einschr nkungen den Algorithmus nicht bersetzen kann l sst sich das OpenCL Programm auch f r die GPUs in der Offlinepro zessierung bersetzen Schl sselworte CUDA Compiler Co Prozessor DPR FPGA GPGPU LLVM OpenCL Pipelinegene rator VHDL rekonfigurierbare Logik Abk rzungen ALU AST CLB CMP CPU CU CUDA DDR3 DMA DPR FIFO FPGA FPU GPGPU GPU HPC IR LLVM MEM PCIe PE SIMD SSA TCL VHDL Arithmetic Logical Unit arithmetische Recheneinheit Abstract Syntax Tree abstrakter Syntaxbaum Configurable Logic Block konfigurierbare Logikzelle Compare Vergleich Central Processing Unit Computerprozessor Compute Unit OpenCL Recheneinheit in OpenCL Compute Unified Device Architecture Programmiersprache f r Grafikkarten Double Data Rate 3 Speicherzugriffstechnik Direct Memory Access direkter Speicherzugriff Dynamic Partial Reconfiguration dynamische partielle Rekonfiguration First in First out Stapelspeicher Field Programmable Gate Array feldprogrammierbare Gatteranordnung Floating Point Unit Flie komma Recheneinheit General Purpose GPU GPU f r allgemeine Zwe

Download Pdf Manuals

image

Related Search

Related Contents

Manual del Usuario  Salon du livre final_LR - Institut Français  Utilisation du téléphone de bureau SIP Avaya E129  Reactivos - Annar Diagnóstica Import  Work Big IN35, IN35W, IN37  Quokka user manual 30 July 2012  PDF形式 :133KB  Logik L19LID628WE User's Manual  Samsung ES25 Инструкция по использованию  iGateway user guide  

Copyright © All rights reserved.
Failed to retrieve file