Начало работы с PyOpenCL

недавно я обнаружил мощность GP-GPU (графического процессора общего назначения) и хочу использовать его для выполнения "тяжелых" научных и математических вычислений (которые в противном случае требуют больших кластеров ЦП) на одной машине.

Я знаю, что есть несколько интерфейсов для работы на GPU, наиболее заметными из которых являются CUDA и OpenCL. Последний имеет преимущество перед CUDA для работы на большинстве видеокарт (NVIDIA, AMD, Intel), а не на картах NVIDA только. В моем случае у меня есть обычный Intel 4000 GPU, который, похоже, хорошо сотрудничает с OpenCL.

теперь, мне нужно научиться работать с PyOpenCL, чтобы получить его дальше! Итак, возникает вопрос:

как я могу начать работу с PyOpenCL? Каковы предпосылки? Действительно ли мне нужно быть опытным в Python и / или OpenCL?

мой фон находится в fortran, и на самом деле мне нужно перевести и распараллелить длинный fortran код в Python (или pyopencl), который в основном занимается решением уравнений в частных производных и diagonalizing матриц.

Я прочитал два соответствующих веб-сайта http://enja.org/2011/02/22/adventures-in-pyopencl-part-1-getting-started-with-python/ и http://documen.tician.de/pyopencl/ но они не очень полезны для новичков (т. е. чайников).

Я просто не знаю с чего начать. Я не стремлюсь стать экспертом в этой области, просто чтобы узнать как можно распараллелить простую математику и линейную алгебру на pyopencl.

любые советы и помощь приветствуются!

4 ответов


кажется, вы ищете самый быстрый и эффективный путь для изучения PyOpenCL. Вам не нужно знать OpenCL (жесткую часть) в начале, но будет полезно знать Python, когда вы начнете.

для быстрого изучения синтаксиса Python я рекомендую трек Python Codecademy:http://www.codecademy.com/tracks/python

тогда курс параллельного программирования Udacity-отличное место для начала с GPGPU (хотя курс преподается в технология CUDA.) https://www.udacity.com/course/cs344 Этот курс научит вас фундаментальные концепции GPGPU очень быстро. Вам не понадобится графический процессор NVIDIA для участия, потому что все оценки курса выполняются онлайн.

после (или во время) курса Udacity я рекомендую вам прочитать, запустить и настроить примеры кода PyOpenCL:https://github.com/inducer/pyopencl/tree/master/examples


независимо от языка принятия для вычислений GPGPU,таких как Java, C/C++, Python, я бы рекомендовал вам сначала начать с основ вычислений GPGPU и OpenCL.

вы можете использовать следующие ресурсы, ориентированные на C / C++, но это должно дать вам достаточно знаний об оборудовании OpenCL, GPGPU, чтобы вы начали.

  1. набор инструментов университета AMD OpenCL

  2. Hetergeneous Вычислительной с OpenCL Книга 2-е издание

  3. NVIDIA OpenCL pages является еще одним отличным resorce

  4. Streamcomputing.ЕС имеет хорошие статьи openCL starter.

  5. Intel OpenCL SDK учебник

конкретные PyOpenCL

  1. OpenCL в действии: Как ускорить графику и вычисления есть глава о PyOpenCL
  2. Руководство По Программированию OpenCL имеет главу PyOpenCL

обе книги содержат реализацию OpenCL 1.1, но это должно быть хорошей отправной точкой для вас.


Как кто-то новый для программирования GPU я нашел соответствующие статьи, которые вы упомянули довольно просто, хотя я обнаружил, что пример кода отлично работает из командной строки, но не в Eclipse с Anaconda. Я думаю, это может быть потому, что Eclipse pyopencl от anaconda отличается от версии командной строки, и мне еще предстоит решить, как это решить.

для изучения python существует большое количество ресурсов в интернете, включая бесплатные электронная книга.

https://wiki.python.org/moin/BeginnersGuide http://codecondo.com/10-ways-to-learn-python/

должно быть хорошее начало. Если вы используете Eclipse, вы должны установить pydev. В любом случае установите Anaconda https://docs.continuum.io/anaconda/install как это сэкономит вам много хлопот.

Я оцениваю неделю или около того, чтобы добраться до уровня мастерства, необходимого Вам в Python, пока вы picj несколько простых мини проекты. Вы также можете обнаружить, что с NumPy и scipy и, возможно, IPython notebook вам не нужно углубляться в Программирование GPU

эти ссылки могут помочь вам избежать программирования GPU или, по крайней мере, отсрочить его изучение. Имейте в виду, что стоимость переключения между ядрами означает, что вы не назначаете singificant объем работы каждому ядро

http://blog.dominodatalab.com/simple-parallelization/ https://pythonhosted.org/joblib/parallel.html

Как правило, я считаю более эффективным, если не так весело, чтобы узнать только одну вещь за раз.

надеюсь, это поможет.