【问题标题】:Purpose of LDA argument in BLAS dgemm?BLAS dgemm 中 LDA 参数的目的?
【发布时间】:2012-01-02 15:24:39
【问题描述】:

Fortran 参考实现文档指出:

*  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)?

【问题讨论】:

  • 另外,LDA 的完整形式是什么?

标签: c fortran blas


【解决方案1】:

区别在于数组 A 和 B 的第一维的逻辑大小和物理大小。第一个是您正在使用的数组的大小,第二个是声明中的值,或使用的物理内存量。由于 Fortran 是一种列主要语言,因此必须知道除最后一个索引之外的所有索引的声明大小,以便计算数组元素的位置。请注意“A(LDA,),B(LDB,),C(LDC,*)”的 FORTRAN 77 样式声明。声明的数组大小可以大于您正在使用的部分;当然不能小了。

【讨论】:

    【解决方案2】:

    BLAS 中的 LDA 参数实际上是矩阵的步长,因为它被布置在线性内存中。 LDA 值大于正在操作的矩阵的前导维度是完全有效的。使用较大 LDA 值有用或必要的典型情况是,当您从较大的密集矩阵对子矩阵进行操作时,以及当存储被填充到某个最佳大小的整数倍时,硬件或算法提供了性能优势(例如,高速缓存行或 GPU 内存事务大小,或多处理器实现中的负载平衡)。

    【讨论】:

      【解决方案3】:

      另一种看待它的方式是 LDA 是 y 步长,这意味着在行优先布局中,元素 A[y,x] 的地址计算为 x+LDA*y。对于 x-data LDA=xSize 的相邻行之间没有间隙的“打包”内存布局。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        相关资源
        最近更新 更多