jcuda / jcuda-main

Summarizes the main JCuda libraries
MIT License
99 stars 20 forks source link

GLIBC compatibility issue #51

Closed NotLoose closed 2 years ago

NotLoose commented 2 years ago

I am trying to run JCuda 11.6.1 using Maven in a Linux (Debian 11) environment. When trying to run a basic JCuda test I get an UnsatisfiedLinkError, with the attempt to load the library as a resource reporting:

java.lang.UnsatisfiedLinkError: /tmp/libJCudaRuntime-11.6.1-linux-x86_64.so: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /tmp/libJCudaRuntime-11.6.1-linux-x86_64.so)

Unfortunately this GLIBC version is proving very difficult to get, as each Linux OS comes with its pre-installed version, and you cannot simply update it (contrary to what is mentioned here, the quoted commands will only bring it to the latest version supported by the OS). Debian 11 comes with GLIBC 2.31, and as shown in the CUDA installation guide in the table of supported Linux versions, there are actually only two supported distributions that have GLIBC >= 2.34, namely Ubuntu 22.04 and Fedora 35. However Ubuntu 22.04 is also ruled out as this is only available in CUDA 11.7, which JCuda does not yet support!

I have attempted to build the JCuda native libraries myself, using the older GLIBC, but ran into several issues. I have also attempted to download GLIBC 2.34 separately, and point the libJCudaRuntime-11.6.1-linux-x86_64.so file to this version in a number of different ways (such as patching the file with patchelf), however none have been successful. At this stage I don't think it is possible to do this, and so the only option is to use a supported OS that comes with GLIBC >= 2.34, which is currently only Fedora 35.

I will attempt to use Fedora 35 for now, however as a more permanent solution I believe the library files included in the JARs uploaded to Maven should be built using a lower version of GLIBC, so that more of the currently supported Linux operating systems can be used. It may also be beneficial to document this minimum required GLIBC version somewhere. Thanks for your time :)

jcuda commented 2 years ago

This is essentially the same as https://github.com/jcuda/jcuda-main/issues/45 . The tl;dr of the discussion there: Yes, it would be good to build the binaries with the lowest GLIBC version that actually works.

It may also be beneficial to document this minimum required GLIBC version somewhere.

A disclaimer: I'm not deeply familiar with Linux, GLIBC and versioning policies. But I assume that CUDA itself has some requirements, and the requirements for JCuda should be these or lower.

This issue might be resolved by any contributor who is willing to build the linux binaries with an "older" GLIBC version. This could, for example, be you or @corepointer

The binaries for CUDA 11.7 are in the pipeline: https://github.com/jcuda/jcuda-main/issues/50

You might want to try and build them with an earlier version of GLIBC than the one that @blueberry is using.

You mentioned

I have attempted to build the JCuda native libraries myself, using the older GLIBC, but ran into several issues.

Which issues have this been? If these issues could be resolved, then the binaries with the lower GLIBC requirement could become part of the JCuda 11.7.0 release.

corepointer commented 2 years ago

@ACheekyLlama, you can try the binaries from this repo. Afaik Debian 11 uses glibc 2.31 and I compiled on Ubuntu 18 which is glibc 2.29 iirc.

blueberry commented 2 years ago

@jcuda Could you use binaries provided by @corepointer to release JCuda 11.6.1b with better backward compatibility?

behrica commented 2 years ago

We reached as well the conclusion, that JCuda 11.6 cannot be used on "most" systems due to it requiring GLIBC_2.34. Or is this a too strong statement ?

https://github.com/uncomplicate/neanderthal/pull/128

jcuda commented 2 years ago

I'll try to create a release "11.6.1b" with the (hopefully) more compatible binaries ASAP (Sunday, if possible)