【问题标题】:Performance of MKL `dgesvd` vs MKL `LAPACKE_dgesvd`?MKL `dgesvd` 与 MKL `LAPACKE_dgesvd` 的性能?
【发布时间】:2017-06-05 18:00:59
【问题描述】:

dgesvd 似乎是 LAPACKE_dgesvd,布局为 LAPACK_COL_MAJOR,但查看 dgesvdLAPACKE_dgesvd 的示例,dgesvd 示例中似乎有一个额外的步骤,其中最佳工作空间被查询分配。

  1. 假设这一步是判断输入矩阵是COL_MAJOR还是ROW_MAJOR是否正确?

  2. 假设一旦找到最佳工作空间,'dgesvd' 会在内部调用 LAPACKE_dgesvd 并使用适当的布局是否正确?

  3. 如果我已经知道COL_MAJOR 的矩阵布局使用LAPACKE_dgesvddgesvd 更好(更快/更便宜)?

【问题讨论】:

    标签: c performance matrix linear-algebra intel-mkl


    【解决方案1】:

    这里有两个函数,分别指代两个不同的接口:

    i.  dgesvd         : calls fortran interface
    ii. LAPACKE_dgesvd : calls C interface
    

    详情see this

    1. 不,这是不正确的。正如您在第一次调用dgesvd 时会注意到的,lwork 的值设置为-1,其中as documented here 仅用于计算lwork 的大小。因此,如果您已经知道lwork 的大小,则无需调用它两次。对于dgesvd,输入矩阵必须为LAPACK_COL_MAJOR,因为这是fortran 的默认值。也无法计算矩阵是行优先还是列优先。
    2. 不,这不是真的。 dgesvd 是首先实现的fortran 接口。
    3. 这取决于编译器优化。如果矩阵很小,则可能无关紧要。对我来说,如果它的专栏专业我会使用 fortran 接口。

    对于矩阵布局信息see this。这是technical paper for C interface

    【讨论】:

      猜你喜欢
      • 2013-11-13
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多