2010-10-31 8 views
11

estoy buscando un buen envoltorio \ biblioteca OpenCL para Python, con una buena documentación. Traté de buscar algunos ... pero no pude encontrar uno lo suficientemente bueno.OpenCL para Python

Respuesta

11

La opción más popular y mejor documentado parece ser PyOpenCL. Afirma ser un contenedor completo para OpenCL y la documentación se ve bien.

+0

Ow. tnx .. parece que estaba descargando PyOpenCL no desde el sitio oficial ... y es por eso que no encontré documentación para ello ... –

+0

@Ai_boy: claro, no hay problema. –

4

Tanto CLyther y PyOpenCL mirada muy bien documentados para mí.

+0

CLyther es mucho más inmadura que PyOpenCL, aunque la documentación parece excelente. –

4

pycl es un vinculantes para OpenCL ctypes (alojado on bitbucket)

Su principal objetivo es simple: Abrigo OpenCL de tal manera que a medida que muchas implementaciones de Python pueden utilizarlo como factible. Actualmente se prueba en CPython 2. {5,6,7}, 3.2 y PyPy 1.5. Se sabe que en gran parte no funciona en Jython, cuya biblioteca de tipos todavía es inmadura.

Para lograr esto, evitamos módulos de extensión y dependencias fuera de la biblioteca estándar. Idealmente cosas como las matrices NumPy y las imágenes PIL deberían funcionar, pero no deberían ser necesarias

Actualmente es bastante nuevo. He estado jugando recientemente y está funcionando muy bien. No realizado en comparación con los tiempos de PyOpenCL, pero el rendimiento parece ser perfectamente razonable

Yo no trabajo para mí con OS X 10.6 OpenCL 1.0 (y una Radeon de AMD 5870, see here), pero funciona perfectamente bajo y 10,7 OpenCL 1.1

en cuanto a la documentación, es un fijaciones bastante directos a las bibliotecas de C, por lo que cualquier documentación de los aplicará. También "Adventures in PyOpenCL" es bueno y se aplica a casi todas las vinculaciones

2

Estamos desarrollando opencl4py, enlaces de nivel superior. Este proyecto usa CFFI, por lo que funciona en Pypy.

El principal problema que nos encontramos con PyOpenCL es que 'PyOpenCL importación' hace OpenCL inicialización y toma toda la memoria virtual en caso de controlador de NVIDIA, la prevención de la bifurcación correcta y desactivando efectivamente multiprocesamiento (sí, reivindicamos que el uso de PyOpenCL desactiva multiprocesamiento al menos con NVIDIA). opencl4py usa la inicialización de OpenCL, resolviendo este "infierno de importación".

Más tarde, ganó algunas características agradables como super fácil almacenamiento en caché programa binario, etc. Por desgracia, la documentación es algo breve. La mejor manera de aprender cómo funciona es pasar por las pruebas.

+0

autor de PyOpenCL aquí. Lo más que puedo hacer con su afirmación es que opencl4py no carga libOpenCL.so en el momento de la importación. Si eso es un problema (como lo está afirmando), ¿por qué no importar PyOpenCL exactamente donde se necesita? No estoy seguro de entender su motivación aquí. –

+0

Como comentario adicional, PyOpenCL tiene una [rama cffi] (https://github.com/pyopencl/pyopencl/tree/cffi) que puede iniciar núcleos y funciona en PyPy. No está listo para el horario estelar, pero está llegando. –

+0

Nuestra aplicación tiene docenas de módulos que usan OpenCL y retrasar la importación hace que el código sea muy propenso a errores. Cada vez que alguien importó pyOpenCL "antes de lo que debería" resultó muy difícil depurar y diagnosticar errores ...a veces :) Y, por supuesto, podría funcionar con dispositivos que no sean NVIDIA OpenCL en una máquina de desarrollador. – markhor