Brook for GPUs: Stream Computing on Graphics Hardware

Größe: px
Ab Seite anzeigen:

Download "Brook for GPUs: Stream Computing on Graphics Hardware"

Transkript

1 Ausarbeitung zum Thema Brook for GPUs: Stream Computing on Graphics Hardware Ian Buck, Tim Foley, Daniel Horn, Jeremy Sugerman, Kayvon Fatahalian, Mike Houston and Pat Hanrahan von Aldo Mühlhause Hauptseminar Graphische Datenverarbeitung Betreuung PD Dr. S. Gumhold

2 Inhaltsverzeichnis 1 EINLEITUNG ALLGEMEINES ARITHMETISCHE INTENSITÄT ZIELE STREAM-PROZESSOR-MODELL ENTWICKLUNG DER GAFIKHARDWARE-PROGRAMMIERUNG FEATURES STREAMS KERNELS REDUCTIONS IMPLEMENTIERUNG ARCHITEKTUR STREAMS KERNELS REDUCTIONS EVALUATION TESTUMGEBUNG TESTPROGRAMME ERGEBNISSE SCHLUSSFOLGERUNGEN AUSBLICK

3 1 Einleitung 1.1 Allgemeines Im Mittelpunkt der kommenden Betrachtungen steht die Auseinandersetzung GPU vs. CPU im Vordergrund. Aktuelle GPUs sind deutlich schneller als CPUs. Mit einer GeForce FX 5900 Ultra erreicht man z.b. eine Leistung von 20 GFLOPS. Für die gleiche Leistung bräuchte ein Pentium 4 eine Taktrate von 10 GHz. Jedoch sind GPUs schwer und umständlich zu programmieren. Aus diesem Grunde wurde BrookGPU von der Universität Stanford entwickelt. Brook beinhaltet einen Compiler, eine Sprache und ein Runtime-System für aktuelle GPUs. Die CPU soll jedoch immer noch universell nutzbar bleiben und ist sogar notwendig um die GPU-Programmierung zu organisieren. Bisher grundlegende Konzepte der GPU-Programmierung sind der Vertex-Shader und der Fragment-Shader. OpenGL und NVIDIA Cg sind die wichtigsten Programmierumgebungen für GPUs. Schwierig wird bei ihnen jedoch die Zuweisung des Textur-Speichers, die Konstruktion grafischer primitiven und das Laden von Shader-programmen. Für eine intensive GPU-Programmierung ist breites Wissen über Grafik-API notwendig und man unterliegt Einschränkungen durch die Grafikhardware. Die Brook-Programmierumgebung soll dem entgegen wirken. Die Sprache ist C- ähnlich und kann für aktuelle GPUs genutzt werden. Die GPU soll als Streaming- Coprozessor arbeiten und somit parallele Datenoperationen ermöglichen. Parallele Datenoperationen werden im Wesentlichen durch Streams ermöglicht. Zudem steht die Erhöhung arithmetischer Intensität im Vordergrund. 1.2 Arithmetische Intensität Die arithmetische Intensität beschreibt das Verhältnis arithmetischer Operationen zur Speicher-Bandbreite. Durch die Erhöhung der arithmetischen Intensität wird also versucht ein besonderes Augenmerk auf die Berechungszeit der arithmetischen Operationen zu legen. Eine höhere Gewichtung der Berechnungszeit ist von Vorteil, da man nicht abhängig von der Bandbreitenbeschränkung ist und die eigentliche Geschwindigkeit der Recheneinheit in den Vordergrund rückt. Dies macht die eigentliche Stärke der GPU aus, welche mehr auf der eigentlichen Berechungszeit liegen als auf der Bandbreite. Die Erhöhung der arithmetischen Intensität wird im Wesentlichen durch die Verwendung von Kernels realisiert. 1.3 Ziele Wie bereits erwähnt soll die GPU als allgemeiner Streaming-Coprozessor betrachtet werden. Des Weiteren sollen GPU basierte Berechnungen für die breite Masse zugänglich gemacht werden. Für den Programmierer sollen somit keine - 3 -

4 zusätzlichen Erfahrungen über die Computergrafik notwendig sein. Außerdem wird versucht störende GPU-Begrenzungen zu umgehen. Dennoch wird Wert auf die Performance gelegt. Hierbei soll der Vorteil in der Berechnungszeit gegenüber der CPU immer noch möglichst voll ausgeschöpft werden. Brook stellt sich zu dem als plattformunabhängig dar. Es werden Grafikkarten von ATI und NVIDIA unterstützt. DirectX- und OpenGL-Versionen sind möglich. Die Betriebssysteme Windows und Linux werden unterstützt. 1.4 Stream-Prozessor-Modell Das Model für eine Grafikhardware entspricht zum Größten Teil dem eines Vektorprozessors: Ein Shader-Programm arbeit mit einzelnen Elementen aus dem Inputregister und schreibt die Ergebnisse in das Outputregister. Es werden temporäre Register genutzt. Dies ist der wesentliche Unterschied zu Streamprozessoren. Hierbei wird auf einzelnen Elementen einer Menge von Eingabeströmen gearbeitet und als Ergebnis ein oder mehrere Ausgabeströme erzeugt. Während Vektorprozessoren nur eine einzelnen Operationen auf den Daten ausführen können, sind Stream-Prozessoren in der Lage mehre Operationen auf den Eingabestrom auszuführen. Modell einer Grafikhardware Stream-Prozessor-Modell - 4 -

5 1.5 Entwicklung der Gafikhardware-Programmierung NVidia und ATI Extensions waren nur für spezielle Grafikkarten geeignet. Die Programmierung der Grafikkarten geschah auf der Low-Level-Ebene. Breites Wissen über die Grafikkarten-API und über die Hardwareprogrammierung an sich war notwendig. Zudem konnten nur wenige Funktionen programmiert werden. Die folgenden OpenGL - ARB Extensions entstanden aus einem Zusammenschluss mehrerer Firmen. OpenGL sollte abstrakter werden. Man wollte auch unabhängiger von spezieller Hardware werden. Die Programmierung an sich blieb jedoch Assembler ähnlich. NVidias Cg zeigt einen Versuch (von mehreren) die Grafikhardware-Programmierung auf einer höheren Ebene zu praktizieren. Nvidia Cg ist eine C-basierte, High-Level-Programmiersprache. Eine hohe Kompatibilität zu anderen Sprachen ist gegeben. So können zum Beispiel Ergebnisse in DirectX Shader oder OpenGL Extension übersetzt werden. Brook setzt nun auf diesem Ansatz auf. Die Grafikhardware-Programmierung soll noch universeller und weiter abstrahiert werden. Losgelöst von der Hardwareschicht soll die Programmierung auf andere bereiche ausgedehnt werden. Cg Programmierer sind z.b. noch immer selber auf spezifische API Aufrufe angewiesen. In Brook wurde das Stream-Management weiter abstrahiert, um unabhängiger von der API zu werden

