Nie potrafię odpowiedzieć na drugą część twojego pytania, jeśli chodzi o inne wdrożenia, ale mogę zapewnić wgląd w wyzwania. Dla porównania, osobiście użyłem ViennaCL na nVidii GTX 560 Ti z 2 GB pamięci dla moich testów.
W porównaniu z kodem szeregowym na i5 w średnim zakresie widziałem przyspieszenie dla gęstych multiplikacji macierzy około 40x. W przypadku operacji takich jak wielokrotność wektora skalarnego widziałem nawet 1000-krotne przyspieszenie. 800 funtowy goryl w pokoju to jednak przepustowość pamięci. W przypadku większości komercyjnych układów GPU będziesz używać czegoś takiego jak PCIe, co ogranicza przepustowość do około 6 GB / s. W moim przypadku, podczas gdy obliczenia były 40 razy szybsze, każda z trzech kopii macierzy (dwie na GPU i jedna z tyłu) zajmowała tyle samo czasu, co samo obliczenie na procesorze.
Problemem w przypadku dowolnej ogólnej biblioteki algebry liniowej GPU jest to, że tak naprawdę nie mogą ponownie używać obiektów na GPU, ponieważ nie wiedzą, co z nimi zrobisz. Dlatego każde wywołanie jądra obliczeniowego będzie prawdopodobnie wymagało skopiowania do GPU, a następnie skopiowania wyniku z powrotem. Spowoduje to pochłonięcie dużej części zysków.
Jeśli możesz ponownie wykorzystywać obiekty, takie jak macierze, możesz napisać algorytmy wyższego poziomu, aby uniknąć jak największej ilości zarządzania pamięcią, ale biblioteka byłaby zmuszona zrobić to skutecznie.
Mam nadzieję, że to pomoże, i jestem pewien, że są tu inni ludzie, którzy są w tym dużo bardziej doświadczeni, ale takie są doświadczenia i wrażenia, które otrzymałem podczas mojej krótkiej wyprawy do obliczeń na GPU.