19.02.2014 Aufrufe

2. Abschattung Kosmischer Strahlung durch den Mond in IceCube

2. Abschattung Kosmischer Strahlung durch den Mond in IceCube

2. Abschattung Kosmischer Strahlung durch den Mond in IceCube

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

4.<strong>2.</strong> Funktion<br />

Seit e<strong>in</strong>igen Jahren wer<strong>den</strong> Graphikkarten auch außerhalb ihres ursprünglichen Verwendungszwecks<br />

e<strong>in</strong>gesetzt. Aufgrund des schnellen Speichers und der hohen Parallelität, die sie bieten, s<strong>in</strong>d<br />

sie für Teile rechenaufwändiger Programme oder Berechnungen von großem Nutzen.<br />

4.<strong>2.</strong> Funktion<br />

In dieser Arbeit wird die von der Firma NVIDIA entwickelte Sprache CUDA benutzt, um die<br />

Berechnungen zur <strong>Mond</strong>schattenanalyse auf e<strong>in</strong>er GPU <strong>durch</strong>zuführen. CUDA ist e<strong>in</strong>e Erweiterung<br />

der Programmiersprache C. Die Strukturen und Begriffe s<strong>in</strong>d teilweise CUDA-spezifisch, lassen sich<br />

jedoch meist auch auf andere Sprachen übertragen.<br />

E<strong>in</strong> Programm, das auf der GPU ausgeführt wird, wird Kernel genannt. E<strong>in</strong> Kernel erzeugt<br />

e<strong>in</strong> Grid von Threads, die <strong>den</strong> Programmcode des Kernels parallel <strong>durch</strong>laufen. Threads s<strong>in</strong>d <strong>in</strong><br />

Blöcken organisiert. In e<strong>in</strong>em Block ist es möglich, Daten zwischen Threads auszutauschen. E<strong>in</strong><br />

Block kann bis zu drei Dimensionen haben, das heißt, dass die Threads <strong>in</strong> e<strong>in</strong>em Block drei Indize<br />

bekommen, <strong>durch</strong> die sie im Programmcode unterschie<strong>den</strong> wer<strong>den</strong> können. Diese Dimensionen<br />

können bei der Programmierung festgelegt wer<strong>den</strong> und an das entsprechende Problem angepasst<br />

wer<strong>den</strong>.<br />

Auch Blöcke haben zwei Indize, um im Programmcode unterschie<strong>den</strong> zu wer<strong>den</strong> (siehe Abbildung<br />

4.2 l<strong>in</strong>ks). Diese Indize können über BlockIdx und ThreadIdx abgerufen wer<strong>den</strong>.<br />

Die Anzahl der Blöcke, die parallel ausgeführt wer<strong>den</strong>, hängt von der Anzahl der Kerne der<br />

verwendeten Graphikkarte ab. Jedoch muss dies nicht bei der Programmierung berücksichtigt<br />

wer<strong>den</strong>, da die GPU die Aufrufe selbst übernimmt. Hierbei gibt es ke<strong>in</strong>e festgelegte Reihenfolge.<br />

Folglich kann es se<strong>in</strong>, dass Programme auf unterschiedlichen Graphikarten unterschiedlich schnell<br />

laufen (siehe Abbildeung 4.2 rechts).<br />

Abbildung 4.<strong>2.</strong>: L<strong>in</strong>ks: Organisation von Threads und Blocks auf e<strong>in</strong>em Grid.[31] Rechts: Aufrufe<br />

von Blöcken <strong>in</strong> unterschiedlichen Masch<strong>in</strong>en.[32]<br />

Jeder Thread hat e<strong>in</strong>en kle<strong>in</strong>en Speicher für lokale Variablen. Dieser Speicher ist <strong>in</strong> der Graphikkarte<br />

dicht an <strong>den</strong> Prozessor gebaut, um e<strong>in</strong>en schnellen Zugriff zu erlauben. Zudem gibt es<br />

René Reimann 13

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!