6 2 Features 2.1 Streams Streams sind definiert über eine Menge von Daten auf denen parallele Operationen ausgeführt werden können. Sie bestehen aus Elementen und haben eine Form. Die Form ist definiert über die Dimension des Streams. Streams sind mit gewöhnlichen Arrays zu vergleichen. Jedoch erlauben sie keine Indizierung. Somit besteht keine Abhängigkeit zwischen den einzelnen Elementen und parallele Operationen sind gewährleistet. Der Ausdruck float s<10,5> beschreibt z.b. einen 2-dimensionalen Stream vom Typ Float. Er enthält 50 Elemente und hat die Form 10 zu 5. Es werden die Typen float, sowie float2, float3 und float4(vektor-typen von NVIDIA Cg) unterstützt. Auch ist es möglich sich Strukturen als Kombination dieser Typen zu definieren. typedef struct ray_t { float3 o; float3 d; float tmax; } Ray; Ray r<100>; Durch die Verwendung dieser Strukturen wird zusätzlich noch einmal von der Grafikhardwareebene abstrahiert. Der Programmierer ist nicht direkt an Datentypen aus der Hardwareprogrammierung gebunden und kann sich selbst eigene Datentypen generieren. Eine gewisse Unabhängigkeit ist somit gegeben. Die Befehle StreamRead und StreamWrite transferieren Daten zwischen den Streams und dem Speicher. Vor einer Sequenz von Kernels werden somit die Daten aus dem Speicher geholt (StreamRead), die Kernels ausgeführt und danach das Ergebnis wieder in den Speicher zurück geschrieben (StreamWrite). Ein wesentlicher Nachteil entsteht hierbei für die GPU, weil bei CPU-Berechnungen die Befehle entfallen. 2.2 Kernels Kernels sind spezielle Funktionen die auf Streams ausgeführt werden können. Kernels verstärken den Focus auf die Zeit, in der eine Operation ausgeführt wird. Dadurch sind sie wesentlicher Bestandteil für die arithmetische Intensität. Der Aufruf eines Kernels auf einen Stream erzeugt implizit eine Schleife die über alle Elemente des Streams läuft. Akzeptiert werden verschiedene Typen als Argument: Input-Streams(read-only) enthalten Daten für Kernel-Prozess Output-Streams(writeonly) sind gekennzeichnet durch Schlüsselwort out und enthalten das Ergebnis der Berechnung, Gather-Streams(read-only) sind definiert über C-array-Syntax und können beliebig indiziert werden Konstanten(read-only) bezeichnen alle Elemente die keine Streams sind

7 Ein Kernel kann beliebig viele Output-Streams haben. Durch die Verwendung von Gather-Streams hat der Programmierer die Wahl zwischen Arrays und Streams. Der Gather-Stream erlaubt es auf beliebige Elemente zuzugreifen. Bei einem Stream werden pro Kernelaufruf alle Elemente durchlaufen. Somit zwingt Brook den Programmierer zwischen Daten, auf die von der Kernel über Gather-Operationen zugegriffen wird und Daten, die via Input Streams zu den Kernels transferiert werden, zu unterscheiden. Somit kann das System die Streams unterschiedlich behandeln. Auf Input-Streams wird in einem regelmäßigen Muster zugegriffen. Die Elemente werden in einem Kernelaufruf nicht wiederverwendet. Auf Gather-Streams erfolgt ein zufälliger Zugriff und hier können Elemente wiederverwendet werden. Die Verwendung von Kernels macht einen wesentlichen Unterschied zwischen Stream-Programmierung und Vektor-Programmierung aus. Kernels können beliebige, Funktionsauswertungen behandeln, während Vektor-Operationen aus einfachen mathematischen Berechungen bestehen. Vektor-Operationen erfordern, dass temporäre Daten, in großen Vektor-Register- Dateien gespeichert werden. Bei Kernels werden diese Daten in lokalen Registern gespeichert. Somit wird die Bandbreitennutzung reduziert und die arithmetische Intensität dadurch erhöht. kernel void foo (float a<>, float b<>, float t, float array[], out float result<>) { result = array[t] + a + b; } float a<100>; float b<100>; float c<100>; float array<25> foo(a,b,3.2f,array,c); In diesem Beispiel ist foo ein Kernelaufruf. Die Variablen a und b sind Input-Streams. Als Output-Stream wurde c definiert. Array beschreibt hier ein Gather-Stream und t (3.2f) wird als Konstante behandelt. Der Ablauf in der Kernel sieht wie folgt aus: for (i=0; i<100; i++) c[i] = array[t]+a[i]+b[i]; Hierbei werden a und b komplett durchlaufen. Hingegen wird array nur an einer konstanten Stelle aufgerufen

8 2.3 Reductions Reductions berechnen aus einer Menge von Daten (Streams) einzelne Werte. Aus einem einzelnen Input-Stream werden ein kleinerer Output-Stream oder einzelne Werte berechnet. Das Schlüsselwort für den Output ist reduce. Reductions werden z.b. für die Berechnung der arithmetische Summe oder des Maximums verwendet. Da es sich hierbei um eine assoziative Operation handelt, ist es möglich Reductions in einer beliebigen Reihenfolge auszuführen. Die Form von Input- und Output-Stream entscheidet welche Elemente reduziert werden. kernel void mul (float a<>, float b<>, out float c<>) { c = a * b; } reduce void sum (float a<>, reduce float r<>) { r += a; } float A<50,50>; float x<1,50>; float T<50,50>; float y<50,1>;... mul(a,x,t); sum(t,y); In diesem Beispiel wird mit Hilfe einer Reduction eine Vektor-Matrix-Multiplikation der Form y=ax ausgeführt. X und y sind Vektoren und A (und T) eine Matrix. X enthält den Eingabevektor und y ist das Ergebnis. A beschreibt die Eingabematrix und T wird zur Zwischenspeicherung genutzt. Der Stream x besteht somit aus einer Zeile und 50 spalten. Aufgrund der folgenden Berechung wurde dieser Vektor praktisch um 90 Grad gedreht. Y besteht aus 50 Zeilen und einer Spalte. A und T haben jeweils 50x50 Elemente. Zunächst wird über einen Kernelaufruf x mit A elementenweise multipliziert. Das Ergebnis wird in T zwischen gespeichert. Für eine vollständige Vektor-Matrix

9 Multiplikation müssen nun alle Werte einer Zeile aus T aufsummiert werden. Dies übernimmt die Reduction. Anhand der Form von y und T entscheidet die Reduction das jeweils ein Wert in y (zeilenweise) alle aufsummierten Werte der entsprechende Zeile aus T enthält. reduce void sum (float a<>, reduce float r<>) { r += a; } float a<20>; float r<5>; sum(a,r); In diesem Beispiel sind a und r eindimensionale Streams. Durch die Verwendung der arithmetischen Summe wird a zu r reduziert. Folgender Code wird in der Reduction ausgeführt: for (int i=0; i<5; i++) r[i] = a[i*4]; for (int j=1; j<4; j++) r[i] += a[i*4 + j]; Aus a werden also immer vier Werte zu einem Wert in r reduziert

10 3 Implementierung 3.1 Architektur Die oberste Ebene beschreibt die Brook source files. Darunter befindet sich der source to source compiler. Dieser basiert auf ctool (einen open source C-Parser). Er bildet Kernels auf Cg-Shader ab. Diese werden später von herstellerspezifischen Compilern in Assemblercode übersetzt. Die Brook run-time library ruft über c++ die Kernels auf. Sie bildet die Schnittstelle zur GPU API. OpenGL- DirectX- und CPU-Implementierungen sind möglich. Der Programmierer hat also die Möglichkeit sich sein backend auszusuchen und kann somit die Ergebnisse besser verglichen. Zudem ist die Plattformenabhängigkeit gegeben. Im Folgenden werden die zuvor beschriebenen Features von Brook noch einmal unter dem Aspekt der Implementierung beleuchtet. 3.2 Streams Streams werden repräsentiert als Floating-Point-Textur. StreamRead und streamwrite, sowie Gather-Operationen werden als Texturzugriffe realisiert. Wiederholungs- und Sprung-Operationen werden mit texturesampling erreicht C++ stellt Streams als gewöhnliche Grafik-API-Texturen dar. Somit werden die Berechnungen für den Programmierer visualisiert. Die Texturen können dann von einer gewöhnlichen Grafik-Applikation gerendert werden. Dafür müssen aber Streams in einem festgelegten Texturlayout verfügbar sein. Als Default-Einstellung gilt: Texturdimension = Streamdimension. Dies kann jedoch zu Problemen führen. Eine Floating-Point-Textur ist begrenzt auf Zwei Dimensionen. Zusätzlich darf eine Textur nur 4096 (bei NVIDIA) bzw (bei ATI) Elemente pro Dimension enthalten. Wenn die Texturdimension gleich der Streamdimension ist treffen diese Beschränkungen auch auf die Streams zu. Hierfür gibt es eine Compileroption, welche die Streamdaten auf mehrere Reihen einer Textur verteilt. Eine beliebige Größe der Streams ist möglich, solange alle Elemente in eine Textur passen. Bei Zugriff auf ein Element im Stream erfolgt eine Konvertierung von der Streamposition zur entsprechenden Texturposition. Dabei wird der Position eines Streamelementes ein Integerindex zugewiesen. Die Größe des Integerindex ist jedoch wiederum abhängig von der Größe des Floating-Point-Formats. Bei ATI ist nur ein Integerindex von maximal möglich. Somit wurde die eindimensionale

