2011-11-21 80 views
31

的Fortran語言參考實現文檔狀態:BLAS dgemm中LDA參數的用途?

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

然而,由於m和k我不應該能夠獲得LDA? LDA何時被允許大於n(或k)?

回答

19

區別在於數組A和B的第一維的邏輯大小與物理大小之間的區別。第一個是你正在使用的數組的大小,第二個是聲明中的值,或者是使用的物理內存量。由於Fortran是列主要語言,爲了計算數組元素的位置,必須知道除最後一個之外的所有索引的已聲明大小。注意「A(LDA,),B(LDB,),C(LDC,*)」的FORTRAN 77樣式聲明。數組的聲明大小可能大於您正在使用的部分;當然它不能小一點。

32

BLAS中的LDA參數實際上是矩陣的跨步,因爲它在線性存儲器中進行佈局。 LDA值大於正在操作的矩陣的前導維度是完全有效的。在使用較大LDA值時有用或必要的典型情況是,當您使用較大的密集矩陣對子矩陣進行操作時,以及硬件或算法提供性能優勢時,將存儲填充到某個最優大小的整數倍時緩存行或GPU內存事務大小,或多處理器實現中的負載平衡)。

4

另一種看待它的方式是LDA是y-stride,意思是在行 - 主佈局中,元素A [y,x]的地址計算爲x + LDA * y。對於x-data LDA = xSize的相鄰行之間沒有間隙的「壓縮」存儲器佈局。