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 25<br />
Der Lokale Speicher<br />
Der lokale Speicher wird nicht von dem Anwender, sondern von dem Kernel<br />
selber belegt. Dies geschieht wenn er beschließt, dass die zur Verfügung<br />
stehenden Register für die Variablen des Threads nicht ausreichend sind.<br />
Ursache dafür kann beispielsweise ein zu großer Datentyp sein. Da sich der<br />
lokale wie auch der globale Speicher nicht auf dem Chip befindet, haben sie<br />
die selben Verzögerungszeiten. Seinen Namen hat dieser Adressraum nicht<br />
durch seine Lage, sondern durch die Tatsache, dass er lokal zu einem Thread<br />
gehört.<br />
Der lokale Speicher ist in 32 Bit Worten organisiert und seine Zugriffe können<br />
anders als bei dem globalen Speicher nur dann zusammengefasst werden,<br />
wenn die Threads auf die selben Daten zugreifen.<br />
Der Gemeinsame Speicher<br />
Bei dem gemeinsamen Speicher handelt es sich um einen Cache für alle<br />
Threads eines Blocks, welcher durch den Anwender organisiert wird. Somit<br />
ermöglicht er Kommunikation und einen gemeinsamen Zugriff auf Daten. Dieser<br />
Shared Memory hat eine geringe Verzögerungszeit, da er sich in der Nähe<br />
des Prozessorkerns befindet. Seine Lebensdauer beginnt und endet mit der<br />
des Blocks. Um eine möglichst hohe Bandbreite zu erzielen ist der Speicher in<br />
einzelne Module, so genannte Bänke, unterteilt auf die zeitgleich zugegriffen<br />
werden kann. Daher sollte versucht werden den Speicher so zu adressieren,<br />
dass es zu keinem Konflikt kommt. Dies geschieht beispielsweise wenn verschiedene<br />
Threads mit unterschiedlichen Wörtern in der selben Bank arbeiten.<br />
In diesem Fall wird der Aufruf in so viele konfliktfreie Transaktionen<br />
unterteilt, wie nötig. Daher empfiehlt es sich eine Wortgröße von mindestens<br />
32 Bit zu wählen, da CUDA aufeinander folgende Daten mit einer Länge von<br />
16 und 8 Bit jeweils zu zweit bzw. zu viert in dem selben Modul speichert.<br />
Der gemeinsame Speicher eignet sich nur dann, wenn die dort abgelegten Variablen<br />
mehr als einmal verwendet werden, da seine Lebensdauer erst mit der<br />
des Blocks beginnt und die Daten vorher aus dem globalen Speicher geladen<br />
werden müssen. Neben der Möglichkeit redundante Zugriffe auf einen langsamen<br />
Speicher zu vermeiden kann er auch verwendet werden um nicht zusammenfassbare<br />
Transaktionen zu verhindern. Dazu müssen im ersten Schritt,<br />
den Rahmenbedingungen entsprechend, die Daten sequentiell aus dem globalen<br />
Speicher in den gemeinsamen Speicher <strong>über</strong>tragen werden. Anschließend