03.03.2013 Aufrufe

Effizientes Lösen linearer Gleichungssysteme über GF(2) - CDC ...

Effizientes Lösen linearer Gleichungssysteme über GF(2) - CDC ...

Effizientes Lösen linearer Gleichungssysteme über GF(2) - CDC ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

2.6. OPTIMIERTES PROGRAMMIEREN MIT CUDA 31<br />

Programm erzielt eine deutlich schlechtere Performanz, da sich die Gesamtzeit<br />

durch die Ausführungszeit des zweiten Kernels, sowie die Verzögerungszeit<br />

des globalen Speichers, erhöht. Es empfiehlt sich daher die Verwendung<br />

atomarer Blöcke ohne Kommunikation einzelner Threads. Auch Synchronisationspunkte<br />

können die Ausführung eines Warps verzögern. In diesem Fall<br />

werden Threads bearbeitet, die diese Barriere nicht betrifft.<br />

Die Anzahl der Threads und Blöcke sollten so gewählt werden, dass die<br />

Hardware ausreichend ausgelastet ist. Die Metrik Auslastung besteht aus<br />

dem Verhältnis von aktiven Warps pro Multiprozessor zur maximal möglichen<br />

Menge.<br />

Die Anzahl von Blöcken und Warps die sich zeitgleich auf einem Multiprozessor<br />

befinden können hängt nicht nur von den Beschränkungen der Grafikkarte<br />

ab, sondern auch von den benötigten Ressourcen. Tritt der Fall ein, dass ein<br />

Block das Limit <strong>über</strong>schreitet, dann wird der Kernel nicht bearbeitet. Die<br />

Menge der benötigten Ressourcen, wie Register und Größe des gemeinsamen<br />

Speichers pro Block, kann berechnet werden.<br />

Berechnung der Anzahl von Warps<br />

Bei Devices mit einer Compute Capability von 1.x wird immer eine gerade<br />

Anzahl von Warps für einen Block zur Verfügung gestellt. Um die Menge<br />

benötigter Warps zu berechnen muss die Anzahl der Threads durch die<br />

Warpgröße geteilt und anschließend auf den nächst höheren geraden Wert<br />

aufgerundet werden.<br />

Berechnung der Anzahl benötigter Register<br />

Einer der Faktoren, welcher den Grad der Auslastung bestimmt, ist die Registerverfügbarkeit.<br />

Alle aktiven Threads eines Multiprozessors müssen sich die<br />

Menge der zur Verfügung stehenden Register teilen. Ist dies nicht möglich, so<br />

sind weniger Blöcke aktiv und es werden gegebenenfalls Daten in den lokalen<br />

Speicher ausgelagert, was zu erheblichen Verzögerungszeiten beim Abruf<br />

führt.<br />

Zuerst wird die Anzahl der Warps mit der Warpgröße sowie der Menge<br />

benötigter Registern pro Thread multipliziert. Grafikkarten mit einer Compute<br />

Capability von 1.0 und 1.1 stellen Register in Gruppen zu 256 Stück<br />

bereit. Bei Devices mit einer Compute Capability von 1.2 und 1.3 bestehen

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!