-
Notifications
You must be signed in to change notification settings - Fork 15
add BLAS test #268
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add BLAS test #268
Conversation
|
Sorry for the late checking @smoors . I tried running these tests today but I am getting empty job script files when I try to run. Now I am trying to figure out why. |
|
@satishskamath can you try again to see if your issue is fixed with the latest update? |
|
@smoors I'm not sure how you got this to work for EESSI - it shouldn't. I'm getting: And this is totally expected if you 'just' compile something on top of EESSI. The reason is that we don't set Everything in EESSI is With that, in the staging dir, I do: Tada, it now finds Now, I don't know how to properly implement this in a generalized test (it's clear that this is our first compiled test - we're hitting all kinds of stuff). Should we start defining programming environments, that then load this? Should we make some clever code that loads this module if EESSI is being used? If so, how do we determine the correct version: your FlexiBLAS is at GCC level, you need knowledge on the toolchain hierarchy to know which Honestly, I'm not sure how to resolve this, we need to think about it... I guess one option would be to just pass the right arguments for |
|
On the upside, on our local module stack, this works out of the box: That first one ( |
Sorry for the confusion, it does run. The earlier error happened because I ran from a ReFrame from the 2024 stack and we have a hierarchical setup here. |
yes, this is done to run the single-threaded test on a node with no other jobs running on it. a similar thing was done for the OSU test. |
eessi/testsuite/eessi_mixin.py
Outdated
| measure_memory_usage = variable(bool, value=False) | ||
| exact_memory = variable(bool, value=False) | ||
| user_executable_opts = variable(str, value='') | ||
| thread_binding = variable(str, value='None') # takes priority over compact_thread_binding |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I might be missing something, but why do we need both this and compact_thread_binding?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i was under the impression that you can't override the thread_binding variable in a test class, but that's actually not true. you can override it, but not in a base class.
fixed in 8a948e4
eessi/testsuite/eessi_mixin.py
Outdated
| hooks.add_buildenv_module(self) | ||
|
|
||
| thread_binding = self.thread_binding.lower() | ||
| if thread_binding == 'true' or (thread_binding == 'none' and self.compact_thread_binding): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If thread_binding is a variable, what if it's not True or False, but someone set it to compact? Or made a type Ture?. I think we should catch all cases we know (true / compact => do compact binding, false => do nothing, anything else => do nothing and warn the user that an invalid value was set for thread_binding).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i opted for a hard error in case an invalid value was set
fixed in 8a948e4
casparvl
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I ran with reframe -c eessi/testsuite/tests/libs/blas/ --run -t '1_8_node|1_core', everything worked perfectly fine.
I left some minor comments / questions.
|
@casparvl thanks for the great comments, should all be addressed now. |
casparvl
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rerunning one final time, but looks good to me. I can already confirm the Metalwalls warning was resolved.
|
As a final note: everything worked. I do still see some weird differences in the performance of this test for the 2023a modules for some BLAS routines. E.g. Note the poor performance of I'd assume the issue is not the test here. @smoors what do you think? Or does this ring a bell and do you think it could be somewhere in the test setup? Also: do you see the same behavior on your system? (note: I've used the EESSI software stack for these tests). If you also agree @smoors : I think it's worth checking out, but it's not worth blocking this PR over. Maybe we just copy the above to an issue and take it from there... |
|
i see this too on 2023a using our local clusters. 2024a looks fine though. checking the output files, the problem arises for larger matrices: the it looks indeed not a problem with the test but with this version. |
this adds the BLAS test included in the BLIS sources, using a modified/simplified Makefile so it works with FlexiBLAS.
supported BLAS libs: OpenBLAS, BLIS, AOCL-BLAS, imkl
ready for testing and review.
notes:
executables are compiled in every run-only test job, no separate compile-only test jobs:
the downside is that the executables have to be built for every test case, while with a compile-only test job this has to be done only once for each architecture. i'm fine with adding a compile-only job if you prefer.
no programming environments (environs) are used:
for BLIS and AOCL-BLAS, no loop-specific
BLIS_**_NTenvironment variables are set, only the genericOMP_NUM_THREADS.update 2025-08-16:
split_module(). if needed we can always add exceptions, like is already done forintel-compilers.8_corescale to accomodate nodes with high cpu counts.select_matching_modules, which selects from a list of modules the ones that match a reference module (i.e. their toolchains are compatible). this function requires the availability of EasyBuild (the test will be skipped if it's not available).