FANDOM


Hi! ;)

9.5 – Gliederung + Abstract (Zusammenfassung unserem Vortrag)

Malwoche 2015 – Begin der Presaentation der Referate (30.05)

Die Dauer des Vortragees ca.25 Min betragen.

Einfuehrung in die CUDA Architektur und CUDA, Programmierung (prak.Beispiele)

_______________________________________________________________________________

Einleitung Bearbeiten

Bei Grafikprozessoren (GPUs) handelte es sich ursprünglich um Prozessoren, die speziell auf die

Bedürfnisse von Computergrafik zugeschnitten waren und dadurch den Hauptprozessor (CPU) des

Computers entlasten sollten. Heutzutage ermöglichen GPUs dank ihrer hochgradig parallelen

Many-Core-Architektur allerdings auch die Ausführung von Berechnungen aus wissenschaftlich-

technischen Bereichen (GPGPU) und erobern so neue Anwendungsfelder, beispielsweise im High

Performance Computing.

Zur generellen Nutzung wurden viele Sprachen und Schnittstellen entwickelt:

  • OpenCL (Open Computing Language),
  • DirectCompute (von Microsoft)
  • CUDA (Compute Unified Device Architecture, von Nvidia).

Wir beschäftigen uns im Rahmen dieses Vortrag mit CUDA, da es recht populär ist und bei uns auch zur Verfügung steht.

CUDA Bearbeiten

CUDA


 


Definition:Bearbeiten

CUDA (Einst Compute Unified Device Architecture genannt[1]) ist eine “NVIDIA Architektur für parallele Berechnungen, die die Rechenleistung des Systems durch Nutzung der Leistung des Grafikprozessors erheblich steigern kann.“[2]



Die GeschichteBearbeiten


Die Geschichte vor CUDA:Bearbeiten

CUDA würde wahrscheinlich nicht existieren, wenn Hersteller von Prozessoren nicht den Weg hin zum Multi-Core-Rechner gegangen wären. Als 2005[3] die ersten Multicoreprozessoren auch den Markt der Endverbraucher erreichten (nicht der 2001 Multicore von IBM[4]) mussten auch die kommen Programme diese parallel laufenden Recheneinheiten unterstützen.


Auf der Seite der GPU hatte NVIDIA mit der GeForce 3 Serie den Durchbruch geschafft, dass durch die Implementierung der DirectX 8.0 Schnittstelle den Entwicklern mehr Präzision für ihre eigene Programmierung möglich war.[5] Doch immer noch waren diese GPU´s (was an sich ja nichts Schlechtes ist) nur für grafische Angelegenheiten da.
Die Idee, dass man die arithmetischen Einheiten (pixel Shaders) dafür nutzen würde, nicht nur Farben oder passende grafische Informationen über diese Einheiten zu verarbeiten war der erste Schritt zu CUDA. Doch selbst mit der Umsetzung dieser Idee wäre es mit den GPU`s der frühen 2000der immer noch eine komplizierte Angelegenheit normale CPU-Operationen mit der GPU zu vollführen.


Wer mehr mit der GPU arbeiten wollte, musste sich mit den schon erwähnten Programmiersprache DirectX oder z.B. OpenGL beschäftigten. Zusätzlich dazu war man auf die Ressourcenfreigabe und den Funktionsumfang dieser Sprachen beschränkt.



Die Revolution durch CUDA :Bearbeiten

Mit der GeForce 8800 GTX hat NVIDIA zum ersten Mal die CUDA Architektur eingeführt. Gegenüber den vorherigen beinhaltet diese nun eine „unified shader Pipeline“, die es erlaubt die ALU´s des Chips so zu arrangieren, dass man durchschnittliche Rechenoperationen mit ihnen durchführen kann.
Dabei hat man auch darauf gezielt die Voraussetzung für diese Operationen (Gleitkommazahlenberechnungen) einzuhalten, wie sie vom IEEE vorgegeben sind.





 


By Tosaka - Own work, CC BY 3.0, https://commons.wikimedia.org/w/index.php?curid=5140417


 


Weitere Vorteile sind die beliebige Adressierung, die “shared Memory“ – Funktion für verschiedene Threads


(Früher hat man nur Vertex und Pixel-Shader, jetzt gibt es Streamprozessoren in Clustern)[6]



Doch damit war die Arbeit noch nicht ganz getan, denn das Problem der einseitigen Bearbeitung durch DirectX und OpenGL war immer noch gegeben. Also reichte NVIDIA einen C – Compiler und die entsprechenden C – Extension namens CUDA C nach, sodass nun der Großteil der Entwickler auch auf die Potenz der GPU zurückgreifen konnten. [7]


                                                                                                    


Wofür wird CUDA genutzt?[8][9]


-          In der Medizin, wie das Programm AMBER, ein Molekulardynamik-Simulationsprogramm. (Genutzt von Universitäten und Pharmaunternehmen zur Beschleunigung der Medikamentenentwicklung)


-          Finanzmarkt : Numerix und CompatibL,


-          Design von Rotoren mit Hilfe von Strömungssimulationen,


-          CT-Bildrekonstruktionen (Computertomographie wird benutzt um mehrere Schichten des Körperinneren anzufertigen, sodass man darauf dann ein Modell mit dem Verlauf von Knochen und oder Blutgefäßen hat.)[10]


-          Umweltwissenschaft: Seismische Analysen


-          Raytracing (Ein Algorithmus mit dem man für die Darstellung von Computergrafik die Sichtbarkeit von Objekten berechnet. Dazu gehört dann bei erweiterten Verfahren auch, wie das Licht auf andere Objekte fällt, Schattenberechnung, Lichtbrechung, Beleuchtung)[11]


-          Videobearbeitung: Adobe Suites


-          SETI@Home (Suche nach außerirdischen Signalen)


-          folding@home (Faltung von Proteinen)


-          uvm.





[1] Wikipedia https://de.wikipedia.org/wiki/CUDA (Zugriff 25.04.2016)

[2] NVIDIA.de http://www.nvidia.de/object/cuda-parallel-computing-de.html (Zugriff 25.04.2016)

[3] Sanders, Jason, Edward, Kandrot, CUDA By Example, An Introduction to General-Purpose GPU Programming, 2.Aufl. 2011, Boston: Addision Wesley, Pearson Education S. 2f

[4] http://www-03.ibm.com/ibm/history/ibm100/us/en/icons/power4/ (Zugriff 25.04.2016)

[5] Sanders, Jason S. 5

[6] Wikipedia https://de.wikipedia.org/wiki/Nvidia-Geforce-8-Serie (Zugriff 24.05.2016)

[7] Laut Wikipedia existieren auch Wrapper für die Programmiersprachen Perl, Pyhton, Ruby, Java und Fortran (Wikipedia https://de.wikipedia.org/wiki/CUDA Zugriff 25.04.2016)

[8] NVIDIA.de http://www.nvidia.de/object/cuda-parallel-computing-de.html (Zugriff 25.04.2016)

[9] Sanders, Jason S.8ff

[10] Radiologie Muldental http://www.radiologie-muldental.de/computertomographie_ct.html (Zugriff 25.04.2016)

[11] Wikipedia https://de.wikipedia.org/wiki/Raytracing (Zugriff 25.05.2016)


Aufbau Bearbeiten

Technische Details Bearbeiten

Programmieren Bearbeiten

Bearbeiten

Hello World Bearbeiten

#include <stdio.h>

__ g l o b a l __

void kernel() {

printf("Hier ist Thread (%d , %d ) , (%d , %d ) \ n " ,

blockIdx.x , blockIdx.y, threadIdx.x, threadIdx.y); }

int main(int argc, char *argv[ ]){

dim3 blockDim (3,3,1);

dim3 gridDim(2,2,1);

kernel <<< gridDim,blockDim,0>>>();

return 0;}

Bearbeiten

Software Bearbeiten

Vorteile/Nachteile Bearbeiten

Zusammenfassung Bearbeiten

CUDA(Compute Unified Device Architecture)

- Plattform zur Programmierung von NVIDIA GPUs

- GPU als Koprozessorzur CPU

- Erweitert Standard C um Sprachelemente

WEBSEITEN Bearbeiten

http://www.rendering.ovgu.de/rendering_media/downloads/folien/gpuprog/07_cuda_intro.pdf

http://www.nvidia.de/object/cuda_education_de1.html#1

https://www.thomas-krenn.com/de/wiki/CUDA_Programmierung

https://www.thomas-krenn.com/de/wiki/CUDA

https://developer.nvidia.com/about-cuda

Störung durch Adblocker erkannt!


Wikia ist eine gebührenfreie Seite, die sich durch Werbung finanziert. Benutzer, die Adblocker einsetzen, haben eine modifizierte Ansicht der Seite.

Wikia ist nicht verfügbar, wenn du weitere Modifikationen in dem Adblocker-Programm gemacht hast. Wenn du sie entfernst, dann wird die Seite ohne Probleme geladen.