2011-03-17 8 views
1

Quelle est la meilleure façon d'organiser les opérations matricielles dans CUDA (en termes de performance)? Par exemple, je veux calculer C * C^(-1) * B^T + C, C et B sont des matrices.Opérations matricielles dans CUDA

Dois-je écrire des fonctions séparées pour la multiplication, la transposition et ainsi de suite ou écrire une fonction pour l'expression entière?

Quelle est la méthode la plus rapide?

+0

Juste un indice: Pour la multiplication, il existe une sorte d'algorithmes appelés "Dynamic Programming", dans le MIT Introduction to Algorithms, un exemple de ces algorithmes est comment choisir l'ordre le plus rapide pour multiplier plusieurs matrices. –

Répondre

0

Je pense que la réponse dépend fortement de la taille de vos matrices. Si vous pouvez insérer une matrice dans la mémoire partagée, j'utiliserais probablement un seul bloc pour calculer cela et tout avoir dans un seul noyau (probablement plus grand, où ce calcul n'en est qu'une partie). Heureusement, si vous avez plus de matrices, et vous devez calculer l'équation ci-dessus plusieurs fois, vous pouvez le faire en parallèle, en utilisant toute la puissance de calcul GPU. Cependant, si vos matrices sont beaucoup plus grandes, vous voudrez plus de blocs pour les calculer (vérifiez l'exemple de multiplication de matrices dans le manuel de CUDA). Vous avez besoin d'une garantie que la multiplication est terminée par tous les blocs avant de passer à la partie suivante de votre équation, et si c'est le cas, vous aurez besoin d'un appel de noyau pour chacune de vos opérations.

1

Je vous recommande d'utiliser la bibliothèque CUBLAS. C'est normalement beaucoup plus daster et plus fiable que tout ce que vous pourriez écrire vous-même. De plus, son API est similaire à la bibliothèque BLAS qui est la bibliothèque standard pour l'algèbre linéaire numérique.

Questions connexes