OpenCL для Python

Я ищу хорошую оболочку\библиотеку OpenCL для Python с хорошей документацией. Я пытался найти несколько... но не смог найти достаточно хорошего.


person obenjiro    schedule 31.10.2010    source источник


Ответы (4)


Самый популярный и лучше всего задокументированный вариант — PyOpenCL. Он утверждает, что является полной оболочкой для OpenCL, и документация выглядит хорошо.

person Rafe Kettler    schedule 31.10.2010
comment
Ой. tnx.. кажется, я скачивал PyOpenCL не с официального сайта.. и поэтому не нашел на него документацию... - person obenjiro; 31.10.2010

Как CLyther, так и PyOpenCL выглядит хорошо задокументированным.

person Frédéric Hamidi    schedule 31.10.2010
comment
CLyther гораздо более незрелый, чем PyOpenCL, хотя документация выглядит превосходно. - person Rafe Kettler; 31.10.2010

pycl — это привязка ctypes к OpenCL (размещенная на в битбакете)

Его основная цель проста: обернуть OpenCL таким образом, чтобы как можно больше реализаций Python могли его использовать. В настоящее время он тестируется на CPython 2.{5,6,7}, 3.2 и PyPy 1.5. Известно, что он в основном не работает на Jython, чья библиотека ctypes все еще незрелая.

Для этого мы избегаем модулей расширения и зависимостей за пределами стандартной библиотеки. В идеале такие вещи, как массивы NumPy и изображения PIL, должны просто работать, но они не должны требоваться.

В настоящее время он довольно новый. Я играл с ним недавно, и он работает хорошо. Тайминги не сделаны по сравнению с PyOpenCL, но производительность кажется вполне приемлемой.

У меня не получилось с OpenCL 1.0 в OS X 10.6 (и AMD Radeon 5870, см. здесь), но отлично работает под 10.7 и OpenCL 1.1

Что касается документации, это довольно прямая привязка к библиотекам C, поэтому любая документация будет применяться. Также "Приключения в PyOpenCL" хорош и применим почти ко всем привязкам

person dbr    schedule 29.08.2011

Мы разрабатываем opencl4py, привязки более высокого уровня. Этот проект использует CFFI, поэтому он работает на Pypy.

Основная проблема, с которой мы столкнулись при использовании pyopencl, заключается в том, что import pyopencl выполняет инициализацию OpenCL и занимает всю виртуальную память в случае драйвера NVIDIA, предотвращая правильное разветвление и эффективно отключая многопроцессорность (да, мы утверждаем, что использование pyopencl отключает многопроцессорность, по крайней мере, с NVIDIA ). opencl4py использует ленивую инициализацию OpenCL, разрешая этот «импортный ад».

Позже он получил некоторые приятные функции, такие как очень простое кэширование бинарных программ и т. д. К сожалению, документация несколько кратка. Лучший способ узнать, как это работает, — пройти тесты.

person markhor    schedule 03.05.2014
comment
Автор PyOpenCL здесь. Максимальный смысл вашего утверждения заключается в том, что opencl4py не загружает libOpenCL.so во время импорта. Если это проблема (как вы утверждаете), то почему бы не импортировать PyOpenCL именно там, где это необходимо? Не уверен, что понимаю вашу мотивацию здесь. - person Andreas Klöckner; 05.05.2014
comment
В качестве дополнительного комментария у PyOpenCL есть ветка cffi, которая может запускать ядра и работает на PyPy. . Это не совсем готово к прайм-тайму, но оно приближается. - person Andreas Klöckner; 05.05.2014
comment
Наше приложение имеет десятки модулей, которые используют OpenCL, и задержка импорта делает код очень подверженным ошибкам. Каждый раз, когда кто-то импортировал pyOpenCL раньше, чем следовало, это приводило к очень сложным отладке и диагностике ошибок... иногда :) И, конечно же, это могло работать с устройствами, отличными от NVIDIA OpenCL, на машине разработчика. - person markhor; 05.05.2014
comment
Несмотря на то, что API opencl4py в настоящее время выглядит похоже на pyOpenCL, мы планируем переосмыслить его, основываясь на нашем предыдущем опыте. - person markhor; 05.05.2014