BLAS daxpy 不加任何东西,y不变

BLAS daxpy does not add anything, y is unchanged

我遇到了以下问题:

我正在尝试使用 BLAS 子例程,但是在使用它们时,它们似乎不是 working/overwriting 解决方案,例如,如果我尝试添加两个向量 ab 和 运行 具有

的函数
program test
real(kind=8), dimension(:), allocatable :: a,b
integer ::n
print*, "input n, a, b"
read*, n
allocate(a(n), b(n))
read*, a, b
print*, a
print*, b
call daxpy(n,1,a,1,b,1)
print*, a
print*, b
deallocate(a, b)
end program test

然后 b 对于非零值两次都相同。

我假设子例程计算 a+b 然后将其覆盖为 b

我试过只使用 a+b 而不调用任何 BLAS,效果很好。

我认为您需要将双精度文字(或变量)传递给 "alpha"(对于 daxpy):

program test
    implicit none
    integer, parameter :: dp = kind(0.0d0)  ! for blas
    real(dp), dimension(:), allocatable :: a, b
    integer :: n
    n = 2
    allocate( a(n), b(n) )
    a = 1.0d0   ! or 1.0_dp
    b = 2.0d0
    print *, "b = ", b

      call daxpy( n, 1,     a, 1, b, 1 )   ! case (1)
    ! call daxpy( n, 1.0d0, a, 1, b, 1 )   ! case (2)
                    !^^^^
    print *, "b = ", b
    deallocate( a, b )
end program

Case (1):  // the second "b" usually gives more garbage data like 1.06E+160
 b =    2.0000000000000000        2.0000000000000000     
 b =    2.0000000000000000        2.0000000000000000 

Case (2):
 b =    2.0000000000000000        2.0000000000000000
 b =    3.0000000000000000        3.0000000000000000

如果我们为 BLAS 包含一些接口文件(例如,mkl_blas.fi 从 MKL 包含目录获得)

program test
    implicit none
    include 'mkl_blas.fi'
    ...

情况 (1) 给出了一个带有(更多)显式消息的错误:

test.f90:13:38:

     call daxpy( n, 1,     a, 1, b, 1 )
                                      1
Error: Type mismatch in argument 'da' at (1); passed INTEGER(4) to REAL(8)