- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 CUDA 的新手,我想知道是否 PyCUDA (free)或 NumbaPro CUDA Python (不是免费的)对我来说更好(假设图书馆费用不是问题)。
两者似乎都要求您使用各自的 Python 方言。但是,PyCUDA 似乎要求您用 C
代码编写内核函数,这比使用 NumbaPro 更麻烦,NumbaPro 似乎为您完成了所有繁重的工作。
真的是这样吗?会有显着的性能差异吗?
最佳答案
让我们来谈谈这些库中的每一个:
PyCUDA:
PyCUDA是 CUDA 的 Python 编程环境,它使您可以从 Python 访问 Nvidia 的 CUDA 并行计算 API。 PyCUDA用C++(基础层)和Python编写,C++代码将在NVIDIA芯片上执行,Python代码编译、执行并获取C++代码的结果并自动管理资源,使其成为功能强大的库之一CUDA.
PyCUDA 与 PyOpenCl 略有不同,可用于在各种平台上运行代码,包括 Intel、AMD、NVIDIA 和 ATI 芯片。与只能在 NVIDIA 芯片上运行的 PyCUDA 不同:
Python + CUDA = PyCUDA
Python + OpenCL = PyOpenCL
NUMBA/NumbaPro:
NUMBA :NumbaPro 或最近的 Numba(NumbaPro 已被弃用,其代码生成功能已移至开源 Numba。)是由 Anaconda, Inc. 赞助的开源 NumPy 感知 Python 优化编译器。它使用卓越的 LLVM 编译器基础架构将 Python 语法编译为机器代码。 Numba支持编译 Python 以在 CPU 或 GPU 硬件上运行,并且它基本上是用 Python 编写的。它易于安装和实现。
正如@Wang 提到的,Pycuda 比 Numba 更快。
关于python - PyCUDA 和 NumbaPro CUDA Python 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45164459/
我创建了一个形状为 (64, 128) 的 float32 numpy 数组,我想将它发送到 GPU。我怎么做?我的内核函数应该接受哪些参数? float** myArray? 我试过直接将数组原样发
示例代码: import pycuda.autoinit import pycuda.driver as drv import numpy from pycuda.compiler import So
我正在尝试编译一些源代码以使用我的 GPU。我为此使用pycuda。当我编译源代码时,我收到一些来自 Python 的错误: C:\Users\Dmitriy\wcm>python ws_gpu.py
我正在尝试在 PyCUDA 中初始化 2D 表面并用 NumPy 2D 数组中的值填充它。据我所知,这个想法是 打开drv.ArrayDescriptor, 使用这个描述符创建drv.Array, 使
我想在 flask 服务器上运行 pyCUDA 代码。该文件直接使用python3正确运行,但使用flask调用相应函数时失败。 相关代码如下: cudaFlask.py: import pycuda
我对 cuda 有一个奇怪的问题, 在下面的片段中, #include #define OUTPUT_SIZE 26 typedef $PRECISION REAL; extern
我在这里有一个 pycuda 程序,它从命令行读取图像并用反转的颜色保存一个版本: import pycuda.autoinit import pycuda.driver as device from
如何让 PyCuda 提取字符串数组而不是一个字符字符串?如果取消注释 C 代码中的该行,您将看到它迭代每个字符而不是每个字符串。 现在我只是想计算每个字符串的长度,但最终会将其变成一个词频计数器
我正在尝试在 Pycuda 代码中实现一个结构,但出现越界错误。我尝试遵循 this教程,但我无法让它适用于我的情况。 该问题很可能是由于指针使用不当造成的,例如该教程表明必须分配指针 memsize
我在安装了 python 2.7(32 位)和安装了 cuda 7.5 whl 的 pycuda 的 Windows 机器上。我在运行示例程序来测试 pycuda 时出错。 Traceback (mo
我这里有一个 pycuda 程序,它从命令行读取图像并保存颜色反转的版本: import pycuda.autoinit import pycuda.driver as device from pyc
足够简单 start=cuda.Event() func(args,block=blockdims) cuda.memcpy_dtoh(d,h) end=cuda.Event() dur=start.
PyCUDA,尽管有其所有缺点,通常都会提供非常好的示例/可从 wiki 下载。但我在示例或文档(或粗略的谷歌搜索)中找不到任何内容来演示 PyCUDA 将工作负载动态分配到多个设备的方法。 有人可以
我正在使用 pycuda 制作相对论光线追踪器。基本上,对于大型 2D 数组中的每个“像素”,我们必须使用 Runge Kutta 求解 6 个 ODE 系统。由于每个集成都独立于其余集成,因此应该非
我是 PyCUDA 的新手,正在浏览 PyCUDA 网站上的一些示例。我正在尝试弄清楚某些代码行背后的逻辑,如果有人解释了它背后的想法,我将不胜感激。 以下代码片段来自 PyCUDA 网站。函数定义里
应该足够简单;我确实想将一个 int 发送到 SourceModule 内核声明,其中 C 函数 __global__......(int value,.....) 随着值的声明和调用... valu
in desaturate_image redarray_gpu = cuda.mem_alloc(self.redarray.nbytes) pycuda._driver.LogicErro
在简单的 CUDA 程序中,我们可以通过包含 cuPrintf.h 来按线程打印消息,但在 PyCUDA 中执行此操作在任何地方都没有解释。如何在 PyCUDA 中做到这一点? 最佳答案 在 Comp
我正在使用 pyCUDA 进行 CUDA 编程。我需要在内核函数中使用随机数。 CURAND 库在其中不起作用(pyCUDA)。由于GPU有很多工作要做,在CPU内部生成随机数然后将它们传输到GPU是
我正在尝试将二维复数数组传递到 PyCUDA 内核中,但得到了意想不到的结果。 这是我的测试代码: import numpy as np import pycuda.driver as cuda im
我是一名优秀的程序员,十分优秀!