PyOpenCL入门

时间:2013-08-24 00:47:57

标签: python opencl gpgpu pyopencl

我最近发现了GP-GPU(通用图形处理单元)的强大功能,并希望利用它在一台机器上执行“繁重”的科学和数学计算(否则需要大型CPU群集)。 / p>

我知道有几种接口可以在GPU上运行,其中最突出的是CUDA和OpenCL。后者具有防止CUDA在大多数显卡(NVIDIA,AMD,Intel)上运行的优势,而不仅仅是NVIDA卡。就我而言,我有一个普通的Intel 4000 GPU,似乎与OpenCL很好地合作。

现在,我需要学习如何使用PyOpenCL来进一步操作!所以问题就出现了:

如何开始使用PyOpenCL?有什么先决条件?我真的需要有Python和/或OpenCL的经验吗?

我的背景是在fortran中,事实上我需要将冗长的fortran代码翻译并并行化为python(或pyopencl),主要处理PDE和对角化矩阵。

我已阅读了两个相关网站http://enja.org/2011/02/22/adventures-in-pyopencl-part-1-getting-started-with-python/http://documen.tician.de/pyopencl/,但它们对新手(即假人)并没有多大帮助。

我只是不知道该怎么做。我不想成为该领域的专家,只是为了了解如何在pyopencl上并行化简单的数学和线性代数。

非常欢迎任何建议和帮助!

4 个答案:

答案 0 :(得分:8)

您似乎正在寻找学习PyOpenCL的最快最有效的途径。您不需要在开始时了解OpenCL(困难部分),但在开始时了解Python会很有帮助。

为了快速学习Python语法,我推荐Codecademy的Python轨道:http://www.codecademy.com/tracks/python

然后,Udacity并行编程课程是开始使用GPGPU的好地方(即使课程是在CUDA中教授的)。 https://www.udacity.com/course/cs344本课程将非常快速地教您基本的GPGPU概念。您不需要NVIDIA GPU参与,因为所有课程评估都是在线完成的。

在Udacity课程之后(或期间),我建议您阅读,运行和自定义PyOpenCL代码示例:https://github.com/inducer/pyopencl/tree/master/examples

答案 1 :(得分:5)

无论采用GPGPU计算的语言如Java,C / C ++,Python,我都建议您先开始使用GPGPU计算和OpenCL的基础知识。

您可以使用以下资源,所有这些都是面向C / C ++的,但是您应该充分了解OpenCL,GPGPU硬件,以便开始使用。

  1. AMD OpenCL University Tool kit

  2. Hetergeneous Computing with OpenCL Book 2nd Edition

  3. NVIDIA OpenCL pages is another Excellent resorce

  4. Streamcomputing.eu has nice openCL starter articles.

  5. Intel OpenCL SDK tutorial

  6. PyOpenCL特定

    1. OpenCL in Action: How to Accelerate Graphics and Computation 有一章关于PyOpenCL
    2. OpenCL Programming Guide有章PyOpenCL
    3. 这两本书都包含OpenCL 1.1实现,但它应该是你的良好起点。

答案 2 :(得分:1)

作为GPU编程的新手,我发现您提到的相关文章相当简单,但我发现示例代码从命令行运行完美,但在Eclipse中没有使用Anaconda。我想这可能是因为来自anaconda的Eclipse pyopencl与命令行版本不同,我还没有找到解决这个问题的方法。

对于学习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所需的熟练程度,只要你完成一些简单的迷你项目即可。您可能还会发现使用numpy和scipy以及可能的ipython笔记本,您可能不需要深入研究GPU编程

这些链接可以帮助您避免GPU编程或至少延迟必须学习它。请注意,在核心之间切换的成本意味着您必须为每个核心分配大量的工作

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

一般来说,我发现一次只学习一件事,效率更高,如果不那么有趣。

我希望这会有所帮助。

答案 3 :(得分:0)