DGEMM和数值常数作为参数

时间:2012-10-13 23:58:53

标签: fortran lapack intel-fortran intel-mkl

在使用BLAS DGEMM矩阵乘法函数时,我注意到对于未初始化的结果矩阵C,我在结果中得到NaNs,就像我这样称呼它:

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库。

1 个答案:

答案 0 :(得分:4)

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

因为你只传递指针4字节参数而库子程序正在查找8字节值,所以计算的其余部分搞砸了。