2017-06-05 12 views
0

dgesvdレイアウトLAPACK_COL_MAJORLAPACKE_dgesvdと思われるが、dgesvdLAPACKE_dgesvdの例を見て、それは、最適なワークスペースを照会し、割り当てられdgesvd例の余分なステップがあると思われます。MKL `dgesvd`とMKL` LAPACKE_dgesvd`のパフォーマンス?

  1. は、このステップは、入力行列がCOL_MAJORROW_MAJORであるかどうかを把握することであると仮定することは正しいですか?

  2. 最適なワークスペースが見つかると、 'dgesvd'は内部的に適切なレイアウトでLAPACKE_dgesvdを呼び出します。

  3. すでにCOL_MAJORであることがわかっている場合は、LAPACKE_dgesvdを使用していますか?dgesvdよりも優れていますか?

答えて

0

我々は2つの異なるインターフェイスを参照してくださいここでは二つの機能があります。詳細についてsee this

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

を。

  1. いいえ正しくありません。 の最初の呼び出しで気付くように、lworkの値は、lworkのサイズの計算にのみ使用される-1に設定されます。as documented hereが使用されます。だからすでにlworkのサイズについて知っていれば、それを2回呼び出す必要はありません。 dgesvdの入力行列はLAPACK_COL_MAJORでなければなりません。これはfortranのデフォルトです。行列が行のメジャーかコラムのメジャーかを計算する方法もありません。
  2. いいえ、それは本当ではありません。 dgesvdは、最初に実装されたfortranインターフェイスです。
  3. これはコンパイラの最適化によって異なります。行列が小さい場合、おそらく問題ではありません。私にとっては、列の主要な私は、ポートランドのインターフェイスを使用する場合。

see thisです。ここにはtechnical paper for C interface

関連する問題