Comment faire pour transposer une matrice dans CUDA/cublas?
Dire que j'ai une matrice avec une dimension de A*B
sur GPU, où B
(nombre de colonnes) est la principale dimension en supposant un C style. Existe t'il une méthode en CUDA (ou cublas) pour transposer cette matrice de FORTRAN style, où A
(nombre de lignes) devient la première dimension?
C'est encore mieux si elle pourrait être transposée au cours de host->device
transfert de tout garder les données d'origine inchangé.
- Parce que CUBLAS peuvent fonctionner sur les deux transposée et normal matrices, vous n'avez probablement pas besoin de calculer explicitement la matrice de transposition, même lorsque l'on travaille avec des matrices qui sont en ligne pour une commande importante.
- Il semble que l'utilisation de
cublas<t>geam
, comme indiqué ci-dessous, est un moyen très efficace pour effectuer de la matrice de transposition en CUDA. Pour un code complet et une comparaison avec la matrice de transposition à l'aide de la Poussée, voir Quel est le moyen le plus efficace pour transposer une matrice dans CUDA?.
Vous devez vous connecter pour publier un commentaire.
Le CUDA SDK comprend un matrice de transposition, vous pouvez voir ici des exemples de code sur la façon de mettre en œuvre, qui vont de l'une implémentation naïve de versions optimisées.
Par exemple:
Naïf transposer
Comme talonmies avait point de sortie vous pouvez spécifier si vous voulez exploiter la matrice transposée ou pas, dans cublas les opérations matricielles par exemple.: pour cublasDgemm() où C = a * op(A) * op(B) + b * C, en supposant que vous souhaitez exploiter Une transposé (A^T), sur les paramètres que vous pouvez spécifier si elle est ('N' normale ou 'T' transposé)
comme demandé dans le titre, de transposer un appareil de la ligne majeure de la matrice A[m][n], on peut le faire de cette façon:
Et, pour multiplier deux lignes principales matrices A[m][k] B[k][n], C=A*B
où C est une ligne majeure de la matrice.
La version de CUBLAS livré avec le CUDA 5 boîte à outils contient un BLAS-comme méthode (cublasgeam) qui pourrait être utilisé pour transposer une matrice. Il est documenté ici.