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 1MatematycznieMnoż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.