Musimy obliczyć macierze kowariancji o rozmiarach od do . Mamy dostęp do GPU i klastrów, zastanawiamy się, jakie jest najlepsze równoległe podejście do przyspieszenia tych obliczeń.
matrix
parallel-computing
gpu
Otwórz drogę
źródło
źródło
Odpowiedzi:
Pierwszą rzeczą jest uznanie, że możesz to zrobić za pomocą BLAS. Jeśli macierz danych jestX=[x1x2x3...]∈Rm×n (każdy x jest wektorem kolumny odpowiadającym jednemu pomiarowi; wiersze są próbami), możesz zapisać kowariancję jako:
Twoje dane i macierze wyników mogą mieć około 64 GB, więc nie zmieścisz się na pojedynczym węźle ani na GPU o wartości jednego węzła. W przypadku klastra bez GPU warto przyjrzeć się PBLAS , który wydaje się być scalapack. W przypadku układów GPU biblioteki wielu węzłów jeszcze nie są dostępne. Magma ma jakąś podstawową równoległą implementację BLAS, ale może nie być przyjazna dla użytkownika. Nie sądzę, że CULA ma jeszcze wiele węzłów, ale warto mieć na to oko. CUBLAS jest jednowęzłowy.
Sugerowałbym również, abyś mocno zastanowił się nad implementacją równoległości, szczególnie jeśli znasz MPI i musisz podłączyć go do istniejącej bazy kodu. W ten sposób możesz łatwo przełączać się między procesorem a GPU BLAS i zaczynać i kończyć danymi dokładnie tam, gdzie chcesz. Nie powinieneś potrzebować więcej niż kilku wywołań MPI_ALLREDUCE .
źródło
Zaimplementowałem formułę podaną przez @Max Hutchinson z CUBlas i Cuda Thrust i porównałem z narzędziami do obliczania wariancji online. Wydaje się, że mój przynosi dobre wyniki. Poniższy kod planowany jest dla QDA Bayes. Podana macierz może zawierać więcej niż jedną klasę. Tak więc oblicza się wiele macierzy wariancji co. Mam nadzieję, że przyda się komuś.
źródło