1

BLAS DGEMM行列乗算関数を使用しているときに、初期化されていない結果行列 C を次のように呼び出すと、結果に NaN が含まれることに気付きました。

DGEMM('N', 'N', M, N, K, 1.0, A, LDA, B, LDB, 0.0, C, LDC)

ただし、事前に ALPHA と BETA を宣言すると、次のようになります。

REAL*8 ALPHA, BETA
PARAMETER (ALPHA=1.0)
PARAMETER (BETA=0.0)

DGEMM('N', 'N', M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)

その後、乗算は正常に機能します。引数の宣言が機能する理由について、誰か考えがありますか?

インテル Fortran コンパイラーとその MKL ライブラリーを使用していることに注意してください。

4

1 に答える 1

4

倍精度の数値定数(たとえば)として渡した場合は機能しますがalpha、単精度の定数を渡したため、Fortran 77にはdgemmの引数リストを認識し、実数を倍精度に昇格させる方法がありません。(MKLのFortran 95インターフェースを使用した場合は、単精度定数で動作する可能性がありますが、よくわかりません)。 beta1.d0

ポインタを渡すのは4バイトの引数のみであり、ライブラリサブルーチンは8バイトの値を検索しているため、残りの計算は混乱します。

于 2012-10-14T01:04:57.387 に答える