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:
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ą).
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