-
Notifications
You must be signed in to change notification settings - Fork 36
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
Update scr and axl spack packages to handle BBAPI #288
Comments
Was thinking a little about some of this earlier.
At first glance, I don't know that we do need this currently. It looks like axl will try to find the bb software automatically, but there's not a cmake option for this as it does it independently of the Which begs the question, does From what I can tell (correct me if I'm wrong @tonyhutter), if BBAPI is found, it is preferred, but if it fails or is unsupported, it will error rather than fall back to pthreads unless the user has set So the axl spackage might need a variant to enable/disable that fallback at least (e.g., Which I suppose comes back to your original question; do we want the user to be able to opt out of using BBAPI, even when it is available (which they currently cannot, I believe). Or do we want to always require them to use it when it's automatically found, and optionally fallback to pthreads if it's found but unsupported?
My biased opinion on this is to set the variants in the scr package and pass them through to dependencies. I think this retains one of the advantages of Spack, which is to only worry about the package you are installing and not so much on what's going on underneath. If that makes sense, cool, if not, here's the explosion of thoughts my mind went though (feel free to skip 😆) My mind sees this as a bottom-up vs top-down approach, for example: Say we've added the If I'm installing SCR without Spack I have to learn that SCR's dependencies exist and then install them all first. If I want to enable the BBAPI fallback (or any option), I also need to remember to pass the cmake option to AXL when building. I then tell SCR where all these installs of its dependencies are when building. Even with scr-top or the bootstrap script (which appears to also be out-of-date) doing this for me, I still have to know the option is in AXL and edit scr-top/bootstrap and add the option to the AXL configure beforehand. However, with Spack we can still hide this dependency management from the user and still make SCR look like one entity. If I'm installing SCR with Spack, I'd think, "how do I want SCR to behave? I want to (insert behavior) fall back to pthreads if BBAPI isn't supported, okay, tell Spack to install SCR with that support."
which does make the spackage more complicated as we'd then need something like
vs "How do I want SCR to behave? I want to fall back to pthreads if BBAPI isn't supported, okay tell Spack to install SCR with that support. Oh, SCR doesn't handle that, AXL does. What is AXL? Oh, it's a dependency of SCR. Okay, to get SCR to behave how I want, I need to tell a dependency of SCR I didn't know about till now how to behave."
Now we're back to the level of knowledge the end user needs about our dependencies when installing with cmake. This could become more complicated as additional options are ever needed, especially for multiple dependencies. Assuming the
vs
I may be way off track here. Feel free to point out any assumptions I've made or things I've missed. |
@CamStan I'm not sure what xfer type SCR uses by default. Overall, the user should be specifying the xfer type for the storage descriptor in scr.conf. That is, use
If a user specifies |
@CamStan , yes, I agree with your opinion on taking the top-down approach. Your example is awesome :-) Nice find on the kvtree file_lock item. Let's add that as an item to the v3.0 list. If you find any other unsupported or missing variants, let's consider fixing or dropping each of them. One thing that may be useful as an SCR variant would be to enable the user to specify SCR's default AXL transfer method. It defaults to SYNC, but maybe the user would want to set that at build time. https://github.com/LLNL/scr/blob/develop/src/scr_conf.h#L205-L208 That's not critical, since people can set it at runtime in various ways. We could list that as a "nice to have". |
Skimming the scr package, I see it defaults to write the scr config file to Since there is no prefix, does that get placed within the spack install directory? Oh, this line suggests that it does: v3.0 item: Let's update readthedocs to describe how someone finds that file after a spack install so they can edit it. |
Created an item. Can add more variants to it as we find them.
Might be able to ask this question about several runtime options (e.g., redundancy scheme, etc). Agreed these could be added to a "nice to have," but it might be simpler to only worry about variants for build options for v3.0. Granted, the longer I stare at this the more confused I get about which options are build-time only. 😅
Yes, when the path provided is not an absolute path, I believe that is correct. For reference when updating readthedocs, the spack install directory can be retrieved with |
Thanks, @CamStan . I should have browsed through the file a bit more. Cool. That's some slick code. Nice. |
@adammoody, @gonsie, I've been jumping back and forth on this, but have come to the conclusion that we should simply pull the variant('async_api', default='daemon',
description="Set of async transfer APIs to enable",
values=['cray_dw', 'ibm_bbapi', 'daemon', 'none'], multi=True,
validator=async_api_validator)
# not-yet implemented functionality
conflicts('async_api=cray_dw', when='@0.1.0')
conflicts('async_api=ibm_bbapi', when='@0.1.0') However, variant('async_api', default='none',
description="Set of async transfer APIs to enable",
values=['cray_dw', 'none'], multi=True,
validator=async_api_validator)
# not-yet implemented functionality
conflicts('async_api=cray_dw', when='@0.1.0') I think it was also mentioned that our datawarp support likely doesn't work (is that correct?) as we haven't tested with it lately. We could add conflicts('async_api=intel_cppr', when='@0.1.0:') It was also discussed on our latest call that, as we do ensure support for these options, we will likely automate them as well (like with BBAPI) and so they'd get removed from this option anyway. Lastly, since we also mentioned on our last call that we should deprecate the older AXL versions, we don't need to ensure this variant still exists/works to support them. So we can simplify the package to only what is needed/works for the newest release or ones to come. Any thoughts or objections? |
Yes, I agree. It looks like we could just drop the async_api variant from AXL. If I had to bet on it, my guess is that our AXL Datawarp code does not work. I think it was ported over from SCR to AXL but without testing, since we don't have a machine where we can easily test it. It's possible that ECP users at LANL or NERSC might want it, and I'm not clear on Datawarp status on upcoming systems. Let's create an issue for AXL to either refresh Datawarp or decide to drop it. If we decide to keep it, we can auto-detect it during the AXL build like BBAPI. For CPPR, we can check whether that project is still active. We could check with Argonne or Intel. |
Addressed in spack/spack#23044 and spack/spack#23378 |
The scr package has a variant for the async mode, like
async_api=IBM_BBAPI
, e.g.,:The scr package turns on some cmake flags that then cause the build to fail. Otherwise, I don't think SCR does anything with that flag since the code has been moved to AXL.
The text was updated successfully, but these errors were encountered: