Skip to content

MPI: Experimental platform tag#4073

Closed
vchuravy wants to merge 5 commits into
masterfrom
vc/augmented_platform
Closed

MPI: Experimental platform tag#4073
vchuravy wants to merge 5 commits into
masterfrom
vc/augmented_platform

Conversation

@vchuravy

Copy link
Copy Markdown
Member

Comment thread L/LAMMPS/build_tarballs.jl Outdated
Comment thread L/LAMMPS/build_tarballs.jl Outdated
Comment thread L/LAMMPS/build_tarballs.jl Outdated
Dependency(PackageSpec(name="CompilerSupportLibraries_jll")),
Dependency(PackageSpec(name="MPItrampoline_jll"), compat="2"),
Dependency(PackageSpec(name="MicrosoftMPI_jll"))
# Dependency(PackageSpec(name="MPIPlatformTag")),

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@staticfloat @simonbyrne

I am debating if this should be MPI.jl or a tiny single preference package.

@vchuravy vchuravy force-pushed the vc/augmented_platform branch from 62d9519 to c26ee64 Compare December 18, 2021 17:57
@giordano giordano mentioned this pull request Dec 19, 2021
@simonbyrne

Copy link
Copy Markdown
Contributor

How does this work if you have another _jll which depends on LAMMPS_jll: would it automatically augment the platform?

@staticfloat

Copy link
Copy Markdown
Member

Each JLL chooses its own artifacts in isolation from eachother; if LibFoo_jll depends on LAMMPS_jll, if LAMMPS_jll chooses one based on a particular MPI backend, then if LibFoo_jll's own artifacts are similarly sharded across MPI backends, it must perform the same steps as LAMMPS_jll does.

This is intentional; we don't want artifact selection to be involved in resolution. If you need to solve for resolution constraints, you should have multiple packages. You should only use artifact tags when you have identical (or nearly so) functionality that can be swapped out without changing any other package's compatibility bounds.

As an analogy, If I instantiate a bunch of packages that have multiple artifacts that are split into micro-architectural optimized builds (e.g. x86_64, sse2, avx, avx2), then instantiating with a different micro-architecture (because I've upgraded the CPU in my machine, for example) shouldn't cause any dependent packages to suddenly become non-functional. This is the intended design of the artifact selection mechanism, partly because there is no graceful failure case. There's no way for Foo_jll to say "I'm sorry, I can't select an artifact properly because Bar_jll selected something incompatible with me".

There is a gray area here where you're coordinating the choice of backend/dialect across multiple JLLs. I think this is still okay, because we are essentially asserting that all MPI-supporting JLLs must obey a centralized MPI backend setting. This should work flawlessly, with the exception that if we have JLLs that hasn't been updated to pay attention to MPI tags, we may get a mixture. This may be fixable through intelligent compat bounds, to ensure that we only have MPI-tag-aware JLLs installed together.

@vchuravy

vchuravy commented Mar 3, 2022

Copy link
Copy Markdown
Member Author

Replaced by #4540

@vchuravy vchuravy deleted the vc/augmented_platform branch March 3, 2022 22:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants