【问题标题】:Can I program Nvidia's CUDA using only Python or do I have to learn C?我可以只使用 Python 编程 Nvidia 的 CUDA 还是必须学习 C?
【发布时间】:2011-02-26 04:39:44
【问题描述】:

我想这个问题不言自明。我有兴趣做一些严肃的计算,但我不是一名程序员。我可以将足够多的 python 串在一起来完成我想要的。但是我可以在 python 中编写一个程序并让 GPU 使用 CUDA 执行它吗?还是我必须混合使用 python 和 C?

Klockner (sp) 的“pyCUDA”网页上的示例混合了 python 和 C,所以我不确定答案是什么。

如果有人想对 Opencl 发表意见,请随意。几周前我听说了这项 CUDA 业务,不知道您可以像这样使用您的视频卡。

【问题讨论】:

  • 我想你可以有一个 python 库,它接受用 Python 子集编写的代码,并将其编译成 PTX 指令,可以使用 CUDA API 发送到驱动程序。 Haskell 中的一些 GPU 编程方法采用了这种方法。不过,不确定它是否已经在 Python 中使用了

标签: python cuda opencl


【解决方案1】:

我相信,使用 PyCUDA,您的计算内核将始终必须编写为“CUDA C 代码”。 PyCUDA 负责许多其他繁琐的簿记工作,但不会从 Python 代码构建计算 CUDA 内核。

【讨论】:

  • 确实如此,尽管有一些有趣的项目可以做到;看我的回答。 ;)
  • 我们在工作中使用 PyCUDA 并获得了不错的效果。编写纯 CUDA C 的优点是您可以从其他人那里获得帮助和 sn-ps,而无需翻译您的 API 特定的 python 代码。
【解决方案2】:

pyopencl 提供了一个有趣的 PyCUDA 替代方案。它被描述为 PyCUDA 的“姐妹项目”。它是 OpenCL API 的完整包装器。

据我了解,OpenCL 具有在 Nvidia 以外的 GPU 上运行的优势。

【讨论】:

  • OpenCL 理论上也可以在支持的 CPU 上执行。然而,到目前为止,Nvidia 硬件之外的支持还不够完善。
【解决方案3】:

您应该看看CUDAmatTheano。两者都是编写在 GPU 上执行的代码的方法,而无需真正了解 GPU 编程。

【讨论】:

    【解决方案4】:

    已经有了很好的答案,但另一个选择是Clyther。通过将 Python 的一个子集编译到 OpenCL 内核中,它可以让您编写 OpenCL 程序,甚至无需使用 C。

    【讨论】:

      【解决方案5】:

      有一组很好的、基本的数学结构,其中计算内核已经编写好,可以通过 pyCUDA 的cumathmodule 访问。如果您想做更多涉及或特定/自定义的东西,您将不得不在内核定义中编写一点 C,但是 pyCUDA 的好处是它会为您完成繁重的 C 提升;它在后端进行了大量的元编程,因此您不必担心严肃的 C 编程,只需担心小部分。给出的示例之一是用于计算点积的 Map/Reduce 内核:

      dot_krnl = ReductionKernel(np.float32, neutral="0", reduce_expr="a+b", map_expr="x[i]*y[i]", arguments="float *x, float *y")

      每个参数中的小sn-ps 代码都是C 行,但它实际上是为您编写程序。 ReductionKernel 是用于 map/reducish 类型函数的自定义内核类型,但有不同的类型。官方 pyCUDA documentation 的示例部分更详细。

      祝你好运!

      【讨论】:

        【解决方案6】:

        一个有前途的库是Copperhead (alternative link),你只需要装饰你想由 GPU 运行的函数(然后你可以选择加入/退出它,看看什么是最好的用于该功能的 cpu 或 gpu)

        【讨论】:

        • 装饰器方法很有意义。 +1 建议。
        【解决方案7】:

        Scikits CUDA package 可能是一个更好的选择,前提是它不需要任何低级知识或 C 代码来进行任何可以表示为 numpy 数组操作的操作。

        【讨论】:

          【解决方案8】:

          我想知道同样的事情并进行了一些搜索。我发现下面链接的文章似乎回答了您的问题。但是,您早在 2014 年就问过这个问题,而 Nvidia 的文章没有具体日期。

          https://developer.nvidia.com/how-to-cuda-python

          视频介绍了设置、初始示例以及非常重要的分析。但是,我不知道您是否可以实现所有常用的通用计算模式。我认为你可以,因为据我所知,NumPy 没有任何限制。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-01-03
            • 1970-01-01
            • 2017-09-19
            • 1970-01-01
            • 1970-01-01
            • 2017-07-12
            • 2011-02-14
            相关资源
            最近更新 更多