Skip to content
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

gcc 9.3.0 migration #1160

Closed
9 tasks done
beckermr opened this issue Sep 23, 2020 · 14 comments
Closed
9 tasks done

gcc 9.3.0 migration #1160

beckermr opened this issue Sep 23, 2020 · 14 comments

Comments

@beckermr
Copy link
Member

beckermr commented Sep 23, 2020

to do

@jakirkham
Copy link
Member

cc @raydouglass @kkraus14 @mike-wendt (for vis)

@kkraus14
Copy link
Contributor

Thanks @jakirkham. We may need to handle pinning the compiler in the nvcc feedstock to prevent gcc-9 from being pulled when nvcc 10.2 or lower is used.

@jakirkham
Copy link
Member

So I saw PR ( conda-forge/openmpi-feedstock#67 ) recently, which is moving to GCC 9 for a package that also builds CUDA components. Admittedly OpenMPI's usage of CUDA is pretty minimal, but AIUI we probably shouldn't be doing that. Can you please confirm Keith?

If not, maybe we should discuss how we can exclude these packages from the GCC 9 migration to avoid creating packages that are broken. Not sure how we do that, but want to raise the concern.

@beckermr
Copy link
Member Author

beckermr commented Oct 9, 2020

We are building both gcc7 and gcc9 on linux-64. So we can mark the gcc9 ones broken and put in proper skips in the recipe. We could also zip the cuda keys with the other compiler keys, but this will be more complicated.

@kkraus14
Copy link
Contributor

kkraus14 commented Oct 9, 2020

So I saw PR ( conda-forge/openmpi-feedstock#67 ) recently, which is moving to GCC 9 for a package that also builds CUDA components. Admittedly OpenMPI's usage of CUDA is pretty minimal, but AIUI we probably shouldn't be doing that. Can you please confirm Keith?

The CUDA compiler, nvcc, depends on the host compiler, gcc / g++ in our case. CUDA 11.0 is the first version of CUDA that supports gcc <=9.x. CUDA 10.0 supports gcc <=7.x, CUDA 10.1 and 10.2 support gcc <=8.x (https://gist.github.com/ax3l/9489132).

Note that if a package is only using the CUDA host APIs but not actually compiling any CUDA code then using gcc 9.x should be safe regardless.

@beckermr
Copy link
Member Author

beckermr commented Oct 9, 2020

Note that if a package is only using the CUDA host APIs but not actually compiling any CUDA code then using gcc 9.x should be safe regardless.

Thanks @kkraus14! I think given this we should put the constraint directly in openmpi if it is needed. Our cuda universe is not so big right now that we can't handle this more selectively.

@beckermr
Copy link
Member Author

beckermr commented Oct 9, 2020

I made an issue here: conda-forge/openmpi-feedstock#68 - We can discuss more there.

@kkraus14
Copy link
Contributor

kkraus14 commented Oct 9, 2020

Thanks @kkraus14! I think given this we should put the constraint directly in openmpi if it is needed. Our cuda universe is not so big right now that we can't handle this more selectively.

I think this is an argument for us to split the nvcc_linux-64 package into multiple packages. Right now it's a package that handles the symlinking for both the compiler as well as the headers. If we had a separate package for just the headers that the nvcc_linux-64 package could depend on then libraries like arrow-cpp that use CUDA host APIs but don't actually have any CUDA code (.cu files) could depend on just the header package.

@jakirkham
Copy link
Member

Maybe this could be handled as part of a cudatoolkit package? 😉

@kkraus14
Copy link
Contributor

kkraus14 commented Oct 9, 2020

Maybe this could be handled as part of a cudatoolkit package? 😉

The headers, compiler, and driver library are not allowed to be redistributed per the CUDA EULA. Right now we actually don't symlink the headers in any way, we just symlink the compiler and the CUDA driver library and the compiler handles finding the necessary headers. For libraries like arrow-cpp, they've likely already special cased finding the necessary CUDA headers on the system and don't require our nvcc package regardless, but it's currently the way to get to a CUDA based docker image.

@jakirkham
Copy link
Member

jakirkham commented Oct 9, 2020

Right not saying we package the headers or the driver library. Just saying we set the appropriate environment variables as we do currently. Maybe with an activation script?

@jakirkham
Copy link
Member

So when an incompatible GCC and CUDA Version are used, would there be compiler errors or is it possible for it to silently succeed (even if what it produced is problematic)?

@jakirkham
Copy link
Member

FWIW here's a use case where we do need to match GNU compilers to CUDA compilers ( conda-forge/tomopy-feedstock#39 ). Tried proposing a way to combine them correctly ( conda-forge/tomopy-feedstock#39 (comment) ), but would not at all be surprised if that is wrong and needs changes. Though hopefully that gets us started thinking about how we should address this use case.

@beckermr beckermr unpinned this issue Nov 18, 2020
@beckermr
Copy link
Member Author

beckermr commented Dec 1, 2020

This one is done!

@beckermr beckermr closed this as completed Dec 1, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

3 participants