2017-06-05 64 views
0

dgesvd似乎是一個LAPACKE_dgesvd與佈局LAPACK_COL_MAJOR,但在看爲dgesvdLAPACKE_dgesvd實例似乎還有在dgesvd例子,其中的最佳工作空間查詢和分配一個額外的步驟。MKL`dgesvd`與MKL`LAPACKE_dgesvd`的表現?

  1. 它是正確的假設,這一步是要弄清楚,如果輸入矩陣是COL_MAJORROW_MAJOR

  2. 假設一旦確定了最佳工作空間,'dgesvd'內部調用LAPACKE_dgesvd以及適當的佈局是否正確?

  3. 如果我已經知道矩陣佈局爲COL_MAJOR正在使用LAPACKE_dgesvd更好(更快/更便宜)比dgesvd

回答

0

這裏我們有兩種功能,這指的是兩個不同的接口:

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

對於細節see this

  1. 不,這是不正確的。正如您在第一次致電dgesvd時會注意到lwork的值設置爲-1,其中as documented here僅用於計算lwork的大小。所以如果你已經知道lwork的大小,你不需要再調用它兩次。輸入矩陣必須爲LAPACK_COL_MAJOR,dgesvd,因爲這是fortran的默認值。也無法計算矩陣是主要行還是列主要。
  2. 不,這是不正確的。 dgesvd是第一個實現的fortran接口。
  3. 這將取決於編譯器的優化。如果矩陣很小,它可能無關緊要。對於我來說,如果它的專欄主要我會使用fortran接口。

矩陣佈局信息see this。這裏是technical paper for C interface