Próbuję zoptymalizować aplikację w czasie rzeczywistym modelowania 3D. Część obliczeniowa aplikacji działa prawie wyłącznie na GPU w CUDA. Aplikacja wymaga rozwiązania małego (6x6) podwójnej precyzji, symetrycznego, dodatniego, określonego układu liniowego Ax = b 500+ razy na sekundę. Obecnie odbywa się to przy użyciu wydajnej biblioteki Algebra Linear Algebra z wykorzystaniem Cholesky, ale wymaga ona kopiowania danych z procesora - GPU i z powrotem na GPU setki razy na sekundę, a narzut kernela uruchamia się za każdym razem itd.Rozwiąż małe, symetryczne, pozytywne, określone Ax = b tylko na GPU
Jak czy mogę obliczyć rozwiązanie do układu liniowego na GPU wyłącznie bez konieczności pobierania danych na procesor? Czytałem trochę o bibliotece MAGMA, ale wydaje się, że używa ona raczej algorytmów hybrydowych niż algorytmów GPU.
Jestem przygotowany na to, że rozwiązanie pojedynczego systemu liniowego na GPU będzie dużo wolniejsze niż w przypadku istniejącej biblioteki opartej na CPU, ale chcę sprawdzić, czy można to naprawić poprzez usunięcie komunikacja danych między hostem a urządzeniem i narzut kernela uruchamia się itd. setki razy na sekundę. Jeśli nie ma tam GPU, jedynej alternatywy LAPACK-a, to w jaki sposób chciałbym wdrożyć coś, aby rozwiązać ten konkretny przypadek 6x6 tylko na GPU? Czy można to zrobić bez ogromnej inwestycji w biblioteki GPAS BLAS?
System liniowy 6x6 jest tak mały, że można napisać równania w kodzie CUDA ... Oczywiście dla takiego małego systemu byłoby bardzo trudno uzyskać jakiekolwiek korzyści z równoległego charakteru CUDA, ale pozbycie się komunikacja GPU-CPU dałaby rzeczywiście ogromną korzyść. Czy to możliwe, że paralelizujesz w inny sposób? Rozwiąż system na pojedynczym rdzeniu GPU, a następnie używaj wielu rdzeni dla 500+ rozwiązań. Byłoby najlepiej, chyba że potrzebujesz wyników z poprzedniego systemu, aby rozpocząć pracę nad następnym. – Eiver
@Eiver jest na pieniądze. czy możesz zrobić te 500 równolegle, czy są one od siebie zależne? dla 6x6 to podejście http://en.wikipedia.org/wiki/Cholesky_decomposition#Block_variant wygląda ręcznie kodowalne ... –