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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!