BLAS daxpy 不加任何东西,y不变
BLAS daxpy does not add anything, y is unchanged
我遇到了以下问题:
我正在尝试使用 BLAS 子例程,但是在使用它们时,它们似乎不是 working/overwriting 解决方案,例如,如果我尝试添加两个向量 a
和b
和 运行 具有
的函数
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)
我遇到了以下问题:
我正在尝试使用 BLAS 子例程,但是在使用它们时,它们似乎不是 working/overwriting 解决方案,例如,如果我尝试添加两个向量 a
和b
和 运行 具有
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)