2011-11-21 14 views
31

W Fortran stany dokumentacja implementacja referencyjna:Cel argumentu LDA w BLAS dgemm?

* LDA - INTEGER. 
*   On entry, LDA specifies the first dimension of A as declared 
*   in the calling (sub) program. When TRANSA = 'N' or 'n' then 
*   LDA must be at least max(1, m), otherwise LDA must be at 
*   least max(1, k). 
*   Unchanged on exit. 

Jednak biorąc pod uwagę m oraz k nie powinien być w stanie czerpać LDA? Kiedy LDA może być większa niż n (lub k)?

Odpowiedz

19

Rozróżnienie jest między logiczną wielkością pierwszych wymiarów tablic A i B a rozmiarem fizycznym. Pierwszy to rozmiar tablicy, której używasz, drugi to wartość w deklaracji lub fizyczna ilość użytej pamięci. Ponieważ Fortran jest głównym językiem kolumny, zadeklarowane rozmiary wszystkich indeksów oprócz ostatniego muszą być znane w celu obliczenia położenia elementu tablicy. Zwróć uwagę na deklaracje stylu FORTRAN 77 "A (LDA, ), B (LDB,), C (LDC, *)". Deklarowany rozmiar tablicy może być większy niż część, z której korzystasz; oczywiście nie może być mniejsza.

32

Parametr LDA w BLAS jest efektywnie krokiem macierzy, ponieważ jest on rozmieszczony w pamięci liniowej. Jest całkowicie prawidłowe, aby mieć wartość LDA, która jest większa niż wiodący wymiar matrycy, która jest obsługiwana. Typowe przypadki, w których użyteczne lub konieczne jest użycie większej wartości LDA, są w przypadku pracy na macierzy podrzędnej z gęstej matrycy, a gdy sprzęt lub algorytmy oferują zalety wydajności, gdy pamięć jest wypełniona do okrągłych wielokrotności o optymalnym rozmiarze (linie pamięci podręcznej lub rozmiar transakcji pamięci GPU lub balans obciążenia w implementacjach wieloprocesorowych, na przykład).

4

Innym sposobem na sprawdzenie tego jest LDA to y-krok, co oznacza, że ​​w układzie rzędowo-głównym twój adres dla elementu A [y, x] jest obliczany jako x + LDA * y. Dla "spakowanego" układu pamięci bez przerw pomiędzy sąsiednimi liniami danych X LDA = xSize.

Powiązane problemy