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.5. DIE ARCHITEKTUR VON NVIDIA GRAFIKKARTEN 21<br />

Der Globale Speicher<br />

Der globale Speicher ist bis zu 2048 MiB groß und neben dem Konstantenund<br />

Texturspeicher der einzige, welcher von allen Threads und dem Host<br />

adressiert werden kann. Ein Bereich im globalen Speicher kann entweder als<br />

CUDA Array oder <strong>linearer</strong> Speicherbereich belegt werden. CUDA Arrays sind<br />

optimiert für die Verwendung von Texturen, haben aber den Nachteil, dass<br />

nur die CPU die Möglichkeit hat diesen zu beschreiben. Der lineare Speicher<br />

hingegen kann auch von der GPU zur Datensicherung benutzt werden. Bei<br />

Devices mit einer Compute Capability von 1.x wird ein 32 Bit Adressraum<br />

verwendet während die neueren mit einem 40 Bit Raum arbeiten. Im Normalfall<br />

werden alle Daten, bei denen es sich nicht um Konstanten handelt,<br />

zuerst in den globalen Speicher <strong>über</strong>tragen. Später ist es möglich bestimmte<br />

Bereiche als Texturen zu definieren.<br />

Wenn ein Warp den globalen Speicher ansteuert, wird dies in so wenigen<br />

Transaktionen wie möglich zusammengefasst. Für Devices mit einer Compute<br />

Capability von 1.x werden mindestens zwei Zugriffe, je einer pro halben<br />

Warp, benötigt. Bei Grafikkarten mit einer Compute Capability von 2.0 wird<br />

der Warp nicht unterteilt und somit im besten Fall nur eine Transaktion<br />

durchgeführt.<br />

Pro Zugriff auf den globalen Speicher ist es möglich ein komplettes Segment<br />

der Größe 32, 64 oder 128 Byte auszulesen bzw. zu beschreiben. Dabei werden<br />

alle Threads eines Warps bei einer Compute Capability von 2.0 und alle<br />

eines halben bei einer Compute Capability von 1.x bedient, deren angesteuerte<br />

Adressen sich innerhalb dieses Abschnitts befinden. Die erste Adresse<br />

des Segments ist immer ein Vielfaches seiner Größe. Der Anfang des Abschnitts<br />

wird also nicht durch die Position des ersten Wortes, sondern durch<br />

die Einteilung des Adressraumes bestimmt. Wie viele Aufrufe nötig sind,<br />

um den ganzen Warp abzuarbeiten, hängt von der Wortgröße pro Thread<br />

und deren Verteilung im globalen Speicher ab. Nicht zusammengefasste Zugriffe<br />

reduzieren durch die Anzahl der zusätzlichen Transaktionen und dem<br />

Auslesen von nicht benötigten Daten den Befehlsdurchsatz. Aufgrund dieser<br />

möglichen Performanzreduzierung ist das Organisieren der Speicherzugriffe<br />

ein sehr wichtiger Aspekt der Optimierung. Für Devices mit einer Compute<br />

Capability von 1.2 und 1.3 sind die Bedingungen zwar weniger streng dennoch<br />

ist die Differenz in der Bandbreite gerade bei einer großen Anzahl von<br />

Daten deutlich spürbar.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!