2010-10-31 12 views
11

Poszukuję dobrej otoki OpenCL \ library dla Pythona, z dobrą dokumentacją. Próbowałem szukać ... ale nie mogłem znaleźć wystarczająco dobrego.OpenCL for Python

Odpowiedz

11

Najpopularniejszą i najlepiej udokumentowaną opcją wydaje się być PyOpenCL. Twierdzi, że jest kompletnym opakowaniem dla OpenCL, a dokumentacja wygląda dobrze.

+0

Ow. tnx .. wygląda na to, że pobierałem PyOpenCL nie z oficjalnej strony .. i dlatego nie znalazłem dokumentacji do tego ... –

+0

@Ai_boy: oczywiście, nie ma problemu. –

4

Zarówno CLyther jak i PyOpenCL wyglądają mi ładnie udokumentowane.

+0

Program CLyther jest znacznie bardziej niedojrzały niż PyOpenCL, chociaż dokumentacja wygląda doskonale. –

4

pycl JEST ctypes wiążące do OpenCL (gospodarzem on bitbucket)

Jego podstawowym celem jest prosta: owinąć OpenCL w taki sposób, że wiele implementacji Pythona można wykorzystać go jako wykonalne. Obecnie jest testowany na CPythonie 2. {5,6,7}, 3,2 i PyPy 1.5. Wiadomo, że w dużej mierze nie działa na Jythonie, którego biblioteka ctypów jest wciąż niedojrzała.

Aby to osiągnąć, unikamy modułów rozszerzeń i zależności poza standardową biblioteką. Idealne rzeczy, takie jak tablice NumPy i obrazy PIL, powinny po prostu działać, ale nie powinny być wymagane.

Jest obecnie całkiem nowy. Ostatnio się z tym bawię i działa to ładnie. Nie taktowanie w porównaniu do PyOpenCL, ale wydajność wydaje się być całkiem rozsądna. Nie pracowałem dla mnie z OpenCL 1.0 OS X 10.6 (i AMD Radeon 5870, see here), ale działa idealnie pod 10,7 i OpenCL 1.1

Jeśli chodzi o dokumentację, jest to dość bezpośrednie powiązanie z bibliotekami C, więc każda dokumentacja będzie miała zastosowanie. Również "Adventures in PyOpenCL" jest dobre i dotyczy prawie wszystkich wiązań

2

Opracowujemy opencl4py, powiązania wyższego poziomu. Ten projekt wykorzystuje CFFI, więc działa na Pypy.

Głównym problemem, jaki napotkał z pyopencl jest to, że „pyopencl import” czy OpenCL inicjalizacji i zajmuje całą pamięć wirtualną w przypadku sterownika NVIDIA, zapobiegając prawidłowego rozwidlającą i skutecznie wyłączając wieloprocesorowe (tak, możemy twierdzić, że za pomocą pyopencl wyłącza wieloprocesorowe przynajmniej z NVIDIA). opencl4py używa leniwej inicjalizacji OpenCL, rozwiązując to "importowane piekło".

Później uzyskał kilka ciekawych funkcji, takich jak super łatwe buforowanie programu binarnego itp. Niestety, dokumentacja jest dość krótka. Najlepszym sposobem, aby dowiedzieć się, jak to działa, są testy.

+0

Autor PyOpenCL tutaj. Największe znaczenie mogę wyciągnąć z tego, że opencl4py nie ładuje libOpenCL.so w czasie importu. Jeśli to jest problem (jak twierdzisz), to dlaczego nie importować PyOpenCL dokładnie tam, gdzie jest potrzebny? Nie jestem pewien, czy rozumiem tutaj twoją motywację. –

+0

Jako kolejny komentarz, PyOpenCL ma gałąź [cffi] (https://github.com/pyopencl/pyopencl/tree/cffi), która może uruchamiać jądra i działa na PyPy. Nie jest jeszcze gotowy na prime-time, ale się tam dostanie. –

+0

Nasza aplikacja zawiera kilkadziesiąt modułów korzystających z OpenCL i opóźniających import sprawia, że ​​kod jest bardzo podatny na błędy. Za każdym razem, gdy ktoś zaimportował pyOpenCL "wcześniej niż powinien", bardzo trudno było debugować i diagnozować błędy ...czasami :) I oczywiście może działać z urządzeniami OpenCL innych niż NVIDIA na komputerze programisty. – markhor