11 Streamgröße nur von 2048 auf vergrößert. Ein allgemeineres Adressierungs-Model für den Speicher auf der Grafikkarte ist also wünschenswert. 3.3 Kernels Der Fragmentprozessor wird zum Ausführen von Kernel-Funktionen genutzt. Dabei wird der Body von dem Kernel in einen Cg-Shader umgewandelt. Danach werden diese Shader von NVIDIA / Microsoft Compilern in GPU Assemblercode übersetzt. Die Shader-Outputs sind bei der Hardware jedoch begrenzt. Ein Problem entseht hierbei wenn der Kernel mehr Outputs verwendet, als hardwareseitig unterstützt werden. Dies trifft auch bei der Verwendung von Strukturen zu, welche dann die Outputs der enthaltenen Streams hat. Wenn dies eintritt wird der Kernel auf mehrere Durchläufe verteilt. Jeder Durchlauf erzeugt eine Kopie des Kernels. Mat4Mult ist ein Programm, welches eine Multiplikation von zwei Matrizen der Form 4 zu 4 ausführt. Das Ergebnis beinhaltet 4 Outputs. Das Programm wurde einmal auf einer Hardware ausgeführt, welche die 4 Outputs unterstützt (Mat4Mult4) und einmal auf eine Hardware mit nur einem Output (Malt4Mult1). Man sieht, dass die Anzahl an Operationen bei beiden gleich ist. Die Begründung dafür ist, dass unabhängig jede Reihe der Output-Matrix berechnet werden kann. Somit müssen bei Math4Mult 1 keine Operationen wiederholt werden und jede Kernel kann unabhängig von den Berechnungen der anderen die Funktion ausführen. Die Texturzugriffe sind jedoch bei Mat4Mult1 höher da pro Durchlauf alle 16 Elemente aus dem Speicher geholt werden müssen. Die Anwendung Cloth stellt eine Animation eines bewegten Tuches dar. Hierbei treten Abhängigkeiten in Geschwindigkeit und Position auf. Wiederholte Berechnungen müssen somit bei Cloth1 getätigt werden und es erhöhen sich hier auch die arithmetischen Operationen. Also sind Berechnungen die nicht voneinander abhängen und multiplere Output- Unterstützung besser geeignet. DirectX rendert direkt Texturen welche Streamdaten enthalten. Bei OpenGL ist dies jedoch nicht so einfach möglich. Das Rendern der Texturen ist nur über den OpenGL Pbuffer realisierbar. Dieser Weg bringt jedoch Performanceverluste mit sich. Neue Spezifikationen seitens OpenGL sollen folgen und dieses Problem mildern

12 3.4 Reductions An sich werden Reductions von der Hardware nicht unterstützt. Diese werden über eine Multipass-Methode realisiert. Das heißt die Reductions werden in mehren Durchläufen ausgeführt. Hierbei werden bei jedem Durchlauf max 8 benachbarte Elemente gelesen und reduziert. Im Folgenden ist ein Benchmark für die arithmetische Summe, realisiert über eine Reduction von 2^20 Float4-Elementen, zusehen: 2.4 bzw Millisek. mit NVIDIA bzw. ATI DirectX 4.1 bzw. 1.3 Millisek. mit NVIDIA bzw. ATI OpenGL 14.6 Millisek. Mit optimierter CPU-Implementierung Dabei ist anzumerken, dass die GPU öfters auf den Speicher zugreifen muss als die CPU. Theoretisch ist mit einem Register, welches Zwischenergebnisse speichert, nur ein Durchlauf möglich. Dabei würden theoretisch folgende Werte zustande kommen: 0.41 bzw Millisek. mit NVIDIA bzw. ATI DirectX

13 4 Evaluation 4.1 Testumgebung Im Folgenden werden Testergebnisse von BrookGPU aufgezeigt. Dabei erfolgt der Vergleich von OpenGL und DirectX. Außerdem existiert eine Referenzversion, bei der die Codierung für die GPU von Hand erfolgte. Getestet werden Grafikkarten von ATI und Nvidia. Zudem gibt es eine CPU-Implementierung. Hierbei wurde der Code für die CPU optimiert. Bei der Evaluation wurde eine ATI RadeonX800 XT Platinum mit der Treiberversion 4.4. und eine NVIDIA GeForce6800 mit der Treiberversion verwendet. Das Betriebssystem ist Windows XP und für die CPU-Implementierung findet ein 3 GHz Intel Pentium 4 Prozessor Verwendung. 4.2 Testprogramme Die Evaluation erfolgt mit mehreren Programmen. BLAS SAXPY / SGEM enthalten Subroutinen für lineare Algebra. SAXPY führt die Berechnung y = ax + y durch. Dabei sind y und x Vektoren und a ist ein Skalar. Mit SGEM wird ein Matrix-Vektor- Produkt gebildet und diese anschließend mit einem skalierten Vektor addiert. Die Berechnung sieht wie folgt aus: y = atx + by. Hierbei sind y und x Vektoren, T ist eine Matrix und a und b sind Skalare. Segment führt eine 2D-Segementierung, wie sie z.b. in der Medizin verwendet wird, durch. Hierbei findet der Region-growing Algorithmus Verwendung. Auch eine zweidimensionale FFT und ein GPU Ray-Tracer, der komplett auf der GPU realisiert wurde, werden getestet. Segment FFT GPU Ray-Tracer

14 4.3 Ergebnisse Bei diesem Diagramm wurde die CPU-Leistung relativ zu den restlichen Ergebnissen gesetzt. Durch die schwarze, gestrichelte Linie ist die Leistung der CPU- Implementierung gekennzeichnet. Anhand von SAXPY ist zu erkennen, dass eine einzelne Multiplikation und Addition ausreicht um die CPU bei weitem zu übertreffen. SGEMV wurde mit einer Multipass-Reduction realisiert. Daher geht der Geschwindigkeitsvorteil der GPU ein wenig zurück. OpenGL verliert hier wegen dem Pbuffer-Problem. Bei der FFT sieht man, dass BrookGPU sehr weit zur CPU-Implementierung herunterfällt - teilweise mit Nvidia sogar darunter. Für die CPU-Implementierung wurde hierbei der Speicherzugriff blockiert. Der Prozessor ist somit darauf angewiesen den Cache zu nutzen. Dies Bringt einen entschiedenen Vorteil mit sich. Bei der FFT und bei SGEMV ist sogar ein Geschwindigkeitsvorsprung von Brook gegenüber der Referenzversion zu vermerken. Im Allgemeinen kann man sagen das ATI schneller als NVIDIA aufgrund der Floating-Point-Texturbandbreite arbeitet

