Quelles sont les implémentations disponibles les plus rapides de BLAS / LAPACK ou d'autres routines d'algèbre linéaire sur les systèmes GPU?

11

nVidia, par exemple, a CUBLAS, qui promet une accélération de 7 à 14 fois. Naïvement, cela est loin du débit théorique de l'une des cartes GPU de nVidia. Quels sont les défis liés à l'accélération de l'algèbre linéaire sur les GPU, et existe-t-il déjà des routages d'algèbre linéaire plus rapides?

Jiahao Chen
la source

Réponses:

9

Je ne peux pas répondre à la deuxième moitié de votre question en ce qui concerne les autres implémentations, mais je peux donner un aperçu des défis. Pour référence, j'ai personnellement utilisé ViennaCL sur un nVidia GTX 560 Ti avec 2 Go de mémoire pour mes benchmarks.

Sur le code série sur un i5 de milieu de gamme, j'ai vu des accélérations pour des multiplications matricielles denses d'environ 40x. Pour des opérations telles qu'une multiplication vectorielle-scalaire, j'ai vu des accélérations aussi élevées que 1000x. Le gorille de 800 livres dans la pièce, cependant, est la bande passante mémoire. Pour la plupart des GPU commerciaux, vous utiliserez quelque chose comme PCIe qui vous limite à environ 6 Go / s de débit. Dans mon cas, alors que le calcul était 40 fois plus rapide, les trois copies matricielles (deux vers le GPU et une vers l'arrière) ont chacune pris environ autant de temps que le simple calcul sur le CPU.

Le problème avec toute bibliothèque générale d'algèbre linéaire GPU va être qu'ils ne peuvent pas vraiment réutiliser les objets sur le GPU, car ils ne savent pas ce que vous allez en faire. Ainsi, chaque appel à un noyau de calcul nécessitera probablement une copie sur le GPU, puis une nouvelle copie du résultat. Cela grugera une grande partie des gains.

Si vous pouvez réutiliser des objets tels que des matrices, vous pouvez écrire les algorithmes de niveau supérieur pour éviter autant de gestion de mémoire que possible, mais une bibliothèque aurait du mal à le faire efficacement.

J'espère que cela aide, et je suis sûr qu'il y a d'autres personnes ici qui sont beaucoup plus expérimentées dans ce domaine, mais ce sont les expériences et les impressions que j'ai eues pendant ma courte incursion dans l'informatique GPU.

Godric Seer
la source
3
C'est pourquoi vous souhaitez que les objets qui vivent sur le GPU pendant une longue période de temps plutôt que d'être copiés avec impatience sur le CPU. Par exemple, les matrices et vecteurs PETSc contiennent un indicateur indiquant si le CPU et / ou le GPU est à jour. Une opération sur le GPU marque la version du processeur comme sale et vice-versa. Une copie est effectuée de manière transparente si vous demandez la mémoire dans un endroit sale, mais cela est rare si tous les composants algorithmiques qui touchent les grandes structures de données peuvent s'exécuter au même endroit.
Jed Brown
5

Permettez-moi de me concentrer uniquement sur CUDA et BLAS.

L'accélération sur une implémentation BLAS hôte n'est pas une bonne mesure pour évaluer le débit, car elle dépend de trop de facteurs, bien que je convienne que l'accélération est généralement ce qui compte.

Si vous regardez les benchmarks publiés par NVIDIA et prenez en compte que le Tesla M2090 a 1331 Gigaflops (simple précision) et 665 Gigaflops (double précision), vous verrez que pour SGEMM et DGEMM nous avons un débit mesuré presque à 60% de la théorie, ce qui est plutôt bien.

2mnkm×kk×n

En ce qui concerne le débit soutenu en virgule flottante, je pense que les flops doivent être calculés sans tenir compte des données et des temps de transfert des résultats, ce qui rend les comparaisons d'accélération difficiles. De plus, vous devez prendre en compte la taille de la matrice, car les meilleures performances sont pour les grandes matrices.

Conclusion: l'accélération d'une application réelle peut être très différente des performances de pointe mesurées sur des routines d'algèbre linéaire, car vous devez prendre en compte l'initialisation du GPU, les temps de transfert de données, etc., etc.

Je ne répondrai donc pas à votre question sur la bibliothèque la plus rapide, car la question n'a de sens que si une métrique et un problème précis sont définis. Cela dit, je pense que cuBLAS et MAGMA sont un très bon point de départ.

Stefano M
la source