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