Brook for GPUs: Stream Computing on Graphics Hardware
|
|
- Renate Heinrich
- vor 7 Jahren
- Abrufe
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) Agenda Was ist OpenGL eigentlich? Geschichte Vor- und Nachteile Arbeitsweise glscene OpenGL per Hand Debugging Trend Was ist OpenGL eigentlich? OpenGL ist eine Spezifikation
MehrGrafikkarten-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
MehrEin 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
MehrCUDA. 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
MehrFachgebiet 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
MehrJö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
MehrHochschule 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,
MehrInformationsverarbeitung 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
MehrUntersuchung 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
MehrGrundlagen 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
MehrEine 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.............................
MehrUnterprogramme, 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
MehrModul 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
MehrVorlesung 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
MehrWhite 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
MehrOne 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
MehrEs 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
MehrProbeklausur: 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,
Mehr2. 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)
Mehrzu 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
MehrInformatik. 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
MehrEine 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
MehrZwischenvortrag 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
MehrInstitut 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
Mehrzu 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
MehrReal-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 -
MehrSicherheit 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
MehrOpenCL. 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
MehrPython 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
MehrDeklarationen 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.
MehrGPGPU 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
MehrTransparente 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
MehrOpenGL 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
MehrProgrammierung 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
Mehr4D 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
MehrStream 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
MehrGrundlagen 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
Mehr1. Ü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:
MehrGrundlagen 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
MehrTag 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,
MehrImplementierung 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
MehrDie 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
MehrOpenMP 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
Mehr20 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...
MehrGame 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:
MehrAutor: 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
MehrProgrammierbeispiele 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
MehrRepetitorium 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
MehrProduktunterlagen (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...
MehrAccess 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
Mehr3 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,
MehrDie 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.
MehrEine 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,
MehrGroßü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
MehrGrundlagen 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
MehrVirtueller 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
MehrDifferenzengleichungen. 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
MehrKomplexitä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
MehrInstruktionssatz-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
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
MehrKurzanleitung 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
MehrSmartphone 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
MehrApp-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
MehrObjektorientierte 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
MehrErste 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
MehrLeistungs- 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
MehrAusarbeitung 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
MehrProgrammiersprachen 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
MehrInterpreter - 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
Mehr2. 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.
MehrShangrila. 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
MehrSystemvoraussetzungen 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-
MehrPROGRAMMIEREN 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
Mehrb) 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
MehrGrundlagen 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
MehrTutorium 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
MehrRunning 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:
MehrAm 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
MehrBenchmarking 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
MehrProtected 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
MehrRaytracing 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
MehrEinfü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)
MehrJava 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
MehrProgrammierung 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
MehrOpenCL 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
MehrSicheres 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
MehrWorld 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
MehrUI-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
MehrInhalt. 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,
MehrXEN 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
MehrCUDA. 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:
MehrIntel 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
MehrModellierung 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; {
MehrAbacus 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/
MehrFelder, 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
MehrSymbolische 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
MehrSeminar 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
MehrGliederung. 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.
MehrPass 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