2013-01-28 17 views
6

Potrzebuję zaimplementować multiplikację macierzy na GPU z CUDA dla dużych macierzy. Rozmiar każdej z matryc jest większy niż pamięć GPU. Więc myślę, że potrzebuję algorytmu, aby to zrobić skutecznie. Przeszukałem internet, ale nie mogłem go znaleźć. Czy ktoś może mi podać nazwę lub link takich algorytmów.Mnożenie dużych macierzy na gpu

Dziękuję

+1

Co powiesz na proste podzielenie macierzy takich jak '[A0; A1] * [B0 B1] = [A0 * B0 A0 * B1; A1 * B0 A1 * B1] "? To może dobry początek. – kangshiyin

Odpowiedz

13

Nie istnieje tak naprawdę formalny algorytm; Ogólnie rzecz biorąc, tego rodzaju operacje algebry liniowej, w których cały problem nie jest przechowywany w pamięci jednocześnie, są nazywane operacjami "poza jądrem".

Aby go rozwiązać, nie potrzebujesz szczególnie skomplikowanego algorytmu, tylko bibliotekę CUBLAS oraz ołówek i papier. Na przykład, można rozkładać produkt matrycowy tak:

enter image description here

co daje cztery niezależne operacje mnożenia sub-macierzy. Można je obliczyć za pomocą czterech wywołań CUBLAS gemm za pomocą bardzo prostego kodu hosta. Możesz rozszerzyć pomysł na tyle pod-macierzy, jakie są wymagane, aby dopasować rozmiar problemu i pojemność twojego GPU. Ta sama zasada może być również wykorzystana do implementacji problemów z mnożeniem macierzy na wielu procesorach graficznych (patrz np. this question).

Alternatywnie, można znaleźć działającą implementację tego precyzyjnego pomysłu w bazie kodów Harvard opracowany SciGPU-GEMM oraz w implementacji na poziomie linku HPL-CUDA (zrzeczenie się: Jestem związany z tą drugą bazą kodową).

+0

+1. Skąd się wzięła dekompozycja? Świetna odpowiedź oczywiście! – Rekin

+1

@Rekin: Nie rozumiem, o co pytasz. Matematyka pochodziła z mojej głowy, a obraz, który widzisz, został wyrenderowany w LaTeX-u do gify przeze mnie i przesłany do usługi hostingu obrazów SO. – talonmies

+0

Przepraszam, miałem na myśli formułę matematyczną. Wziąłem lekcję algebry jakiś czas temu, a temat wielkiej macierzy pomnożono jako jeden z najbardziej problematycznych do rozwiązania obliczeniowego. Pozostawiło mnie to w fałszywym odczuciu, że nie było to możliwe. – Rekin

Powiązane problemy