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 ...
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.