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)

然后乘法工作正常。有没有人知道为什么声明论点有效?

请注意,我使用的是 Intel Fortran 编译器及其 MKL 库。

4

1 回答 1

4

alpha如果您将andbeta作为双精度数值常量(例如, )传递,它将起作用1.d0,但您传递的是单精度常量,并且 Fortran 77 无法知道 dgemm 的参数列表并将实数提升为双精度。(如果您使用 MKL 的 Fortran 95 接口,它可能适用于单精度常量,但我不确定)。

因为您只传递了 4 字节参数的指针,而库子例程正在查找 8 字节的值,所以其余的计算变得一团糟。

于 2012-10-14T01:04:57.387 回答