15 Wenn man die Ergebnisse von FFT und von SAXPY vergleicht, kann man erkennen wann die GPU ihre Leistung am meisten ausschöpfen kann: Werden Daten nicht häufig wieder verwendet so ist die GPU der CPU deutlich überlegen. Bei hoher Wiederverwendung der Daten, wie es bei der FFT der Fall ist, verliert die GPU deutlich. Dies ist auf die vorher beschriebenen Probleme (z.b. die Begrenzung der Hardware-Outputs) zu begründen. 4.4 Schlussfolgerungen StreamRead und streamwrite wurden bei der Evaluation vernachlässigt. Diese Operationen sind für die GPU notwendig um Daten vor und nach einer Kernel- Sequenz aus dem bzw. in den Speicher zu transferieren. Sie entfallen aber bei der CPU. Unter diesem Aspekt definiert sich der Geschwindigkeitsunterschied zwischen GPU und CPU neu. Um dies genauer darzustellen kann man folgende Formeln betrachten: Tgpu= n *(Tr+ Kgpu) Tcpu= n * Kcpu Dabei beschreibt Tgpu die gesamte Zeit um eine Sequenz von Berechnungen mit der GPU auszuführen. Tcpu hingegen die Zeit, die die CPU dafür braucht. n gibt die Anzahl der auszuführende Befehl an. Und mit Kgpu bzw. Kcpu wird die Zeit der Ausführung des Kernels angegeben. Zudem kommt nun bei der GPU noch Tr, die Transferzeit für streamread und streamwrite hinzu. Bringt man nun die Bedingung Tgpu > Tcpu mit ein und stellt beide Gleichungen nach Tr um, erhält man folgende Formel: (Kcpu Kgpu)> Tr Resultierend daraus kann man sagen, dass der Geschwindigkeitsunterschied zwischen GPU und CPU mindestens die Transferzeit decken muss, damit die GPU wirklich schneller als die CPU ist

16 Dieses Diagramm gibt an wie sich die Gesamtkosten für einen Kernelaufruf in Abhängigkeit zu den Operationen pro Kernel verhalten. Jeder Kernelaufruf verursacht auch konstante Kosten für die CPU. Die CPU muss den Kernelaufruf konfigurieren und einrichten. Bei dem Diagramm ist zu erkennen, dass die Gesamtkosten am Anfang ungefähr konstant bleiben. Daraus ist zu erkennen, dass die CPU-Kosten die Gesamtkosten bei Verwendung weniger Operationen dominieren. Die CPU könnte den Kernel gar nicht voll auslasten. Bei wenigen Operationen braucht der Kernel an sich viel weniger Zeit. Dies muss man bei der Wahl der Streamgröße bedenken. Die Streamgröße für einen Kernel muss also mindestens die CPU-Kosten decken

17 5 Ausblick Probleme bereiten unter anderem streamread und streamwrite in punkto Gesamtperformance. Als Lösung werden neue GPUs vorgeschlagen, bei denen StreamRead und StreamWrite asynchron zu Berechnungszeit ablaufen. Somit ergäbe sich: Kgpu = Max (Kgpu, Tr) Die Kernelkosten wären so nur noch das Maximum von Transferzeit und Kernelkosten der GPU. Eine andere Alternative stellt ein gemeinsamer Speicher für CPU und GPU dar. Auch die Kernel-Outputs, im Bezug zu den Hardware-Outputs, und die begrenzte Streamgröße stellen Probleme dar. Hierfür wird an einem Algorithmus gearbeitet, der die Kernelberechungen aufteilt um die gewünschten Outputs zu erzielen. Zusammenfassend kann man sagen das BrookGPU ein einfaches und effektives Tool für die GPU-Programmierung ist. Es ist Open-source und vereinfacht somit die Nutzung. Zukünftig soll die GPU nicht nur eine Renderingeinheit, sondern eine zusätzliche Berechnungseinheit für den Computer darstellen

18 Quellen Brook for GPUs: Stream Computing on Graphics Hardware Ian Buck, Tim Foley, Daniel Horn, Jeremy Sugerman, Kayvon Fatahalian, Mike Houston, and Pat Hanrahan To appear at SIGGRAPH Merrimac: Supercomputing with Streams William J. Dally, Patrick Hanrahan, Mattan Erez, Timothy J. Knight, François Labonté, Jung-Ho Ahn, Nuwan Jayasena, Ujval J. Kapasi, Abhishek Das, Jayanth Gummaraju, and Ian Buck in the Proceedings of the SC'03 Conference, November 2003, Phoenix, Arizona. Using Modern Graphics Architectures for General-Purpose Computing: A Framework and Analysis Chris J. Thompson, Sangyun Hahn, and Mark Oskin International Symposium on Microarchitecture (MICRO), Turkey, Nov Advanced Computer Organization - Stream Processor Architecture Vector Architectures Prof. Bill Dally, James Bonanno, Mattan Erez Eine Einführung in Cg (C for graphics) Andreas Holzer

OpenGL. (Open Graphic Library)

OpenGL. (Open Graphic Library) OpenGL (Open Graphic Library) Agenda Was ist OpenGL eigentlich? Geschichte Vor- und Nachteile Arbeitsweise glscene OpenGL per Hand Debugging Trend Was ist OpenGL eigentlich? OpenGL ist eine Spezifikation

Mehr

Grafikkarten-Architektur

Grafikkarten-Architektur > Grafikkarten-Architektur Parallele Strukturen in der GPU Name: Sebastian Albers E-Mail: s.albers@wwu.de 2 > Inhalt > CPU und GPU im Vergleich > Rendering-Pipeline > Shader > GPGPU > Nvidia Tesla-Architektur

Mehr

Ein kleiner Einblick in die Welt der Supercomputer. Christian Krohn 07.12.2010 1

Ein kleiner Einblick in die Welt der Supercomputer. Christian Krohn 07.12.2010 1 Ein kleiner Einblick in die Welt der Supercomputer Christian Krohn 07.12.2010 1 Vorschub: FLOPS Entwicklung der Supercomputer Funktionsweisen von Supercomputern Zukunftsvisionen 2 Ein Top10 Supercomputer

Mehr

CUDA. Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Jürgen Pröll 1

CUDA. Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Jürgen Pröll 1 CUDA Jürgen Pröll Multi-Core Architectures and Programming Jürgen Pröll 1 Image-Resize: sequentiell resize() mit bilinearer Interpolation leicht zu parallelisieren, da einzelne Punkte voneinander unabhängig

Mehr

Fachgebiet Programmiermethodik Prof. Dr. Claudia Leopold. Seminar Programmierung von Grafikkarten. GPGPU Basiskonzepte. von.

Fachgebiet Programmiermethodik Prof. Dr. Claudia Leopold. Seminar Programmierung von Grafikkarten. GPGPU Basiskonzepte. von. Fachgebiet Programmiermethodik Prof. Dr. Claudia Leopold Seminar Programmierung von Grafikkarten GPGPU Basiskonzepte von Marc Kirchhoff Inhaltsverzeichnis 1 Einleitung 2 2 Streams, Kernels und Prozessoren

Mehr

Jörn Loviscach Hochschule Bremen

Jörn Loviscach Hochschule Bremen Programmierbare Hardware-Shader Jörn Loviscach Hochschule Bremen Überblick Vertex- und Pixel-Shader Anwendungsbeispiele fx-dateien Anwendungsbeispiele Zusammenfassung Puffer Vertex- und Pixel-Shader Hardware-Renderpipeline

Mehr

Hochschule Bremen. Rechnerstrukturen Labor WS 04/05 I7I. Thema: Grafikkarten. Laborbericht. Datum 18.01.2005

Hochschule Bremen. Rechnerstrukturen Labor WS 04/05 I7I. Thema: Grafikkarten. Laborbericht. Datum 18.01.2005 Hochschule Bremen Rechnerstrukturen Labor I7I Thema: Grafikkarten Laborbericht Datum 18.01.2005 Carsten Eckert(83912) (72497) Fazit Für unseren Praxisteil zum Vortrag Grafikkarten haben wir uns entschieden,

