MKL`dgesvd`对MKL`LAPACKE_dgesvd`的表现?

时间:2017-06-05 18:00:59

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

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

  1. 假设此步骤是要确定输入矩阵是COL_MAJOR还是ROW_MAJOR

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

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

1 个答案:

答案 0 :(得分:0)

我们这里有两个函数,它们指的是两个不同的接口:

if (($(evt.target).parents('.dropdown-content').length === 0 && $(evt.target).children('.dropdown-content').length === 0 && !$(evt.target).hasClass('dropdown-content') && $(evt.target).parent().children('.dropdown-content').length === 0) || ($(evt.target).parents('.dropdown-content').length > 0 && $(evt.target).parent().prop("tagName") === 'A')) {

详细信息see this

  1. 不,这不对。正如您在第一次调用i. dgesvd : calls fortran interface ii. LAPACKE_dgesvd : calls C interface 时所注意到的那样,dgesvd的值设置为lworkas documented here仅用于计算-1的大小。因此,如果您已经知道lwork的大小,则不需要两次调用它。对于lwork,输入矩阵必须为LAPACK_COL_MAJOR,因为这是fortran的默认值。此外,无法计算矩阵是行主要还是列主要。
  2. 不,这不是真的。 dgesvd是首先实现的dgesvd接口。
  3. 这取决于编译器优化。如果矩阵很小,那可能并不重要。对我来说,如果它的专栏我将使用fortran接口。
  4. 对于矩阵布局信息see this。这是technical paper for C interface