2010-10-31 13 views
11

Sto cercando una buona libreria OpenCL wrapper \ per Python, con una buona documentazione. Ho provato a cercarne ... ma non ne ho trovato uno abbastanza buono.OpenCL per Python

risposta

11

L'opzione più popolare e meglio documentata sembra essere PyOpenCL. Sostiene di essere un wrapper completo per OpenCL e la documentazione sembra buona.

+0

Ow. tnx .. sembra che stavo scaricando PyOpenCL non dal sito ufficiale .. ed è per questo che non ho trovato documentazione per questo ... –

+0

@Ai_boy: certo, nessun problema. –

4

Entrambi CLyther e PyOpenCL sembrano ben documentati per me.

+0

CLyther è molto più immaturo di PyOpenCL, anche se la documentazione sembra eccellente. –

4

pycl è un ctypes vincolanti per OpenCL (ospitato on bitbucket)

Il suo obiettivo primario è semplice: avvolgere OpenCL in modo tale che il maggior numero di implementazioni di Python possono usarlo come fattibile. Attualmente è testato su CPython 2. {5,6,7}, 3,2 e PyPy 1.5. È risaputo che in gran parte non funziona su Jython, la cui libreria ctypes è ancora immatura.

Per ottenere ciò, si evitano i moduli di estensione e le dipendenze al di fuori della libreria standard. Idealmente cose come gli array NumPy e le immagini PIL dovrebbero funzionare, ma non dovrebbero essere richieste

Attualmente è piuttosto nuovo. Ci ho giocato di recente e funziona bene. Tempi non eseguiti rispetto a PyOpenCL, ma le prestazioni sembrano essere perfettamente ragionevoli

Non ho funzionato per me con OpenCL 1.0 di OS X 10.6 (e un AMD Radeon 5870, see here), ma funziona perfettamente sotto 10.7 e OpenCL 1.1

Per quanto riguarda la documentazione, è un collegamento abbastanza diretto alle librerie C, quindi qualsiasi documentazione verrà applicata. Anche "Adventures in PyOpenCL" è valido e si applica a quasi tutti gli attacchi

2

Stiamo sviluppando opencl4py, associazioni di livello superiore. Questo progetto utilizza CFFI, quindi funziona su Pypy.

Il problema principale riscontrato con pyopencl è che "import pyopencl" esegue l'inizializzazione di OpenCL e occupa l'intera memoria virtuale in caso di driver NVIDIA, impedendo il corretto biforcazione e disabilitando in modo efficace il multiprocessing (sì, affermiamo che l'utilizzo di pyopencl disabilita il multiprocessing almeno con NVIDIA). opencl4py utilizza l'inizializzazione di OpenCL pigro, risolvendo questo "inferno di importazione".

Successivamente, ha acquisito alcune funzioni interessanti come il caching del programma binario super facile, ecc. Sfortunatamente, la documentazione è piuttosto breve. Il modo migliore per imparare come funziona è passare attraverso i test.

+0

Autore PyOpenCL qui. La cosa più sensata che posso fare della tua affermazione è che opencl4py non carica libOpenCL.so al momento dell'importazione. Se questo è un problema (come stai sostenendo), allora perché non importa PyOpenCL esattamente dove è necessario? Non sono sicuro di capire la tua motivazione qui. –

+0

Come ulteriore commento, PyOpenCL ha un [ramo cffi] (https://github.com/pyopencl/pyopencl/tree/cffi) che può avviare kernel e funzionare su PyPy. Non è ancora pronto per il prime time, ma sta arrivando. –

+0

La nostra applicazione ha dozzine di moduli che usano OpenCL e ritardare l'importazione rende il codice molto soggetto a errori. Ogni volta che qualcuno ha importato pyOpenCL "prima di lui dovrebbe" ha portato a molto difficile eseguire il debug e diagnosticare gli errori ...a volte :) E, naturalmente, potrebbe funzionare con dispositivi OpenCL non NVIDIA sul computer di uno sviluppatore. – markhor