/ / BLAS: gemm vs. gemv - linear-algebra, blas

BLAS: gemm vs. gemv - linear-algebra, blas

Dlaczego BLAS ma gemm funkcja mnożenia macierzy macierzowej i osobna gemv funkcja mnożenia macierzy-wektora? Czy mnożenie wektorów macierzy jest tylko szczególnym przypadkiem mnożenia macierzy macierzy, gdzie jedna macierz ma tylko jeden wiersz / kolumnę?

Odpowiedzi:

11 dla odpowiedzi nr 1

MatematycznieMnożenie macierzy-wektora jest szczególnym przypadkiem mnożenia macierzy macierzowej, ale niekoniecznie jest to prawdą, jak w bibliotece oprogramowania.

Obsługują różne opcje. Na przykład, gemv wspiera ukierunkowany dostęp do wektorów, na których działa, podczas gdy gemm nie obsługuje macierzy ukośnych. W powiązaniach języka C, gemm wymaga określenia kolejności przechowywania wszystkich trzech macierzy, podczas gdy nie jest to konieczne gemv dla argumentów wektorowych, ponieważ byłoby to bez znaczenia.

Oprócz obsługi różnych opcji, istnieją rodziny optymalizacji, które mogą być wykonywane gemm które nie mają zastosowania gemv. Jeśli wiesz, że robisz wektor matrycowyprodukt, nie chcesz, żeby biblioteka marnowała czas na zastanawianie się, czy nie jest tak, zanim zmienisz ścieżkę kodu, która jest zoptymalizowana dla tego przypadku; raczej zamiast tego nazwałbyś to bezpośrednio.


2 dla odpowiedzi nr 2

Podczas optymalizacji gemv i gemm obowiązują różne techniki:

  • Do działania macierzy macierzy używasz zablokowanych algorytmów. Rozmiary bloków zależą od rozmiarów pamięci podręcznej.
  • W celu optymalizacji produktu macierzy-wektora używa się tak zwanych operacji z bezpiecznym poziomem 1 (na przykład stopionych produktów z wiązaniem lub topionego axpy).

Daj mi znać, jeśli chcesz uzyskać więcej informacji.


1 dla odpowiedzi nr 3

Myślę, że lepiej pasuje do hierarchii BLASz poziomem 1 (wektor wektorowy), poziomem 2 (macierz-wektor) i poziomem 3 (macierz-macierz). A może lepiej zoptymalizować, jeśli wiesz, że to tylko wektor.