Mehr

Informationsverarbeitung im Bauwesen

Informationsverarbeitung im Bauwesen 1/23 Informationsverarbeitung im Bauwesen Einführung in das Programmieren mit C++ Markus Uhlmann Institut für Hydromechanik Karlsruher Institut für Technologie www.ifh.kit.edu WS 2010/2011 Vorlesung 6

Mehr

Untersuchung und Vorstellung moderner Grafikchiparchitekturen

Untersuchung und Vorstellung moderner Grafikchiparchitekturen Fakultät Informatik, Institut für Technische Informatik, Professur für VLSI-Entwurfssysteme, Diagnostik und Architektur Untersuchung und Vorstellung moderner Grafikchiparchitekturen Hauptseminar Technische

Mehr

Grundlagen der Spieleprogrammierung

Grundlagen der Spieleprogrammierung Grundlagen der Spieleprogrammierung Teil I: 3D-Graphik Kapitel 9: Engines, Cg und anderes Peter Sturm Universität Trier Outline 1. Übersicht und Motivation 2. Mathematische Grundlagen 3. Das Ideal: Photorealistisch

Mehr

Eine Einführung in C-Funktionen

Eine Einführung in C-Funktionen Eine Einführung in C-Funktionen CGK-Proseminar 2014 Philip Gawehn 04.07.2014, Hamburg Inhaltsverzeichnis 1 Einleitung 2 2 Grundlagen 2 2.1 Der Aufbau einer Funktion....................... 2 2.2 Schlüsselwörter.............................

Mehr

Unterprogramme, Pointer und die Übergabe von Arrays

Unterprogramme, Pointer und die Übergabe von Arrays Unterprogramme, Pointer und die Übergabe von Arrays Unterprogramme Wie schon im Abschnitt über Funktionen erwähnt, versteht man unter einem Unterprogramm im engeren Sinn eine Prozedur, welche die Werte

Mehr

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2 Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 2 SS 2016

Mehr

Vorlesung Rechnerarchitektur. Einführung

Vorlesung Rechnerarchitektur. Einführung Vorlesung Rechnerarchitektur Einführung Themen der Vorlesung Die Vorlesung entwickelt an Hand von zwei Beispielen wichtige Prinzipien der Prozessorarchitektur und der Speicherarchitektur: MU0 Arm Speicher

Mehr

White Paper. Embedded Treiberframework. Einführung

White Paper. Embedded Treiberframework. Einführung Embedded Treiberframework Einführung White Paper Dieses White Paper beschreibt die Architektur einer Laufzeitumgebung für Gerätetreiber im embedded Umfeld. Dieses Treiberframework ist dabei auf jede embedded

Mehr

One of the few resources increasing faster than the speed of computer hardware is the amount of data to be processed. Bin Hu

One of the few resources increasing faster than the speed of computer hardware is the amount of data to be processed. Bin Hu Bin Hu Algorithmen und Datenstrukturen 2 Arbeitsbereich fr Algorithmen und Datenstrukturen Institut fr Computergraphik und Algorithmen Technische Universität Wien One of the few resources increasing faster

Mehr

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen. Ziele sind das Arbeiten mit Funktionen und dem Aufzählungstyp (enum), sowie - einfache Verzweigung (if else) - Alternativen switch case - einfache Schleifen (while oder do while) Aufgabe 3: Diese Aufgabe

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)

Mehr

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. michael.roth@h-da.de. Hochschule Darmstadt -Fachbereich Informatik-

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. michael.roth@h-da.de. Hochschule Darmstadt -Fachbereich Informatik- Informatik Studiengang Chemische Technologie Michael Roth michael.roth@h-da.de Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013 Inhalt Teil VII Einstieg in Java I Michael Roth (h_da) Informatik

Mehr

Eine Einführung in die Architektur moderner Graphikprozessoren

Eine Einführung in die Architektur moderner Graphikprozessoren Eine Einführung in die Architektur moderner Graphikprozessoren Seminarvortrag von Sven Schenk WS 2005/2006 Universität Mannheim, Lehrstuhl für Rechnerarchitektur Inhalt Historische Eckpunkte Einführung

Mehr

Zwischenvortrag zum Entwicklungsstand der Bachelor-Arbeit. Direct 3D-Output für ein Rendering Framework

Zwischenvortrag zum Entwicklungsstand der Bachelor-Arbeit. Direct 3D-Output für ein Rendering Framework Zwischenvortrag zum Entwicklungsstand der Bachelor-Arbeit Direct 3D-Output für ein Rendering Framework von Benjamin Betting unter der Betreuung von Daniel Schiffner 1 Gliederung Kapitel I und II: Motivation,Einführung,Grundlagen

Mehr

Institut fu r Informatik

Institut fu r Informatik Technische Universita t Mu nchen Institut fu r Informatik Lehrstuhl fu r Bioinformatik Einfu hrung in die Programmierung fu r Bioinformatiker Prof. B. Rost, L. Richter WS 2013 Aufgabenblatt 3 18. November

Mehr

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

Real-Time High-Dynamic Range Texture Mapping

Real-Time High-Dynamic Range Texture Mapping Real-Time High-Dynamic Range Texture Mapping Jonathen Cohen, Chris Tchou, Tim Hawkins and Paul Debevec Präsentiert von Daniel Wickeroth Einführung Worum geht s? Darstellung realistischer Szenen Innen -

Mehr

Sicherheit in Android

Sicherheit in Android Motivation Aufbau Sicherheit Ausblick Quellen Sicherheit in Android Peter Salchow INF-M2 - Anwendungen 1 Sommersemester 2008 Department Informatik HAW Hamburg 20. Mai 2008 Peter Salchow Sicherheit in Android

Mehr

OpenCL. Seminar Programmiersprachen im Multicore-Zeitalter Universität Siegen Tim Wiersdörfer tim.wiersdoerfer@student.uni-siegen.

OpenCL. Seminar Programmiersprachen im Multicore-Zeitalter Universität Siegen Tim Wiersdörfer tim.wiersdoerfer@student.uni-siegen. OpenCL Seminar Programmiersprachen im Multicore-Zeitalter Universität Siegen Tim Wiersdörfer tim.wiersdoerfer@student.uni-siegen.de Abstract: In diesem Dokument wird ein grundlegender Einblick in das relativ

Mehr

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper Python Programmierung Kontaktdaten Homepage: http://wwwlehre.dhbw-stuttgart.de/~schepper/ Email: Volker. Schepper [A@T] yahoo.de Vorlesung Skriptsprachen Vorlesung: 06.03.2013 13.03.2013 20.03.2013 27.03.2013

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

GPGPU mit NVIDIA CUDA

GPGPU mit NVIDIA CUDA 01.07.12 GPGPU mit NVIDIA CUDA General-Purpose on Formatvorlagecomputing des Graphics Processing durch Units Untertitelmasters mit KlickenCompute bearbeiten NVIDIA Unified Device Architecture Gliederung

Mehr

Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP

Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Dipl. Inf. Thorsten Blaß Programming Systems Group Martensstraße 3 91058 Erlangen Ausblick Motivation Einführung Java/OpenMP (JaMP) JaMP Sprache

Mehr

OpenGL vs. Direct3D Ein 3D-API Vergleich

OpenGL vs. Direct3D Ein 3D-API Vergleich OpenGL vs. Direct3D Ein 3D-API Vergleich 3D-APIs (Application Programming Interface)sind Software-Schnittstellen, um über einen Standard auf die Hardware des Rechners zugreifen zu koennen. Direct3D von

Mehr

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

Mehr

4D Server v12 64-bit Version BETA VERSION

