Skip to content

symv broken on development version for ZEN #1388

Closed
@chriselrod

Description

@chriselrod

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions