2010-10-31 7 views
11

Je cherche un bon wrapper \ library OpenCL pour Python, avec une bonne documentation. J'ai essayé d'en chercher ... mais je n'en ai pas trouvé un assez bon.OpenCL for Python

Répondre

11

L'option la plus populaire et la mieux documentée semble être PyOpenCL. Il prétend être un wrapper complet pour OpenCL et la documentation semble bonne.

+0

Ow. tnx .. il semble que je téléchargeais PyOpenCL pas de site officiel .. et c'est pourquoi je n'ai pas trouvé de documentation pour cela ... –

+0

@Ai_boy: bien sûr, pas de problème. –

4

Les deux CLyther et PyOpenCL me semblent bien documentés.

+0

CLyther est beaucoup plus immature que PyOpenCL, bien que la documentation semble excellente. –

4

pycl est un ctypes liant à OpenCL (hébergé on bitbucket)

Son principal objectif est simple: envelopper OpenCL de telle sorte que de nombreuses implémentations de Python peuvent l'utiliser que possible. Il est actuellement testé sur CPython 2. {5,6,7}, 3.2, et PyPy 1.5. Il est connu de ne pas fonctionner sur Jython, dont la bibliothèque ctypes est encore immature.

Pour ce faire, nous évitons les modules d'extension et les dépendances en dehors de la bibliothèque standard. Idéalement, des choses comme des tableaux NumPy et des images PIL devraient fonctionner, mais elles ne devraient pas être nécessaires.

Il est actuellement assez nouveau. J'y ai joué récemment et ça marche bien. Pas synchronisé avec PyOpenCL, mais la performance semble être parfaitement raisonnable

Je ne travaillais pas avec OpenCL 1.0 d'OS X 10.6 (et un AMD Radeon 5870, see here), mais fonctionne parfaitement sous 10.7 et OpenCL 1.1

En ce qui concerne la documentation, il s'agit d'une liaison assez directe aux bibliothèques C, donc toute la documentation s'appliquera. Aussi "Adventures in PyOpenCL" est bon, et s'applique à presque toutes les reliures

2

Nous développons opencl4py, reliures de niveau supérieur. Ce projet utilise CFFI, donc ça marche sur Pypy. Le problème majeur que nous avons rencontré avec pyopencl est que "import pyopencl" fait l'initialisation d'OpenCL et prend toute la mémoire virtuelle dans le cas du driver NVIDIA, empêchant le forking correct et désactivant le multitraitement (oui, nous prétendons que pyopencl désactive le multitraitement au moins avec NVIDIA). opencl4py utilise l'initialisation OpenCL paresseuse, résolvant cet "enfer d'importation". Par la suite, il a gagné quelques fonctionnalités intéressantes comme la mise en cache de programme binaire super facile, etc. Malheureusement, la documentation est assez brève. La meilleure façon d'apprendre comment cela fonctionne est de passer les tests.

+0

PyOpenCL auteur ici. Le plus de sens que je peux faire de votre déclaration est que opencl4py ne charge pas libOpenCL.so au moment de l'importation. Si c'est un problème (comme vous le prétendez), alors pourquoi ne pas importer PyOpenCL exactement là où c'est nécessaire? Je ne suis pas sûr de comprendre votre motivation ici. –

+0

PyOpenCL a aussi un [branche cffi] (https://github.com/pyopencl/pyopencl/tree/cffi) qui peut lancer des noyaux et fonctionne sur PyPy. Ce n'est pas tout à fait prêt pour la prime-time, mais ça y arrive. –

+0

Notre application a des dizaines de modules qui utilisent OpenCL et retarder l'importation rend le code très sujet aux erreurs. Chaque fois que quelqu'un a importé pyOpenCL "plus tôt qu'il ne devrait" a conduit à très difficile de déboguer et de diagnostiquer les erreurs ...parfois :) Et bien sûr, il pourrait fonctionner avec des périphériques non-NVIDIA OpenCL sur la machine d'un développeur. – markhor