51

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) より大きいことはいつ許可されますか?

4

3 に答える 3

44

BLAS の LDA パラメーターは、線形メモリに配置されるため、実質的に行列のストライドです。操作対象の行列の主要な次元よりも大きい LDA 値を持つことは完全に有効です。より大きな LDA 値を使用することが有用または必要な典型的なケースは、より大きな密な行列からサブ行列を操作している場合、およびハードウェアまたはアルゴリズムがパフォーマンス上の利点を提供する場合で、最適なサイズの倍数を丸めるためにストレージがパディングされる場合です (キャッシュ ラインまたは GPU メモリ トランザクション サイズ、またはマルチプロセッサ実装でのロード バランスなど)。

于 2011-11-21T08:53:05.170 に答える
23

違いは、配列AおよびBの最初の次元の論理サイズと物理サイズの違いです。1つ目は使用している配列のサイズ、2つ目は宣言の値、つまり使用されているメモリの物理量です。Fortranは列の主要言語であるため、配列要素の位置を計算するには、最後のインデックスを除くすべてのインデックスの宣言されたサイズを知る必要があります。「A(LDA、 )、B(LDB、)、C(LDC、*)」のFORTRAN77スタイル宣言に注意してください。宣言された配列のサイズは、使用している部分よりも大きくなる可能性があります。もちろん、小さくすることはできません。

于 2011-11-21T02:50:01.993 に答える