Zweck des LDA-Arguments in BLAS dgemm?

Lesezeit: 2 Minuten

Benutzeravatar von Setjmp
Setjmp

In der Fortran-Referenzimplementierungsdokumentation heißt es:

*  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.

Sollte ich jedoch angesichts von m und k nicht in der Lage sein, LDA abzuleiten? Wann darf LDA größer als n (oder k) sein?

  • Außerdem, was ist die vollständige Form von LDA?

    – Chaitanya Bapat

    24. Juli 2020 um 22:34 Uhr

Der LDA-Parameter in BLAS ist effektiv der Schritt der Matrix, wie er im linearen Speicher ausgelegt ist. Es ist vollkommen gültig, einen LDA-Wert zu haben, der größer ist als die führende Dimension der Matrix, an der operiert wird. Typische Fälle, in denen es entweder nützlich oder notwendig ist, einen größeren LDA-Wert zu verwenden, sind, wenn Sie mit einer Untermatrix aus einer größeren dichten Matrix arbeiten und wenn Hardware oder Algorithmen Leistungsvorteile bieten, wenn der Speicher aufgefüllt wird, um Vielfache einer optimalen Größe zu runden ( Cache-Zeilen oder Transaktionsgröße des GPU-Speichers oder Lastverteilung in Multiprozessor-Implementierungen).

Die Unterscheidung besteht zwischen der logischen Größe der ersten Dimensionen der Arrays A und B und der physikalischen Größe. Der erste ist die Größe des Arrays, das Sie verwenden, der zweite ist der Wert in der Deklaration oder die physisch verwendete Speichermenge. Da Fortran eine Spaltenhauptsprache ist, müssen die deklarierten Größen aller Indizes außer dem letzten bekannt sein, um die Position eines Array-Elements zu berechnen. Beachten Sie die FORTRAN 77-Stildeklarationen von “A(LDA,),B(LDB,),C(LDC,*)”. Die deklarierte Größe des Arrays kann größer sein als der Teil, den Sie verwenden; natürlich kann sie nicht kleiner sein.

Eine andere Sichtweise auf LDA ist der y-Schritt, was in einem Zeilen-Major-Layout Ihre Adresse für Element A bedeutet[y,x] wird als x+LDA*y berechnet. Für ein “gepacktes” Speicherlayout ohne Lücken zwischen benachbarten Zeilen von x-Daten ist LDA = xSize.

1411100cookie-checkZweck des LDA-Arguments in BLAS dgemm?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy