11

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

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

现在,我需要学习如何使用 PyOpenCL 来进一步了解它!那么问题来了:

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

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

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

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

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

4

4 回答 4

10

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

为了快速学习 Python 语法,我推荐 Codecademy 的 Python track: 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

于 2013-08-25T08:45:29.457 回答
6

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

您可以使用以下所有面向 C/C++ 的资源,但如果您对 OpenCL、GPGPU 硬件有足够的了解,可以帮助您入门。

  1. AMD OpenCL 大学工具包

  2. OpenCL Book 第 2 版的异构计算

  3. NVIDIA OpenCL pages 是另一个优秀的资源

  4. Streamcomputing.eu 有很好的 openCL 入门文章。

  5. 英特尔 OpenCL SDK 教程

PyOpenCL 特定

  1. OpenCL in Action: How to Accelerate Graphics and Computation 有一章是关于 PyOpenCL
  2. OpenCL 编程指南有章节 PyOpenCL

这两本书都包含 OpenCL 1.1 实现,但这对您来说应该是一个很好的起点。

于 2013-08-25T06:32:23.003 回答
1

作为 GPU 编程的新手,我发现您提到的相关文章相当简单,尽管我发现示例代码可以从命令行完美运行,但不能在带有 Anaconda 的 Eclipse 中运行。我认为这可能是因为来自 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 notebook,您可能不需要深入研究 GPU 编程

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

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

一般来说,我发现一次只学习一件事会更有效,即使不那么有趣。

我希望这有帮助。

于 2016-05-03T11:22:13.620 回答