4D Server v12 64-bit Version BETA VERSION 4D Server v12 64-bit Version BETA VERSION 4D Server v12 unterstützt jetzt das Windows 64-bit Betriebssystem. Hauptvorteil der 64-bit Technologie ist die rundum verbesserte Performance der Anwendungen und

Mehr

Stream Processing und High-Level GPGPU Sprachen

Stream Processing und High-Level GPGPU Sprachen Seminar: Programmierung von Grafikkarten Stream Processing und High-Level GPGPU Sprachen Jens Breitbart brietbar@student.uni-kassel.de Abstract Die Leistung aktueller Prozessoren erhöht sich sehr viel

Mehr

Grundlagen der Rechnerarchitektur

Grundlagen der Rechnerarchitektur Grundlagen der Rechnerarchitektur ARM, x86 und ISA Prinzipien Übersicht Rudimente des ARM Assemblers Rudimente des Intel Assemblers ISA Prinzipien Grundlagen der Rechnerarchitektur Assembler 2 Rudimente

Mehr

1. Übung zu "Numerik partieller Differentialgleichungen"

1. Übung zu Numerik partieller Differentialgleichungen 1. Übung zu "Numerik partieller Differentialgleichungen" Simon Gawlok, Eva Treiber Engineering Mathematics and Computing Lab 22. Oktober 2014 1 / 15 1 Organisatorisches 2 3 4 2 / 15 Organisatorisches Ort:

Mehr

Grundlagen der Programmierung

Grundlagen der Programmierung Grundlagen der Programmierung Dr. Tom Kamphans 1. Vorlesung 12.10.2016 1 Organisatorisches Vorlesung: Mittwochs 14:00 15:30, Raum F 201 Übung: Mittwochs 15:45 19:00, Raum F 225 Übung: alle zwei Wochen

Mehr

Tag 9: Datenstrukturen

Tag 9: Datenstrukturen Tag 9: Datenstrukturen A) Datenstrukturen B) Cell Arrays C) Anwendungsbeispiel: Stimulation in einem psychophysikalischen Experiment A) Datenstrukturen Wenn man komplizierte Datenmengen verwalten möchte,

Mehr

Implementierung und Evaluierung von Video Feature Tracking auf moderner Grafik Hardware

Implementierung und Evaluierung von Video Feature Tracking auf moderner Grafik Hardware Implementierung und Evaluierung von Video Feature Tracking auf moderner Diplomarbeit vorgelegt von Sebastian Heymann Betreut von Prof. Dr. Bernd Fröhlich Bauhaus Universität t Dr. Aljoscha Smolic Fraunhofer

Mehr

Die Programmiersprache C Eine Einführung

Die Programmiersprache C Eine Einführung Die Programmiersprache C Eine Einführung Christian Gentsch Fakutltät IV Technische Universität Berlin Projektlabor 2. Mai 2014 Inhaltsverzeichnis 1 Einführung Entstehungsgeschichte Verwendung 2 Objektorientiert

Mehr

OpenMP am Beispiel der Matrizenmultiplikation

OpenMP am Beispiel der Matrizenmultiplikation OpenMP am Beispiel der Matrizenmultiplikation David J. Meder, Dr. Victor Pankratius IPD Tichy Lehrstuhl für Programmiersysteme KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe

Mehr

20 Jahre. acadgraph CADstudio GmbH Fritz-Hommel-Weg 4 80805 München Seite 1 von 11

20 Jahre. acadgraph CADstudio GmbH Fritz-Hommel-Weg 4 80805 München Seite 1 von 11 Seite 1 von 11 Inhaltsverzeichnis 1 - Features & Benefits... 3 1.1 Schnell und einfach Eye Checker erstellen... 3 1.2 Einfach zu erlernen... 3 1.3 Voll CAD-Kompatibel... 3 2 - Arbeitsweise... 3 2.1 Userinterface...

Mehr

Game Engine Architecture and Development. Platform Unabhängiger Code Multi Threading in Game Engines Profiling

Game Engine Architecture and Development. Platform Unabhängiger Code Multi Threading in Game Engines Profiling Game Engine Architecture and Development Platform Unabhängiger Code Multi Threading in Game Engines Profiling Folien Die Folien werden auf acagamics.de hochgeladen Das Passwort ist 60fps (ohne ) Rückblick:

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

Programmierbeispiele und Implementierung. Name: Michel Steuwer E-Mail: michel.steuwer@wwu.de

Programmierbeispiele und Implementierung. Name: Michel Steuwer E-Mail: michel.steuwer@wwu.de > Programmierbeispiele und Implementierung Name: Michel Steuwer E-Mail: michel.steuwer@wwu.de 2 > Übersicht > Matrix Vektor Multiplikation > Mandelbrotmenge / Apfelmännchen berechnen > Kantendetektion

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

Produktunterlagen (2015-11-06) Produkttyp: pcon.planner Technische Hinweise

Produktunterlagen (2015-11-06) Produkttyp: pcon.planner Technische Hinweise Produktunterlagen (2015-11-06) Produkttyp: pcon.planner Technische Hinweise Inhalt 1 Technische Hinweise... 2 1.1 Überprüfen der Systemvoraussetzungen... 2 1.2 Art der Grafikkarte... 2 1.3 Aktuelle Grafikkarten-Treiber...

Mehr

Access 2010 Programmierung Import und Export nach Excel

Access 2010 Programmierung Import und Export nach Excel Access 2010 Programmierung Import und Export nach Excel Excel... ist das Tabellenkalkulationsprogramm von Microsoft Office. wird genutzt, um numerische Daten in Tabellenform zu erfassen. kann Daten automatisch

Mehr

3 Kurzeinführung in Matlab

3 Kurzeinführung in Matlab 3 Kurzeinführung in Matlab Matlab ist ein sehr leistungsfähiges interaktives Programmpaket für numerische Berechnungen. Nutzen Sie dies parallel zu den Vorlesungen. Sie können damit persönlich erfahren,

Mehr

Die Mikroprogrammebene eines Rechners

Die Mikroprogrammebene eines Rechners Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten, z.b. Befehl holen Befehl dekodieren Operanden holen etc.

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

Großübung zu Einführung in die Programmierung

Großübung zu Einführung in die Programmierung Großübung zu Einführung in die Programmierung Daniel Bimschas, M.Sc. Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/bimschas Inhalt 1. Besprechung Übung 4 Iteration

Mehr

Grundlagen der Programmiersprache C++

Grundlagen der Programmiersprache C++ / TU Braunschweig Grundlagen der Programmiersprache C++ Um den Studierenden den Einstieg in die FE-Programmierung zu erleichtern werden die wesentlichen Elemente eines C-Programmes beschrieben, soweit

Mehr

Virtueller Speicher. SS 2012 Grundlagen der Rechnerarchitektur Speicher 44

Virtueller Speicher. SS 2012 Grundlagen der Rechnerarchitektur Speicher 44 Virtueller Speicher SS 2012 Grundlagen der Rechnerarchitektur Speicher 44 Die Idee Virtuelle Adressen Prozess 1 Speicherblock 0 Speicherblock 1 Speicherblock 2 Speicherblock 3 Speicherblock 4 Speicherblock

Mehr

Differenzengleichungen. und Polynome

Differenzengleichungen. und Polynome Lineare Differenzengleichungen und Polynome Franz Pauer Institut für Mathematik, Universität Innsbruck Technikerstr. 13/7, A-600 Innsbruck, Österreich franz.pauer@uibk.ac.at 1 Einleitung Mit linearen Differenzengleichungen

Mehr

Komplexität von Algorithmen

Komplexität von Algorithmen Komplexität von Algorithmen Prof. Dr. Christian Böhm WS 07/08 in Zusammenarbeit mit Gefei Zhang http://www.dbs.informatik.uni-muenchen.de/lehre/nfinfosw Ressourcenbedarf - Größenordnungen Prozesse verbrauchen

