[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#675528: ITP: ocl-icd -- Generic OpenCL ICD Loader



Package: wnpp
Severity: wishlist
Owner: Vincent Danjean <vdanjean@debian.org>

[ opencl-headers maintainers, please read until the end of this ITP ] 

* Package name    : ocl-icd
  Version         : 1.0 beta2
  Upstream Author : Brice Videau <brice.videau@imag.fr>
* URL             : http://forge.imag.fr/projects/ocl-icd/
* License         : BSD
  Programming Lang: C
  Description     : Generic OpenCL ICD Loader

This source package will provide two binary pakages:
Package: ocl-icd-libopencl1
Description: Generic OpenCL ICD Loader
 OpenCL (Open Computing Language) is a multivendor open standard for
 general-purpose parallel programming of heterogeneous systems that include
 CPUs, GPUs and other processors.
 .
 This package contains an installable client driver loader (ICD Loader)
 library that can be used to load any (free or non-free) installable client
 driver (ICD) for OpenCL. It acts as a demultiplexer so several ICD can
 be installed and used together.

Package: ocl-icd-dev
Description: Development files to build a ICD Loader
 OpenCL (Open Computing Language) is a multivendor open standard for
 general-purpose parallel programming of heterogeneous systems that include
 CPUs, GPUs and other processors.
 .
 This package provides a header file that allows a OpenCL implementation
 to build a installable client driver (ICD). With a ICD, an OpenCL
 implementation can be used by any OpenCL program without the need
 to link the program to the specific OpenCL implementation.


A few word about the context. There exist lots of OpenCL implementations.
A OpenCL program can either link to a specific OpenCL implementation
or it can link to a standardized libOpenCL library that allows the
program to dynamically choose the OpenCL implementation or even to
use several OpenCL implementations in the same program. In fact
libOpenCL is only a wrapper (more exactly a dispatcher) to
OpenCL implementations provided as ICD.
  ocl-icd is the only one (to my knowledge) free implementation of
such a ICD Loader. The main difficulty to implement it is that
all compatible ICD must provide a structure filled with OpenCL
function pointers, but there is no free documentation about the order
of these functions.
  So ocl-icd sources include tools to help to find this order from
closed-sources OpenCL implementations (by creating a fake OpenCL ICD
and letting the closed-source ICD Loader execute the faked functions).
Once the order is found, it is registered into a database. Vendors
ensure between them that functions are always at the same place so
the database is only filled when a new closed-source ICD Loader uses
more functions. Entries in the database are never modified nor
removed.
  ocl-icd also provides a header file declaring this structure of
function pointers so that any OpenCL implementation will be easily
able to provide an ICD. The goal is to add such an ICD to free
OpenCL implementation such as LIBCLC or clover.

  The Debian package will only use the database (ocl_interface.yaml
in the sources), so it will not have any non-free dependencies.
However, it needs opencl-headers that are currently in contrib.
  This is why I would ask opencl-headers maintainers to reconsider
the place of opencl-headers. If I understand correctly,
opencl-headers have been uploaded to contrib because their only
use case would be to compile an OpenCL program for a closed-source
OpenCL implementation (mainly amd or nvidia).
  Now, opencl-headers is required to compile this free ICD Loader.
And this free ICD Loader has all what is needed to compile a
free ICD from free OpenCL implementation.
  So, is it possible to upload opencl-headers to main instead of
contrib?

  Regards,
    Vincent

PS: a preliminary package is on my repo:
deb http://people.debian.org/~vdanjean/debian unstable main



Reply to: