1
在使用BLAS DGEMM矩陣乘法功能,我注意到,對於未初始化的結果矩陣C,我得到的NaN在resultwhen我叫它像這樣:DGEMM和數值常量作爲參數傳遞
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庫。
哦,我明白了。我傳錯了類型。是的,奇怪的是我沒有得到任何運行時錯誤。謝謝! – Salmonstrikes
如果您想獲得編譯時錯誤,請使用顯式接口。使用MKL或Lapack90模塊(更好)或手動定義接口塊(更糟糕)。 –
由於Fortran參數是通過地址傳遞的,所以不會有錯誤類型的參數會混淆它後面的所有參數。如果單精度參數恰好位於內存頁的最後4個字節之前,那麼運行時錯誤只會發生在未分配的內存區之前 - 這是相當罕見的事件。 –