Actuellement, j'essaie simplement de mettre en œuvre un algorithme de régression linéaire simple sous forme matricielle basé sur cuBLAS avec CUDA. La multiplication de matrice et la transposition fonctionnent bien avec la fonction cublasSgemm
.Inversion de matrice CUDA en référençant le pointeur CUDA
Les problèmes commencent par des inversions matricielles, basées sur les fonctions cublas<t>getrfBatched()
et cublas<t>getriBatched()
(voir here).
Comme on peut le voir, les paramètres d'entrée de ces fonctions - des tableaux de pointeurs aux matrices. Figurez-vous, que je l'ai déjà alloué la mémoire pour la matrice (A^T * A) sur le GPU en raison de calculs précédents:
float* dProdATA;
cudaStat = cudaMalloc((void **)&dProdATA, n*n*sizeof(*dProdATA));
Est-il possible d'exécuter factorisation (inversion)
cublasSgetrfBatched(handle, n, &dProdATA, lda, P, INFO, mybatch);
sans HOST supplémentaire < -> copie de mémoire GPU (voir working example of inverting array of matrices) et l'allocation de tableaux avec un seul élément, mais juste obtenir GPU-référence à GPU-pointeur?
Merci! Mais j'ai peur que l'utilisation de la mémoire gérée puisse être une raison pour que la vitesse de calcul diminue. –