Community
cancel
Showing results for 
Search instead for 
Did you mean: 
MarkG3
Beginner
45 Views

sysv_aa workspace query

I noticed a bug in MKL 2019-2021 with the sysv_aa workspace query. It seems to work in MKL 2017-2018. The sysv_aa workspace ought to be max( sytrf_aa, sytrs_aa ) workspaces. Instead, it returns a large negative, large positive, or zero number. Results below vary between precisions [s, d, c, z].

I ran these tests using the LAPACK++ wrappers (https://bitbucket.org/icl/lapackpp/) with the attached file substituting for lapackpp/src/sysv_aa.cc to debug it. I ran the test:

./tester --type s,d,c,z --dim 100 --uplo l,u sysv_aa

(These tests pass with Netlib LAPACK.)

Here are results I get for uplo=L and n=100. Same results happen with uplo=U. (I just grep the output for qry_work.)

# 2017-2018 works

intel-mkl/2017.txt:ssysv_aa( uplo=L, n=100 ) qry_work 6500.0
intel-mkl/2017.txt:ssytrf_aa( uplo=L, n=100 ) qry_work 6500.0
intel-mkl/2017.txt:ssytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-mkl/2017.txt:dsysv_aa( uplo=L, n=100 ) qry_work 6500.0
intel-mkl/2017.txt:dsytrf_aa( uplo=L, n=100 ) qry_work 6500.0
intel-mkl/2017.txt:dsytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-mkl/2017.txt:csysv_aa( uplo=L, n=100 ) qry_work 6500.0
intel-mkl/2017.txt:csytrf_aa( uplo=L, n=100 ) qry_work 6500.0
intel-mkl/2017.txt:csytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-mkl/2017.txt:zsysv_aa( uplo=L, n=100 ) qry_work 6500.0
intel-mkl/2017.txt:zsytrf_aa( uplo=L, n=100 ) qry_work 6500.0
intel-mkl/2017.txt:zsytrs_aa( uplo=L, n=100 ) qry_work 298.0

-----
intel-mkl/2018.txt:ssysv_aa( uplo=L, n=100 ) qry_work 2500.0
intel-mkl/2018.txt:ssytrf_aa( uplo=L, n=100 ) qry_work 2500.0
intel-mkl/2018.txt:ssytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-mkl/2018.txt:dsysv_aa( uplo=L, n=100 ) qry_work 2500.0
intel-mkl/2018.txt:dsytrf_aa( uplo=L, n=100 ) qry_work 2500.0
intel-mkl/2018.txt:dsytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-mkl/2018.txt:csysv_aa( uplo=L, n=100 ) qry_work 4900.0
intel-mkl/2018.txt:csytrf_aa( uplo=L, n=100 ) qry_work 4900.0
intel-mkl/2018.txt:csytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-mkl/2018.txt:zsysv_aa( uplo=L, n=100 ) qry_work 4900.0
intel-mkl/2018.txt:zsytrf_aa( uplo=L, n=100 ) qry_work 4900.0
intel-mkl/2018.txt:zsytrs_aa( uplo=L, n=100 ) qry_work 298.0

-----

# ERRORS start here
intel-mkl/2019.txt:ssysv_aa( uplo=L, n=100 ) qry_work -3135488000.0
intel-mkl/2019.txt:ssytrf_aa( uplo=L, n=100 ) qry_work 2500.0
intel-mkl/2019.txt:ssytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-mkl/2019.txt:dsysv_aa( uplo=L, n=100 ) qry_work 0.0
intel-mkl/2019.txt:dsytrf_aa( uplo=L, n=100 ) qry_work 2500.0
intel-mkl/2019.txt:dsytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-mkl/2019.txt:csysv_aa( uplo=L, n=100 ) qry_work 0.0
intel-mkl/2019.txt:csytrf_aa( uplo=L, n=100 ) qry_work 4900.0
intel-mkl/2019.txt:csytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-mkl/2019.txt:zsysv_aa( uplo=L, n=100 ) qry_work 0.0
intel-mkl/2019.txt:zsytrf_aa( uplo=L, n=100 ) qry_work 4900.0
intel-mkl/2019.txt:zsytrs_aa( uplo=L, n=100 ) qry_work 298.0

-----
intel-mkl/2020.txt:ssysv_aa( uplo=L, n=100 ) qry_work -3135488000.0
intel-mkl/2020.txt:ssytrf_aa( uplo=L, n=100 ) qry_work 2500.0
intel-mkl/2020.txt:ssytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-mkl/2020.txt:dsysv_aa( uplo=L, n=100 ) qry_work 0.0
intel-mkl/2020.txt:dsytrf_aa( uplo=L, n=100 ) qry_work 2500.0
intel-mkl/2020.txt:dsytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-mkl/2020.txt:csysv_aa( uplo=L, n=100 ) qry_work 1167663104.0
intel-mkl/2020.txt:csytrf_aa( uplo=L, n=100 ) qry_work 4900.0
intel-mkl/2020.txt:csytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-mkl/2020.txt:zsysv_aa( uplo=L, n=100 ) qry_work 4900.0
intel-mkl/2020.txt:zsytrf_aa( uplo=L, n=100 ) qry_work 4900.0
intel-mkl/2020.txt:zsytrs_aa( uplo=L, n=100 ) qry_work 298.0

-----
intel-oneapi-mkl/2021.txt:ssysv_aa( uplo=L, n=100 ) qry_work -3135488000.0
intel-oneapi-mkl/2021.txt:ssytrf_aa( uplo=L, n=100 ) qry_work 2500.0
intel-oneapi-mkl/2021.txt:ssytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-oneapi-mkl/2021.txt:dsysv_aa( uplo=L, n=100 ) qry_work 0.0
intel-oneapi-mkl/2021.txt:dsytrf_aa( uplo=L, n=100 ) qry_work 2500.0
intel-oneapi-mkl/2021.txt:dsytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-oneapi-mkl/2021.txt:csysv_aa( uplo=L, n=100 ) qry_work 1167663104.0
intel-oneapi-mkl/2021.txt:csytrf_aa( uplo=L, n=100 ) qry_work 4900.0
intel-oneapi-mkl/2021.txt:csytrs_aa( uplo=L, n=100 ) qry_work 298.0


intel-oneapi-mkl/2021.txt:zsysv_aa( uplo=L, n=100 ) qry_work 4900.0
intel-oneapi-mkl/2021.txt:zsytrf_aa( uplo=L, n=100 ) qry_work 4900.0
intel-oneapi-mkl/2021.txt:zsytrs_aa( uplo=L, n=100 ) qry_work 298.0

 

Note that this prevents the LAPACKE_*sysv_aa wrapper from working, since it queries the workspace and allocates that amount. Or in the case above where qry_work = 1167663104, it works but allocates an obnoxious amount of workspace.

 

Thanks for investigating.

Mark Gates, Innovative Computing Laboratory, UTK

0 Kudos
0 Replies
Reply