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 23<br />

32 Byte, wenn jeder Thread auf 1 Byte zugreift, 64 Byte, bei 2 Byte und 128<br />

Byte bei 4,8 oder 16 Byte. Anschließend werden alle Threads gesammelt, die<br />

Daten aus dem selben Segment bearbeiten. Stellt sich dabei heraus, dass nur<br />

die Wörter der oberen oder unteren Hälfte des Segments benötigt werden,<br />

wird die Segmentgröße entsprechend von 128 Byte auf 64 oder 32 bzw. von<br />

64 auf 32 Byte reduziert. Anschließend wird das Segment ausgelesen und alle<br />

Threads markiert, die ihre Transaktion durchgeführt haben. Dies wiederholt<br />

sich so lange bis der gesamte Warp als bearbeitet markiert ist.<br />

Ab Devices mit einer Compute Capability von 2.0 wird der Zugriff auf den<br />

globalen Speicher gecached und es ist möglich einzustellen, ob hierfür nur der<br />

L2 Cache oder zusätzlich der L1 Cache benutzt werden soll.<br />

Jede Cache-Line ist 128 Byte lang und zeigt auf das zugehörige gleichlange<br />

Segment im Device Memory. Ein weiterer Unterschied ist, dass für einen<br />

Warp die Abfrage nicht mehr aufgeteilt wird. Es können also alle 32 Threads<br />

ihre Daten zeitgleich bearbeiten. Speicherzugriffe werden in einer minimalen<br />

Anzahl von Transaktionen durchgeführt, deren Größe der der Cache Line<br />

entspricht. Wenn pro Thread auf 8 Byte, also insgesamt auf 256 Byte zugegriffen<br />

wird, so werden zwei Anfragen benötigt. Eine pro halben Warp.<br />

Benutzt jeder Thread 16 Byte, so sind dementsprechend vier Transaktionen<br />

notwendig. Diese Zugriffe können unabhängig voneinander bearbeitet werden.<br />

Abbildung 2.4 aus dem Programming Guide von NVIDIA [4] verdeutlicht<br />

nochmals die möglichen Zugriffsszenarien auf den globalen Speicher und die<br />

Unterschiede in der Handhabung dieser zwischen den einzelnen Devices unterschiedlicher<br />

Compute Capability. Besonders beachtet werden muss, ob die<br />

Daten mit einer Schrittweite ausgelesen werden, die größer als 1 ist. Beträgt<br />

diese beispielsweise 2, so werden nicht alle Daten des angesprochenen Segments<br />

benötigt. Dies reduziert die Bandbreite um die Hälfte. Ist die Schrittweite<br />

größer, so steigt dadurch auch die Zahl der benötigten Segmente bis<br />

für jedes Element eine eigene Transaktion benötigt wird.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!