Repository navigation
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #1407 +/- ##
=======================================
Coverage 69.72% 69.72%
=======================================
Files 6204 6206 +2
Lines 497194 497229 +35
Branches 23430 23415 -15
=======================================
+ Hits 346652 346686 +34
Misses 150116 150116
- Partials 426 427 +1
... and 1 file with indirect coverage changes Continue to review full report in Codecov by Harness.
|
|
Hi @mohawk2, I like the idea a lot, since it would solve all the problems we currently have with error testing (e.g., it doesn't work with shared Windows libs or two-level namespaces) and make it easier for users to use a custom xerbla on all platforms. A few things to consider:
|
|
There is also a possibility of defining it as a weak symbol so tests can override the regular one. that can limit the surgery to only xerbla. overall I don't think xerbla is a good way to report errors back but it is what it is for now. |
Yes, that's how it's currently done in the CBLAS test suite. Won't work on Windows, though. Also, doing that in Fortran would depend on the compilers supporting it (nagfor doesn't without major hacks, ifx & flang maybe). |
|
I do use it on windows albeit on a C translation and Clang.
ah then nevermind. Sorry for the noise |
Ah, you're right; Clang and Intel do support it on Windows for static libraries. Did you try it with a shared library? Because last time I checked, that was the blocker. |
|
Thank you all for your quick responses! As noted in my edit of the PR description, I'm intending to add CBLAS and LAPACKE equivalents. I'll ponder the names, I hadn't properly checked prior art and will do so now. I'll ponder the idea of different BLAS and LAPACK handlers - is it really true that the current implementation essentially has two similarly-named symbols that are each getting overridden by the user-supplied one? If so, that seems horrible. I might need to make differently-named entry points for each that call each other, since the user expectation will be a full override for both. |
Yes, I think using the same REGISTER_XERBLA symbol name in BLAS and LAPACK could mean it only replaces one of the handlers (if we use separate shared libraries). My sugestion would be to have the separate symbols and then one symbol that does both and lives in LAPACK. Something like this: Edit: One issue would be that when we are compiling LAPACK with a vendor BLAS lib and they don't implement |
My pondering came up with a similar result, but not identical (see below). The above discussion included the point that prior art (
Edit 1: specify that
Yes, that sounds like a good approach. (Edit: now implemented, see below) |
|
My thinking so far on a CBLAS approach (The LAPACKE version will be mutatis mutandis, so will not be addressed separately). CBLAS has an actual
For the CBLAS versions of the 3 procedures plus
|
REGISTER_XERBLA - override the error-handler without linker stuffSET_XERBLA - override the error-handler without linker stuff
149c4ce to
2449269
Compare
@ACSimon33 I've had to adjust the plan a bit; a BLAS |
2449269 to
3d68c71
Compare
|
@mohawk2 Can you please merge the current master back into your branch? We now fixed numerical issues and errors on all platforms that are tested in CI, and the CI jobs are now configured to fail if new errors occur. |
Working on this now, thank you for highlighting this. |
34e2172 to
148a3b6
Compare
|
@ACSimon33 @langou I've just rebased this to latest |
|
@ACSimon33 @langou Sorry about this! I'm pretty sure the Makefile jobs in CI will fail, because I missed updating the Makefiles to add the 2 new files due to inept |
|
@ACSimon33 @langou Pushed. Works locally (and confirmed that without the new commit, it broke). |
|
Flang is failing with: Some preliminary searching indicates this is because it doesn't like the combination of procedure pointers, and @ACSimon33 How do you want to proceed? If you can't accept breaking Edit: also codecov is saying it's failing because this part doesn't get exercised: if (.not. associated(active_callback)) then
print *, 'Error: LAPACK_XERBLA called but no callback registered'
stop
end ifI had that in there because I thought it was better than a |
|
@ACSimon33 (sorry for all the highlights) I have opened #1411 further to my last comment, and will get started on instead using |
|
@mohawk2 Try removing the |
e43fd7e to
6517f9f
Compare
|
@ACSimon33
Quick analysis: it's only on Windows, and only with Edit: false alarm; it's only that those are having the usual two-level problem, and BLAS's |
6517f9f to
ca988ec
Compare
|
@mohawk2 Do we maybe want to finish the Fortran side, i.e. BLAS and LAPACK, first and tackle the CBLAS, LAPACKE side in a follow-up PR? Smaller PRs are better to review and defend. If that's not possible we can also put it in one, but I'd prefer two. |
@ACSimon33 I was keen for that a little while ago, but my feeling now is a) I'm pretty close to finishing CBLAS (I think I know how to fix the Windows side), and the LAPACKE side looks clear to me; b) the CBLAS/LAPACKE part have influenced the design and implementation of the Fortran side too. An example of that last point, which I'd like your thoughts on: I now think attempting a global To outline the approach that I think will work for Windows: I'm going to try just conditionally (on Windows, and if it works also on macOS) not supplying, in CBLAS, the Fortran-compatible If that works, then I will add a CI job for macOS that doesn't add |
439946f to
adffa4c
Compare
|
The errors being seen now (e.g. in https://github.com/Reference-LAPACK/lapack/actions/runs/39668775329) are of the nature: An attempt at isolating this, using the cd $GITHUB_WORKSPACE
ctest --parallel --build-dir build/ -R ^LAPACK-xeigtstz_se2_in --verbose
gdb build/bin/xeigtstz.exe
break ZHEEVD_2STAGE
run < TESTING/se2.inThe error occurs on the 9th entry to the routine, with stack-trace: The test calls LWTRD = ILAENV2STAGE( 4, 'ZHETRD_2STAGE', JOBZ='N',
$ N=2, KD=16, IB=16, -1 )The fix I'm going with is to set the |
1a8db45 to
b999578
Compare
b999578 to
d18ed97
Compare
d18ed97 to
9aab473
Compare
Set the `lwork` value much higher when testing invalid `lrwork` to avoid false negatives; higher values can happen on Windows shared build.
a748cd7 to
43d0daa
Compare
Description
Currently, to override BLAS/LAPACK's handling of errors involves defining a
xerbla_(or sometimesxerbla) symbol in your library/executable. This may not work in 2-level namespace environments like macOS.Instead, this PR allows you to call
SET_XERBLA(Fortran) with a replacement handler, orNULL()to reset to default. There is also anGET_(library)_XERBLA. This does not address that the new handler must be a Fortran-compatible routine.There are CBLAS (
cblas_set_xerbla) and LAPACKE (LAPACKE_set_xerbla) handlers on the way, but I'm putting this up for review as I believe it already adds value.I have marked below that the documentation has been updated, because I added a paragraph in the doc-comments of
xerbla.f. If more is needed, please let me know.EDIT: updated function names.
Checklist