Wie zu transponieren einer matrix in CUDA/cublas?
Sagen, dass ich eine matrix mit einer dimension von A*B
auf die GPU, wo B
(Anzahl der Spalten) ist die führende dimension angenommen, ein C-Stil. Gibt es eine Methode in CUDA (oder cublas) zu transponieren dieser matrix FORTRAN-Stil, wo A
(Anzahl der Zeilen) wird die führende dimension?
Ist es sogar besser, wenn es umgesetzt werden können, während host->device
transfer, während halten Sie die original-Daten unverändert.
- Da CUBLAS kann auf beide umgesetzt und normale Matrizen, werden Sie wahrscheinlich nicht brauchen, um explizit berechnen Sie die matrix transponieren, auch wenn das arbeiten mit Matrizen, das sind in row-major-Reihenfolge.
- Es scheint, dass mit
cublas<t>geam
, wie unten vorgeschlagen, ist eine sehr effiziente Methode zur Durchführung von matrix-Umsetzung in CUDA. Für eine vollständige code und ein Vergleich mit den matrix-Transponierung mit Schub, siehe Was ist die effizienteste Methode zum transponieren einer matrix in CUDA?.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den CUDA SDK beinhaltet eine matrix transponieren, können Sie sehen, hier Beispiele auf, wie die Umsetzung ein, die von einer naiven Implementierung einer optimierten Versionen.
Beispiel:
Naiv transponieren
Wie talonmies hatte Punkt aus können Sie angeben, wenn Sie möchten, betreiben die matrix transponiert oder nicht, in der cublas-matrix-Operationen wie zB.: für cublasDgemm (), wo C = a * op(A) * op(B) + b * C, vorausgesetzt, Sie betreiben wollte als umgesetzt (A^T), die auf die Parameter, die Sie angeben können, wenn es ("'N' normal oder 'T' transponiert)
als gefragt, innerhalb der Titel, die Umsetzung Gerät row-major matrix A[m], [n], man kann es so machen:
Und zu vervielfachen, zwei row-major Matrizen A[m][k] B[k][n], C=A*B
wo C ist auch ein row-major matrix.
Version von CUBLAS zusammen mit der CUDA-5-toolkit enthält ein BLAS-like-Methode (cublasgeam), die verwendet werden könnten, um das transponieren einer matrix. Es ist dokumentiert hier.