128-bit-integer auf cuda?
Ich es gerade geschafft zu installieren, meine cuda-SDK unter Linux Ubuntu 10.04. Meine Grafikkarte ist eine NVIDIA geForce GT 425M, und ich würde gerne verwenden Sie es für einige schwer computational problem.
Was ich mich Frage ist: gibt es einen Weg, um einige vorzeichenlose 128-bit-int-var? Wenn Sie gcc verwenden, um mein Programm auf der CPU war ich mit dem __uint128_t type, aber mit cuda scheint nicht zu funktionieren.
Kann ich irgendetwas tun, um 128-bit-Ganzzahlen auf cuda?
Danke Ihnen sehr
Matteo Monti
Msoft-Programmierung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für die beste Leistung, man möchte Karte die 128-bit-geben Sie auf der Oberseite eines geeigneten CUDA vector Art, wie uint4, und die Funktionalität implementieren, die Verwendung von PTX-inline-Montage. Die Ergänzung würde etwa so Aussehen:
Die Multiplikation kann Analog konstruiert werden mit PTX-inline-Montage durch das brechen der 128-bit-zahlen in 32-bit-Blöcken zur Berechnung der 64-bit-teilweise Produkte aus und fügen Sie diese entsprechend. Natürlich braucht ein wenig Arbeit. Könnte man angemessene Leistung bei der C-Ebene durch das brechen der Zahl in 64-bit-Blöcken und mit __umul64hi() in Verbindung mit regelmäßiger 64-bit-Multiplikation und einige Ergänzungen. Dies würde zu folgendem führen:
Unten ist eine version der 128-bit-Multiplikation verwendet PTX-inline-Montage. Es erfordert PTX 3.0, ausgeliefert mit CUDA 4.2, und der code erfordert eine GPU mit mindestens compute capability 2.0, d.h. Fermi-oder Kepler-Klasse-Gerät. Der code verwendet die minimale Anzahl von Anweisungen, wie sechzehn 32-bit multipliziert werden benötigt um ein 128-bit-Multiplikation. Durch den Vergleich, die Variante oben mit Hilfe von CUDA-Interna, kompiliert 23 Anweisungen für eine sm_20 Ziel.
XMAD
(eine 16 x 16 - +32-bit-multiply-add-operation). Ich Lesen, die systemeigene 32-bit-Ganzzahl, multipliziert restauriert wurden, mit der Volta-Architektur , aber ich habe keine praktische Erfahrung mit Volta noch.CUDA nicht unterstützt 128-bit-Ganzzahlen nativ. Sie fälschen die Vorgänge selbst mit zwei 64-bit-Ganzzahlen.
Blick auf dieser Beitrag:
my_uint128
auf der CPU? Natürlich ist die native Unterstützung schneller sein wird. Die Hoffnung ist, dass die Leistung auf der GPU mit diesem 128-bit-Typ wird schneller sein als die Leistung auf der CPU mit integrierter 128-bit-Ganzzahlen.Eine stark verspätete Antwort, aber könntest du überlegen, die diese Bibliothek nutzen:
https://github.com/curtisseizert/CUDA-uint128
definiert eine 128-bit-großen Struktur, Methoden und freistehende utility-Funktionen, um es zu funktionieren, wie erwartet, die es erlauben verwendet werden wie eine normale Ganzzahl ist. Meistens.