Mehr

Instruktionssatz-Architektur

Instruktionssatz-Architektur Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2005/2006 Übersicht 1 Einleitung 2 Bestandteile der ISA 3 CISC / RISC Übersicht 1 Einleitung 2 Bestandteile

Mehr

& sind die Vektorkomponenten von und sind die Vektorkoordinaten von. A x. a) Der Betrag eines Vektors

& sind die Vektorkomponenten von und sind die Vektorkoordinaten von. A x. a) Der Betrag eines Vektors Einführu hnung Was ist ein Vektor? In Bereichen der Naturwissenschaften treten Größen auf, die nicht nur durch eine Zahlenangabe dargestellt werden können, wie Kraft oder Geschwindigkeit. Zur vollständigen

Mehr

Kurzanleitung zu XML2DB

Kurzanleitung zu XML2DB Kurzanleitung zu XML2DB Inhaltsverzeichnis 1. Einleitung...3 2. Entwicklungsumgebung...3 3. Betriebsanleitung...3 3.1 Einrichten der Java Umgebung...3 3.2 Allgemeines zu java und javac...4 3.2.1 Allgemeines

Mehr

Smartphone Entwicklung mit Android und Java

Smartphone Entwicklung mit Android und Java Smartphone Entwicklung mit Android und Java predic8 GmbH Moltkestr. 40 53173 Bonn Tel: (0228)5552576-0 www.predic8.de info@predic8.de Was ist Android Offene Plattform für mobile Geräte Software Kompletter

Mehr

App-Entwicklung für Android

App-Entwicklung für Android App-Entwicklung für Android Einleitung - Systemarchitektur Hochschule Darmstadt WS15/16 1 Inhalt Historie Systemarchitektur Sandbox 2 Motivation Kontra Pro Limitierte Größe Begrenzte Ressourcen Kein Standardgerät

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Unterlagen zur Veranstaltung Einführung in die Objektorientierte Programmierung Mit Processing Alexis Engelke Sommer 2012 Alexis Engelke Inhalt Level 1: Geometrie Hintergrundfarben Punkte, Linien und deren

Mehr

Erste Schritte. Das Arduino-Board. Ihr Fundino-Board. Programmieren für Ingenieure Sommer 2015. Andreas Zeller, Universität des Saarlandes

Erste Schritte. Das Arduino-Board. Ihr Fundino-Board. Programmieren für Ingenieure Sommer 2015. Andreas Zeller, Universität des Saarlandes Erste Schritte Programmieren für Ingenieure Sommer 2015 Andreas Zeller, Universität des Saarlandes Das Arduino-Board Ihr Fundino-Board Anschluss über USB Anschluss über USB Programmierumgebung Download

Mehr

Leistungs- und Geschwindigkeitssteigerung. Dipl.-Ing. Sebastian F. Kleinau Applikationsingenieur

Leistungs- und Geschwindigkeitssteigerung. Dipl.-Ing. Sebastian F. Kleinau Applikationsingenieur Leistungs- und Geschwindigkeitssteigerung von LabVIEW-Projekten Dipl.-Ing. Sebastian F. Kleinau Applikationsingenieur Agenda 1. Einführung 2. Hilfreiche Werkzeuge zur Codeanalyse 3. Benchmarks für LabVIEW-VIs

Mehr

Ausarbeitung des Interpreter Referats

Ausarbeitung des Interpreter Referats Ausarbeitung des Interpreter Referats Gliederung 1. Programmiersprache 1.2. Syntax 1.2.1. Konkrete Syntax 1.2.2. Abstrakter Syntax Baum (Abstrakte Syntax) 2. Parser 2.1. Syntaktische Struktur einer Sprache

Mehr

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i

Mehr

Interpreter - Gliederung

Interpreter - Gliederung Institut für Informatik Ludwig-Maximilian Universität Interpreter - Gliederung Programmiersprache Syntax Konkrete Syntax Abstrakter Syntax Baum (Abstrakte Syntax) Parser Syntaktische Struktur einer Sprache

Mehr

2. Braunschweiger Linux-Tage. Vortrag über RAID. von. Thomas King. http://www.t-king.de/linux/raid1.html. 2. Braunschweiger Linux-Tage Seite 1/16

2. Braunschweiger Linux-Tage. Vortrag über RAID. von. Thomas King. http://www.t-king.de/linux/raid1.html. 2. Braunschweiger Linux-Tage Seite 1/16 2. Braunschweiger Linux-Tage Vortrag über RAID von Thomas King http://www.t-king.de/linux/raid1.html 2. Braunschweiger Linux-Tage Seite 1/16 Übersicht: 1. Was ist RAID? 1.1. Wo wurde RAID entwickelt? 1.2.

Mehr

Shangrila. One Instruction Set Computer

Shangrila. One Instruction Set Computer Shangrila One Instruction Set Computer Outline One Instruction Set Computer Die Idee Funktion Die Machine Shangrila VM Interfaces Tools Implementation Status & Zukunft OISC >> Die Idee CPU mit nur einer

Mehr

Systemvoraussetzungen für Autodesk Revit 2015 - Produkte (gemäß Angaben von Autodesk)

Systemvoraussetzungen für Autodesk Revit 2015 - Produkte (gemäß Angaben von Autodesk) Systemvoraussetzungen für Autodesk Revit 2015 - Produkte (gemäß Angaben von Autodesk) Mindestanforderung: Einstiegskonfiguration Betriebssystem ¹ Windows 8.1 Enterprise, Pro oder Windows 8.1 CPU-Typ Single-

Mehr

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl PROGRAMMIEREN MIT C Allgemeine hinweise Alles was hier beschrieben wird, soll auch ausprobiert werden. Warum C? Weil die coolen Dinge mit C am einfachsten gehen. Das werden wir in den folgenden Übungen

Mehr

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch}; Aufgabe 1: (15 Punkte) Bei den Multiple-Choice-Fragen ist jeweils nur eine richtige Antwort eindeutig anzukreuzen. Auf die richtige Antwort gibt es die angegebene Punktzahl. Wollen Sie eine Multiple-Choice-Antwort

Mehr

Grundlagen der Informatik I (Studiengang Medieninformatik)

Grundlagen der Informatik I (Studiengang Medieninformatik) Grundlagen der Informatik I (Studiengang Medieninformatik) Thema: 3. Datentypen, Datenstrukturen und imperative Programme Prof. Dr. S. Kühn Fachbereich Informatik/Mathematik Email: skuehn@informatik.htw-dresden.de

Mehr

Tutorium Java Ein Überblick. Helge Janicke

Tutorium Java Ein Überblick. Helge Janicke Tutorium Java Ein Überblick Helge Janicke 26. Oktober 2000 1 VORRAUSSETZUNGEN ZUM PROGRAMMIEREN MIT JAVA. 1 1 Vorraussetzungen zum Programmieren mit Java. Was braucht man, wenn man mit Java programmieren

Mehr

Running R. Windows Aus Menü. Lese R Code ein führt den Code auch gleich aus, eventuell muss vorher das Verzeichnis gewechselt werden.

Running R. Windows Aus Menü. Lese R Code ein führt den Code auch gleich aus, eventuell muss vorher das Verzeichnis gewechselt werden. Einführung 1 / 1 Einführung 2/1 Running R Windows Aus Menü Linux Lese R Code ein führt den Code auch gleich aus, eventuell muss vorher das Verzeichnis gewechselt werden. Auf der Konsole/Eingabeaufforderung:

Mehr

Am Dienstag, den 16. Dezember, ist Eulenfest. 1/48

Am Dienstag, den 16. Dezember, ist Eulenfest. 1/48 Am Dienstag, den 16. Dezember, ist Eulenfest. 1/48 Grundbegriffe der Informatik Einheit 12: Erste Algorithmen in Graphen Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009

Mehr

Benchmarking Intel Pentium III-S vs. Intel Pentium 4

Benchmarking Intel Pentium III-S vs. Intel Pentium 4 Benchmarking Intel Pentium III-S vs. Intel Pentium 4 André Ceselski Raphael Rosendahl 30.01.2007 Gliederung Motivation Vorstellung der Architekturen Intel P6 Architektur Intel NetBurst TM Architektur Architektur-Unterschiede

Mehr

Protected User-Level DMA in SCI Shared Memory Umgebungen

Protected User-Level DMA in SCI Shared Memory Umgebungen Protected User-Level DMA in SCI Shared Memory Umgebungen Mario Trams University of Technology Chemnitz, Chair of Computer Architecture 6. Halle Chemnitz Seminar zu Parallelverarbeitung und Programmiersprachen

Mehr

Raytracing auf Desktop PCs Optimizing Cache Usage (Intel Corp.)

Raytracing auf Desktop PCs Optimizing Cache Usage (Intel Corp.) Raytracing auf Desktop PCs Optimizing Cache Usage (Intel Corp.) von Martin Stöcker Motivation Geschwindigkeit der Prozessoren verdoppelt sich alle 18 Monate (Moore s Law) Geschwindigkeit des Speichers

Mehr

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015 Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 4, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8 Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

Programmierung für Mathematik (HS13)

Programmierung für Mathematik (HS13) software evolution & architecture lab Programmierung für Mathematik (HS13) Übung 5 1 Aufgabe: Eclipse IDE 1.1 Lernziele 1. Die Entwicklungsumgebung Eclipse einrichten. 2. Eclipse kennen lernen und mit

Mehr

OpenCL Implementierung von OpenCV Funktionen

OpenCL Implementierung von OpenCV Funktionen Multi-Core Architectures and Programming OpenCL Implementierung von OpenCV Funktionen julian.mueller@e-technik.stud.uni-erlangen.de Hardware/Software Co-Design August 18, 2011 1 Table of content 1 OpenCL

Mehr

Sicheres C Programmieren in Embedded Systemen ARM II (ARM7TMDI [1] ) Wintersemester 2010-2011

Sicheres C Programmieren in Embedded Systemen ARM II (ARM7TMDI [1] ) Wintersemester 2010-2011 Sicheres C in Embedded Systemen ARM II (ARM7TMDI [1] ) Wintersemester 2010-2011 Dipl. Ing. (FH) Ebrecht Roland, Infineon Technologies AG M.Eng (Electronic Systems) Güller Markus, Infineon Technologies

Mehr

World of Warcraft. Mindestvoraussetzungen

World of Warcraft. Mindestvoraussetzungen World of Warcraft Betriebssystem Windows XP / Windows Vista / Windows 7 Windows 7 / Windows 8 64-bit mit Windows 8 mit aktuellstem Servicepack aktuellstem Servicepack Prozessor Intel Core 2 Duo E6600 oder

Mehr

UI-Testing mit Microsoft Test Manager (MTM) Philip Gossweiler / 2013-04-18

UI-Testing mit Microsoft Test Manager (MTM) Philip Gossweiler / 2013-04-18 UI-Testing mit Microsoft Test Manager (MTM) Philip Gossweiler / 2013-04-18 Software Testing Automatisiert Manuell 100% 70% 1 Überwiegender Teil der Testing Tools fokusiert auf automatisiertes Testen Microsoft

Mehr

Inhalt. Prozessoren. Curriculum Manfred Wilfling. 28. November HTBLA Kaindorf. M. Wilfling (HTBLA Kaindorf) CPUs 28. November / 9

Inhalt. Prozessoren. Curriculum Manfred Wilfling. 28. November HTBLA Kaindorf. M. Wilfling (HTBLA Kaindorf) CPUs 28. November / 9 Inhalt Curriculum 1.4.2 Manfred Wilfling HTBLA Kaindorf 28. November 2011 M. Wilfling (HTBLA Kaindorf) CPUs 28. November 2011 1 / 9 Begriffe CPU Zentraleinheit (Central Processing Unit) bestehend aus Rechenwerk,

Mehr

XEN Performance. Projektpraktikum Informatik. Arne Klein 2008-02-26. Arne Klein () XEN Performance 2008-02-26 1 / 25

XEN Performance. Projektpraktikum Informatik. Arne Klein 2008-02-26. Arne Klein () XEN Performance 2008-02-26 1 / 25 XEN Performance Projektpraktikum Informatik Arne Klein 2008-02-26 Arne Klein () XEN Performance 2008-02-26 1 / 25 1 Virtualisierung mit XEN 2 Performance von XEN Allgemeines Netzwerk-Performance IO-Performance

Mehr

CUDA. Axel Jena, Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Axel Jena, Jürgen Pröll 1

CUDA. Axel Jena, Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Axel Jena, Jürgen Pröll 1 CUDA Axel Jena, Jürgen Pröll Multi-Core Architectures and Programming Axel Jena, Jürgen Pröll 1 Warum Tesla? Traditionelle Graphikkarten Getrennte Prozessoren für Vertex- / Pixelberechnungen - Nachteil:

Mehr

Intel Cluster Studio. Michael Burger FG Scientific Computing TU Darmstadt michael.burger@sc.tu-darmstadt.de

Intel Cluster Studio. Michael Burger FG Scientific Computing TU Darmstadt michael.burger@sc.tu-darmstadt.de Intel Cluster Studio Michael Burger FG Scientific Computing TU Darmstadt michael.burger@sc.tu-darmstadt.de 19.03.13 FB Computer Science Scientific Computing Michael Burger 1 / 30 Agenda Was ist das Intel

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {

Mehr

Abacus Formula Compiler (AFC)

Abacus Formula Compiler (AFC) Abacus Formula Compiler (AFC) Alle kennen Excel - jetzt sogar Ihre Java- Applikation! Bringt Tabellenkalkulationen auf die JVM http://formulacompiler.org/ Peter Arrenbrecht für Abacus Research AG http://abacus.ch/

Mehr

Felder, Rückblick Mehrdimensionale Felder. Programmieren in C

Felder, Rückblick Mehrdimensionale Felder. Programmieren in C Übersicht Felder, Rückblick Mehrdimensionale Felder Rückblick Vereinbarung von Feldern: typ name [anzahl]; typ name = {e1, e2, e3,..., en} Die Adressierung von Feldelementen beginnt bei 0 Die korrekte

Mehr

Symbolische Programmierung. Gerd Stolpmann. Informatikbüro Dipl. Inform. Gerd Stolpmann

Symbolische Programmierung. Gerd Stolpmann. Informatikbüro Dipl. Inform. Gerd Stolpmann 1.3.2006 Informatikbüro Dipl. Inform. Gerd Stolpmann Symbolische Programmierung Gerd Stolpmann 1 Übersicht Symbolische Datenverarbeitung: Was ist das? Symbolische Programmierung ist das Anwendungsgebiet

Mehr

Seminar GPU-Programmierung/Parallelverarbeitung

Seminar GPU-Programmierung/Parallelverarbeitung Seite iv Literaturverzeichnis 1) Bengel, G.; et al.: Masterkurs Parallele und Verteilte Systeme. Vieweg + Teubner, Wiesbaden, 2008. 2) Breshears, C.: The Art of Concurrency - A Thread Monkey's Guide to

Mehr

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik Informatik I WS 2012/13 Tutorium zur Vorlesung 1. Alexander Zietlow zietlow@informatik.uni-tuebingen.de Wilhelm-Schickard-Institut für Informatik Eberhard Karls Universität Tübingen 11.02.2013 1. 2. 1.

Mehr

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt

Mehr