On 02/10/2014 10:18, Gianfranco Costamagna wrote: > Hi Vincent and Andrei (thanks for your help in making BTS notify us the bug). > > The graphic stuff is something that worries me a lot, unfortunately the delta > between debian/ubuntu, and the lack of a proper dev package to link against > is something that makes me having *many* difficulties in fixing the problem. > (honestly my focus now is for the upcoming freeze, and I almost gave up on > this because of the lack of time to look and ask for proper help) > > Unfortunately the shlibs stuff I don't think can work, since upstream doesn't > link the gpu libraries, but uses dlopen to handle them.
Argh :-( > grep dlopen client -R > ./gpu_nvidia.cpp: handle = dlopen("libnvidia-ml.so", RTLD_NOW); > ./gpu_nvidia.cpp: cudalib = dlopen("libcuda.so", RTLD_NOW); These two are NVidia specific. So, you should probably add nvidia packages explicitely to your Depends. > ./gpu_amd.cpp: callib = dlopen("libaticalrt.so", RTLD_NOW); Same but for AMD. > ./gpu_opencl.cpp: opencl_lib = dlopen("libOpenCL.so", RTLD_NOW); Here, the program request one implementation of OpenCL. We can expect that the program conforms itself to the OpenCL standard, so any implementation should work. As this is a usual situation in OpenCL world, we (in Debian) have been developing a set of virtual packages do deal with this (and avoid a hard-coded list of alternative implementations). For this part, you should depend on libopencl1 and, depending on the used OpenCL functions, libopencl-1.1-1, libopencl-1.2-1 or libopencl-2.0-1. Looking quickly at the sources, they seem ok to use NVidia OpenCL. So libopencl-1.1-1 should be enough (NVidia does not implement 1.2 and 2.0). It seems that they use dlopen so that they have only one client that can be use on any system, whatever is installed between CUDA, catalyst and/or OpenCL. Another question is : do you want to use alternative depends and/or various independent Recommends ? Is I correctly read the code, the client can work either - with AMD software (libfglrx-virtual provided by libfglrx and libfglrx-legacy) and/or - with NVidia cuda (libcuda1 + libnvidia-ml1 for card detection) and/or - with OpenCL 1.1 (libopencl-1.1-1) with ICD (opencl-icd) from AMD (amd-opencl-icd or amd-opencl-icd-legacy), NVidia (nvidia-opencl-icd) Intel (not yet packaged) and perhaps any other implementation (not sure) The fact is that there is no good default: it really depends on the hardware you have and it would be a pitty to *force* to install all packages. One proposal (for Debian) : Depends: libopencl-1.1-1 | libfglrx-virtual | libcuda1 => you can reorder depending on what you want to be "installed by default", but, as said before, it depends on your hardware Recommends: libopencl-1.1-1, opencl-icd, libfglrx-virtual, libcuda1, libnvidia-ml1 By default, most things are installed. But an admin can avoid to install it if he knows the hardware is not here. What do you think ? Regards, Vincent > so this is why we added the libraries manually in the control file. > > This dlopen stuff I think is also preventing gpu to be found when the service > starts before the graphic module, leading to a needs of a service reboot to > correctly find the gpu stuff. (cfr lp: #933354 #1177433 #1077316) > > I'm open to help, I don't really know how to properly handle the dlopen stuff > > on debian: > > apt-file search libnvidia-ml.so > libnvidia-ml1: /usr/lib/x86_64-linux-gnu/libnvidia-ml.so > libnvidia-ml1: /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 > libnvidia-ml1: /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.340.32 > pcp-testsuite: /var/lib/pcp/testsuite/src/libnvidia-ml.so > > apt-file search libcuda.so > libcuda1: /usr/lib/x86_64-linux-gnu/libcuda.so > libcuda1: /usr/lib/x86_64-linux-gnu/libcuda.so.1 > libcuda1: /usr/lib/x86_64-linux-gnu/libcuda.so.340.32 > > apt-file search libaticalrt.so > libfglrx: /usr/lib/x86_64-linux-gnu/libaticalrt.so > libfglrx-legacy: /usr/lib/x86_64-linux-gnu/libaticalrt.so > > apt-file search libOpenCL.so > amd-libopencl1: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 > amd-opencl-dev: /usr/lib/x86_64-linux-gnu/libOpenCL.so > nvidia-libopencl1: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 > nvidia-libopencl1: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0.0 > nvidia-opencl-dev: /usr/lib/x86_64-linux-gnu/libOpenCL.so > ocl-icd-libopencl1: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 > ocl-icd-libopencl1: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0.0 > ocl-icd-libopencl1: /usr/share/man/man7/libOpenCL.so.7.gz > ocl-icd-opencl-dev: /usr/lib/x86_64-linux-gnu/libOpenCL.so > > on ubuntu: > apt-file search libnvidia-ml.so > nvidia-304: /usr/lib/nvidia-304/libnvidia-ml.so > nvidia-304: /usr/lib/nvidia-304/libnvidia-ml.so.1 > nvidia-304: /usr/lib/nvidia-304/libnvidia-ml.so.304.117 > nvidia-304: /usr/lib32/nvidia-304/libnvidia-ml.so > nvidia-304: /usr/lib32/nvidia-304/libnvidia-ml.so.1 > nvidia-304: /usr/lib32/nvidia-304/libnvidia-ml.so.304.117 > nvidia-304-updates: /usr/lib/nvidia-304-updates/libnvidia-ml.so > nvidia-304-updates: /usr/lib/nvidia-304-updates/libnvidia-ml.so.1 > nvidia-304-updates: /usr/lib/nvidia-304-updates/libnvidia-ml.so.304.117 > nvidia-304-updates: /usr/lib32/nvidia-304-updates/libnvidia-ml.so > nvidia-304-updates: /usr/lib32/nvidia-304-updates/libnvidia-ml.so.1 > nvidia-304-updates: /usr/lib32/nvidia-304-updates/libnvidia-ml.so.304.117 > nvidia-331: /usr/lib/nvidia-331/libnvidia-ml.so > nvidia-331: /usr/lib/nvidia-331/libnvidia-ml.so.1 > nvidia-331: /usr/lib/nvidia-331/libnvidia-ml.so.331.38 > nvidia-331: /usr/lib32/nvidia-331/libnvidia-ml.so > nvidia-331: /usr/lib32/nvidia-331/libnvidia-ml.so.1 > nvidia-331: /usr/lib32/nvidia-331/libnvidia-ml.so.331.38 > nvidia-331-updates: /usr/lib/nvidia-331-updates/libnvidia-ml.so > nvidia-331-updates: /usr/lib/nvidia-331-updates/libnvidia-ml.so.1 > nvidia-331-updates: /usr/lib/nvidia-331-updates/libnvidia-ml.so.331.38 > nvidia-331-updates: /usr/lib32/nvidia-331-updates/libnvidia-ml.so > nvidia-331-updates: /usr/lib32/nvidia-331-updates/libnvidia-ml.so.1 > nvidia-331-updates: /usr/lib32/nvidia-331-updates/libnvidia-ml.so.331.38 > > apt-file search libcuda.so > libcuda1-304: /usr/lib/i386-linux-gnu/libcuda.so > libcuda1-304: /usr/lib/i386-linux-gnu/libcuda.so.1 > libcuda1-304: /usr/lib/i386-linux-gnu/libcuda.so.304.117 > libcuda1-304: /usr/lib/x86_64-linux-gnu/libcuda.so > libcuda1-304: /usr/lib/x86_64-linux-gnu/libcuda.so.1 > libcuda1-304: /usr/lib/x86_64-linux-gnu/libcuda.so.304.117 > libcuda1-304-updates: /usr/lib/i386-linux-gnu/libcuda.so > libcuda1-304-updates: /usr/lib/i386-linux-gnu/libcuda.so.1 > libcuda1-304-updates: /usr/lib/i386-linux-gnu/libcuda.so.304.117 > libcuda1-304-updates: /usr/lib/x86_64-linux-gnu/libcuda.so > libcuda1-304-updates: /usr/lib/x86_64-linux-gnu/libcuda.so.1 > libcuda1-304-updates: /usr/lib/x86_64-linux-gnu/libcuda.so.304.117 > libcuda1-331: /usr/lib/i386-linux-gnu/libcuda.so > libcuda1-331: /usr/lib/i386-linux-gnu/libcuda.so.1 > libcuda1-331: /usr/lib/i386-linux-gnu/libcuda.so.331.38 > libcuda1-331: /usr/lib/x86_64-linux-gnu/libcuda.so > libcuda1-331: /usr/lib/x86_64-linux-gnu/libcuda.so.1 > libcuda1-331: /usr/lib/x86_64-linux-gnu/libcuda.so.331.38 > libcuda1-331-updates: /usr/lib/i386-linux-gnu/libcuda.so > libcuda1-331-updates: /usr/lib/i386-linux-gnu/libcuda.so.1 > libcuda1-331-updates: /usr/lib/i386-linux-gnu/libcuda.so.331.38 > libcuda1-331-updates: /usr/lib/x86_64-linux-gnu/libcuda.so > libcuda1-331-updates: /usr/lib/x86_64-linux-gnu/libcuda.so.1 > libcuda1-331-updates: /usr/lib/x86_64-linux-gnu/libcuda.so.331.38 > > apt-file search libaticalrt.so > fglrx: /usr/lib/fglrx/libaticalrt.so > fglrx: /usr/lib/pxpress/lib/libaticalrt.so > fglrx: /usr/lib32/fglrx/libaticalrt.so > fglrx: /usr/lib32/pxpress/lib/libaticalrt.so > fglrx-updates: /usr/lib/fglrx/libaticalrt.so > fglrx-updates: /usr/lib/pxpress/lib/libaticalrt.so > fglrx-updates: /usr/lib32/fglrx/libaticalrt.so > fglrx-updates: /usr/lib32/pxpress/lib/libaticalrt.so > > apt-file search libOpenCL.so > fglrx: /usr/lib/fglrx/libOpenCL.so > fglrx: /usr/lib/fglrx/libOpenCL.so.1 > fglrx: /usr/lib/pxpress/lib/libOpenCL.so > fglrx: /usr/lib/pxpress/lib/libOpenCL.so.1 > fglrx: /usr/lib32/fglrx/libOpenCL.so.1 > fglrx: /usr/lib32/pxpress/lib/libOpenCL.so.1 > fglrx-updates: /usr/lib/fglrx/libOpenCL.so > fglrx-updates: /usr/lib/fglrx/libOpenCL.so.1 > fglrx-updates: /usr/lib/pxpress/lib/libOpenCL.so > fglrx-updates: /usr/lib/pxpress/lib/libOpenCL.so.1 > fglrx-updates: /usr/lib32/fglrx/libOpenCL.so.1 > fglrx-updates: /usr/lib32/pxpress/lib/libOpenCL.so.1 > nvidia-libopencl1-304: /usr/lib/i386-linux-gnu/libOpenCL.so > nvidia-libopencl1-304: /usr/lib/i386-linux-gnu/libOpenCL.so.1 > nvidia-libopencl1-304: /usr/lib/i386-linux-gnu/libOpenCL.so.1.0 > nvidia-libopencl1-304: /usr/lib/i386-linux-gnu/libOpenCL.so.1.0.0 > nvidia-libopencl1-304: /usr/lib/x86_64-linux-gnu/libOpenCL.so > nvidia-libopencl1-304: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 > nvidia-libopencl1-304: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0 > nvidia-libopencl1-304: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0.0 > nvidia-libopencl1-304-updates: /usr/lib/i386-linux-gnu/libOpenCL.so > nvidia-libopencl1-304-updates: /usr/lib/i386-linux-gnu/libOpenCL.so.1 > nvidia-libopencl1-304-updates: /usr/lib/i386-linux-gnu/libOpenCL.so.1.0 > nvidia-libopencl1-304-updates: /usr/lib/i386-linux-gnu/libOpenCL.so.1.0.0 > nvidia-libopencl1-304-updates: /usr/lib/x86_64-linux-gnu/libOpenCL.so > nvidia-libopencl1-304-updates: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 > nvidia-libopencl1-304-updates: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0 > nvidia-libopencl1-304-updates: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0.0 > nvidia-libopencl1-331: /usr/lib/i386-linux-gnu/libOpenCL.so.1 > nvidia-libopencl1-331: /usr/lib/i386-linux-gnu/libOpenCL.so.1.0 > nvidia-libopencl1-331: /usr/lib/i386-linux-gnu/libOpenCL.so.1.0.0 > nvidia-libopencl1-331: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 > nvidia-libopencl1-331: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0 > nvidia-libopencl1-331: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0.0 > nvidia-libopencl1-331-updates: /usr/lib/i386-linux-gnu/libOpenCL.so.1 > nvidia-libopencl1-331-updates: /usr/lib/i386-linux-gnu/libOpenCL.so.1.0 > nvidia-libopencl1-331-updates: /usr/lib/i386-linux-gnu/libOpenCL.so.1.0.0 > nvidia-libopencl1-331-updates: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 > nvidia-libopencl1-331-updates: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0 > nvidia-libopencl1-331-updates: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0.0 > nvidia-opencl-dev: /usr/lib/x86_64-linux-gnu/libOpenCL.so > ocl-icd-libopencl1: /usr/lib/x86_64-linux-gnu/libOpenCL.so > ocl-icd-libopencl1: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 > ocl-icd-libopencl1: /usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0.0 > ocl-icd-libopencl1: /usr/share/man/man7/libOpenCL.so.7.gz > > > Do you have any advice for me? > the whole boinc community will benefit a lot from this bug fix, since GPUs > are more powerful on computation even than CPUs :) > > > have many thanks for the help, > > > Gianfranco > -- Vincent Danjean GPG key ID 0xD17897FA vdanj...@debian.org GPG key fingerprint: 621E 3509 654D D77C 43F5 CA4A F6AE F2AF D178 97FA Unofficial pkgs: http://moais.imag.fr/membres/vincent.danjean/deb.html APT repo: deb http://people.debian.org/~vdanjean/debian unstable main -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org