Closed
Description
I've reproduced the issue in Julia and Fortran, both linked to a fresh source build of the latest master.
program symvtest
implicit none
integer, parameter :: n = 20, p = 12
real, dimension(n, p) :: Xb
real, dimension(p, p) :: A
real, dimension(p) :: x, y, ys
call random_number(Xb)
call random_number(x)
A = matmul( transpose(Xb), Xb )
y = matmul( A, x )
ys = 0.0
call ssymv('U', p, 1.0, A, p, x, 1, 0.0, ys, 1)
print *, 'Correct:', y
print *, 'ssymv:', ys
end program symvtest
$ gfortran-7.2 symvtest.f08 -o symvt2 -pthread /opt/OpenBLAS/lib/libopenblas.a
chris@elrod:~/Documents/programming/fortran$ ./symvt2
Correct: 40.6064873 43.2426643 37.7620964 37.9279366 37.8264160 41.4897804 40.9279518 31.3577194 28.1611786 36.6945801 34.9506340 36.2780457
ssymv: 57.7142792 59.8994789 52.9540024 54.8316040 52.9050522 57.4723549 58.2451744 43.7106018 28.1611786 36.6945801 34.9506340 36.2780457
In Julia:
julia> A = randn(10,20) |> X -> X * X';
julia> x = rand(10);
julia> (A * x)' #calls gemv
1×10 RowVector{Float64,Array{Float64,1}}:
11.538 7.90415 -1.03592 -3.84546 15.5033 3.37954 7.7948 4.26935 6.29426 5.57295
julia> Base.LinAlg.BLAS.symv('U', A, x)'
1×10 RowVector{Float64,Array{Float64,1}}:
21.5629 15.7696 -4.14023 -10.6005 28.2271 5.50057 17.9761 6.60855 6.29426 5.57295
EDIT:
When building OpenBLAS it runs tests; excerpt:
OPENBLAS_NUM_THREADS=2 ./xdcblat3 < din3
TESTS OF THE DOUBLE PRECISION LEVEL 3 BLAS
THE FOLLOWING PARAMETER VALUES WILL BE USED:
FOR N 1 2 3 5 7 9
FOR ALPHA 0.0 1.0 0.7
FOR BETA 0.0 1.0 1.3
ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LESS THAN 16.00
COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED
RELATIVE MACHINE PRECISION IS TAKEN TO BE 2.2D-16
cblas_dgemm PASSED THE TESTS OF ERROR-EXITS
cblas_sgbmv PASSED THE ROW-MAJOR COMPUTATIONAL TESTS ( 17284 CALLS)
cblas_ssymv PASSED THE TESTS OF ERROR-EXITS
cblas_ssymv PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS ( 1729 CALLS)
cblas_dgemm PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS ( 17496 CALLS)
cblas_ssymv PASSED THE ROW-MAJOR COMPUTATIONAL TESTS ( 1729 CALLS)
cblas_ssbmv PASSED THE TESTS OF ERROR-EXITS
cblas_ssbmv PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS ( 6913 CALLS)
cblas_dgemm PASSED THE ROW-MAJOR COMPUTATIONAL TESTS ( 17496 CALLS)
cblas_dsymm PASSED THE TESTS OF ERROR-EXITS
I assume the tests check that the answers are valid?
A little unsure what to make of this.
As a workaround I can copy values from the upper triangle into the lower triangle and use gemm, but I'd rather fix the problem.
Any idea what's going on?
Any suggestions of what I can look at, tests to run, etc?
Metadata
Metadata
Assignees
Labels
No labels