Bug#763655: boinc-amd-opencl: wrong dependencies regarding OpenCL

Gianfranco Costamagna costamagnagianfranco at yahoo.it
Fri Oct 10 17:35:30 UTC 2014


Hi Vincent,

first of all sorry for taking so long to look at this, but the freeze is approaching and time is running out
(specially because this bug needs a trip on the new queue for being fixed, and won't be fixed in jessie probably)


>I just looked at the various package in src:boinc (only the debian/control
>file, I did not inspect the real packages). If I understand correctly
>(correct me if I'm wrong), only the 'client' part of boinc is concerned
>by gpu/OpenCL/...
>You package it with
>- boinc-client that contains all the client software (and that can use
>  GPU, ... due to the use of dlopen if these additional software are
>  present)
>- boinc-nvidia-cuda that installs dependencies required for boinc-client
>  to use NVidia cards with CUDA
>- boinc-amd-opencl that installs dependencies required for boinc-client
>  to use AMD cards with OpenCL or Catalyst directly ?

exactly.

>If this is the case, I would have put 'client' in the last two package names
>and make them depends on boinc-client. But if GPU can also be used
>by the boinc manager, then I would let these packages as they are.

you are completely right, the manager is just a package that allows you to control the client (and various else, but nothing GPU related).

>My main "problem" is the target of boinc-amd-opencl.
>boinc-nvidia-cuda seems clear: to allow the use of NVidia cards with CUDA.
>I do not look a lot in the sources, so I can be wrong, but I think that
>other targets of accelerated boinc-client can be :
>[A] AMD cards with Catalyst (fglrx drivers directly)
>[B] NVidia cards with OpenCL (through NVidia ICD packaged in
>  nvidia-opencl-icd)
>[C] AMD cards with OpenCL (through AMD ICD packaged in amd-opencl-icd)
>[D] Intel cards with OpenCL (through Intel ICD not (yet) packaged)
>[E] other OpenCL implementations

>And I fail to see what of these is targeted by boinc-amd-opencl.
>Probably A or B/C/D/E but without requiring to install any specific ICD in
>the case of OpenCL
>  Note that, contrary to NVidia, AMD really maintains its OpenCL drivers.
>So, you probably should either split A and OpenCL support but you can
>ensure that OpenCL default to the AMD ICD by default.

Looking at the code there is a client/gpu_amd.cpp
but seems to detect also intel cards so I'll go for something like "opencl" rather than "amd-opencl"

>Let's try:

>Package: boinc-client
>Suggests: boinc-opencl, boinc-nvidia-cuda, boinc-amd-fglrx, ...
>=> install software client

I did: 
Suggests: boinc-client-opencl, boinc-client-fglrx, boinc-client-nvidia-cuda

>Package: boinc-nvidia-cuda (or boinc-client-nvidia-cuda)
>Depends: boinc-client, libcuda1
>Recommends: libcudart5.5 | libcudart6.0
>=> install what is required to run client with NVidia cards
>   used with Cuda

@Package: boinc-client-nvidia-cuda
@Architecture: amd64 i386
@Section: contrib/net
@Priority: extra
@Breaks: boinc-nvidia-cuda
@Replaces: boinc-nvidia-cuda
@Depends: ${misc:Depends}, boinc-client, libcuda1 | libcudart5.5 | libcudart6.0 | libcudart6.5

(the first for debian, the others for ubuntu)


(there is an upcoming 6.5)

>Package: boinc-amd-fglrx
>Depends: boinc-client, libfglrx-virtual
>Recommends: fglrx-driver, libgl1-fglrx-glx-virtual
>=> install what is required to run client with AMD cards
>   used with Catalyst/fglrx

just client-fglrx for me (if I understand correctly what you mean)

@Package: boinc-client-fglrx
@Architecture: amd64 i386
@Section: contrib/net
@Priority: extra
@Breaks: boinc-nvidia-cuda
@Replaces: boinc-nvidia-cuda
@Depends: ${misc:Depends}, boinc-client
@Recommends: libfglrx | fglrx-updates | fglrx

>Package: boinc-opencl
>Depends: ocl-icd-libopencl1 | libopencl-1.1-1
>Recommends: amd-opencl-icd | opencl-icd
>=> install what is required to run client with OpenCL
>   recommends an ICD (OpenCL implementation) and ask,
>   by default, the AMD one

BTW I put "any" as architecture, since it seems to be available on almost all archs now

@Package: boinc-client-opencl
@Architecture: any
@Section: contrib/net
@Priority: extra
@Breaks: boinc-amd-opencl
@Replaces: boinc-amd-opencl
@Depends: ${misc:Depends}, ocl-icd-libopencl1 | libopencl-1.1-1
@Recommends: amd-opencl-icd | opencl-icd



>I know less plain cuda and fglrx than OpenCL. So I'm less
>confident for proposed dependencies for these two.


>You should not.
>nvidia-libopencl1, amd-libopencl1 and ocl-icd-libopencl1 must be
>fully interchangeable (for OpenCL 1.1). If you also want OpenCL 1.2
>and/or OpenCL 2.0, then only amd-libopencl1 and ocl-icd-libopencl1
>support them. ocl-icd-libopencl1 should be preferred because its free
>(hence the proposed alternative above)

wonderful, this is really nice when omething is standard :)


>All boinc ? Or only the boinc-nvidia-cuda ?

sadly all boinc!


>At least, OpenCL interface (provided by either nvidia-libopencl1,
>amd-libopencl1 or ocl-icd-libopencl1) is very stable. It is normalized
>by the Chronos consortium.

wonderful to hear that somebody does a good job on maintaining a stable interface



>Put it in Recommends or Suggests. It is the OpenCL implementation
>and the 'right' Depends depends on your hardware. So, there is no
>way to have apt always selecting the good driver.

>Use alternatives. It just that I do not consider them in my first
>mail (nor in this one) because, as I do not have ubuntu, I cannot
>easily look at package descriptions and dependencies with
>apt-cache


Hint: sometimes it happens to have necessity to look at such things, there is an easy and great tool helping you to achieve the result:

pbuilder-dist utopic create
pbuilder-dist utopic login
and you can play whatever you want ;)

I'm attaching the patch
diff --git a/debian/control.in b/debian/control.in
index 0a5433d..6ac4c55 100644
--- a/debian/control.in
+++ b/debian/control.in @Section: contrib/net
@Priority: extra
- at Depends: ${misc:Depends}, boinc-client, libcuda1
- at Suggests: libcudart5.5 | libcudart6.0 | libcudart6.5
+ at Breaks: boinc-nvidia-cuda
+ at Replaces: boinc-nvidia-cuda
+ at Depends: ${misc:Depends}, boinc-client, libcuda1 | libcudart5.5 | libcudart6.0 | libcudart6.5
@Description: metapackage for CUDA-savvy BOINC client and manager
@ The Berkeley Open Infrastructure for Network Computing (BOINC) is a
@ software platform for distributed computing: several initiatives of
@@ -86,6 +87,8 @@ Package: boinc
@Architecture: any
@Section: contrib/net
@Priority: extra
+ at Breaks: boinc-amd-opencl
+ at Replaces: boinc-amd-opencl
@Depends: ${misc:Depends}, ocl-icd-libopencl1 | libopencl-1.1-1
@Recommends: amd-opencl-icd | opencl-icd
@Description: metapackage for AMD/ATI OpenCL-savvy BOINC client and manager
@@ -106,8 +109,10 @@ Package: boinc
@Architecture: amd64 i386
@Section: contrib/net
@Priority: extra
- at Depends: ${misc:Depends}, boinc-client, libfglrx-virtual



- at Recommends: fglrx-driver, libgl1-fglrx-glx-virtual
+ at Breaks: boinc-nvidia-cuda
+ at Replaces: boinc-nvidia-cuda
+ at Depends: ${misc:Depends}, boinc-client
+ at Recommends: libfglrx | fglrx-updates | fglrx
@Description: metapackage for AMD/ATI fglrx-savvy BOINC client and manager
@ The Berkeley Open Infrastructure for Network Computing (BOINC) is a
@ software platform for distributed computing: several initiatives of


many thanks for helping in fixing this long stading bug!!!

cheers,

Gianfranco




More information about the pkg-boinc-devel mailing list