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.