问题标签 [pycuda]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1703 浏览

python - 让 Pycuda 在 2 gpus 上使用 Mpi4py

我正在尝试跨两个 gpus 运行 pycuda 程序。我读过 Talonmies 的一篇很棒的文章,解释了你如何使用线程库来做这件事,这篇文章还提到这可以通过 mpi4py 实现。

当我用 pycuda 运行 mpi4py 时,程序给出错误:self.ctx = driver.Device(gpuid).max_context pycuda._driver.logicError: cuDeviceGet failed: not initialized

也许这是因为我试图同时初始化两个 gpu 设备。有没有人有一个非常简短的例子来说明我们如何让 2 gpus 与 mpi4py 一起工作?

0 投票
1 回答
912 浏览

python - Python 中的自动 CudaMat 转换

我正在考虑使用某种形式的 CUDA 加速我的 python 代码,这都是矩阵数学。目前我的代码使用的是 Python 和 Numpy,因此使用 PyCUDA 或 CudaMat 之类的东西重写它似乎不难。

然而,在我第一次尝试使用 CudaMat 时,我意识到我必须重新排列很多方程才能将所有操作都保留在 GPU 上。这包括创建许多临时变量,以便我可以存储操作的结果。

我理解为什么这是必要的,但是它使曾经容易阅读的方程式变得有些混乱,难以检查其正确性。此外,我希望以后能够轻松地修改方程式,这不是转换后的形式。

Theano 包通过首先创建操作的符号表示,然后将它们编译到 CUDA 来设法做到这一点。然而,在尝试了 Theano 一段时间后,我对一切都是那么不透明感到沮丧。例如,仅获取 myvar.shape[0] 的实际值就变得很困难,因为直到很久以后才会对树进行评估。我也更喜欢更少的框架,在该框架中我的代码非常符合一个库,该库在 Numpy 的位置上不可见。

因此,我真正想要的是更简单的东西。我不想要自动区分(如果我需要,还有其他包,如 OpenOpt 可以做到这一点),或者树的优化,而只是从标准 Numpy 表示法转换为 CudaMat/PyCUDA/somethingCUDA。事实上,我希望能够在没有任何 CUDA 代码进行测试的情况下让它评估为 Numpy。

我目前正在考虑自己写这篇文章,但在考虑这样的冒险之前,我想看看是否有其他人知道类似的项目或一个好的起点。我知道的唯一可能与此接近的其他项目是 SymPy,但我不知道适应这个目的有多容易。

我目前的想法是创建一个看起来像 Numpy.array 类的数组类。它的唯一功能是构建一棵树。在任何时候,该符号数组类都可以转换为 Numpy 数组类并进行评估(也会有一对一的奇偶校验)。或者,可以遍历数组类并生成 CudaMat 命令。如果需要优化,可以在该阶段完成(例如重新排序操作、创建临时变量等),而不会妨碍检查正在发生的事情。

任何想法/评论/等。对此将不胜感激!

更新

一个用例可能看起来像(其中 sym 是理论模块),我们可能正在做一些事情,比如计算梯度:

在这种情况下,grad_W实际上只是一棵包含需要完成的操作的树。如果您想正常评估表达式(即通过 Numpy),您可以执行以下操作:

它只会执行树所代表的 Numpy 命令。另一方面,如果您想使用 CUDA,您可以:

这会将树转换为可以通过 CUDA 执行的表达式(这可能以几种不同的方式发生)。

这样,它应该是微不足道的:(1) testgrad_W.asNumpy() == grad_W.asCUDA()和 (2) 将您预先存在的代码转换为使用 CUDA。

0 投票
2 回答
3992 浏览

python - 如何使用 Visual Profiler 分析 PyCuda 代码?

当我创建一个新会话并告诉 Visual Profiler 启动我的 python/pycuda 脚本时,我收到以下错误消息:Execution run #1 of program '' failed, exit code: 255

这些是我的偏好:

  • 发射:python "/pathtopycudafile/mysuperkernel.py"
  • 工作目录:"/pathtopycudafile/mysuperkernel.py"
  • 论据:[empty]

我在 Ubuntu 10.10 下使用 CUDA 4.0。64位。分析编译的示例有效。

ps 我知道这样的问题如何在 Linux 中分析 PyCuda 代码?,但似乎是一个不相关的问题。

最小的例子

pycudaexample.py:

示例设置 使用设置的屏幕截图

错误信息

错误信息截图

0 投票
2 回答
1880 浏览

cuda - 如何诊断由于资源不足而导致的 CUDA 启动失败?

我在尝试启动 CUDA 内核(通过 PyCUDA)时遇到资源不足的错误,我想知道是否可以让系统告诉我我缺少哪个资源。显然系统知道什么资源已经耗尽,我也想查询一下。

我使用了占用计算器,一切似乎都还不错,所以要么没有覆盖一个角落案例,要么我用错了。我知道这不是寄存器(这似乎是通常的罪魁祸首),因为我使用的是 <= 63,但它仍然失败,在 CC 2.1 设备上出现 1x1x1 块和 1x1 网格。

谢谢你的帮助。我在 NVidia 板上发布了一个帖子:

http://forums.nvidia.com/index.php?showtopic=206261&st=0

但没有得到任何回应。如果答案是“您不能向系统询问该信息”,那也很高兴知道(有点……;)。

编辑:

我见过的寄存器使用最多的是 63。编辑上面的内容以反映这一点。

0 投票
2 回答
852 浏览

numpy - Pycuda 搞砸了 numpy 矩阵转置

为什么转置矩阵在转换为 a 时看起来不同pycuda.gpuarray

你能重现这个吗?什么可能导致这种情况?我使用了错误的方法吗?

示例代码

输出

0 投票
1 回答
2551 浏览

cuda - 如何使用 PyCUDA 中的 `prepare` 函数

我在将正确的参数传递给prepare函数(以及prepared_call)以在 PyCUDA 中分配共享内存时遇到问题。我以这种方式理解错误消息,我传递给 PyCUDA 的变量之一是 along而不是我想要的float32。但我看不到变量来自哪里。

此外,在我看来,官方示例文档prepareblock在是否需要方面相互矛盾None

输出

0 投票
1 回答
1539 浏览

matrix - PyCUDA - 通过引用将矩阵从 python 传递到 C++ CUDA 代码

我必须编写一个获取两个矩阵 Nx3 和 Mx3 的 PyCUDA 函数,并返回一个矩阵 NxM,但我不知道如何在不知道列数的情况下通过引用传递矩阵。

我的代码基本上是这样的:

编译这个我收到一个错误:

也就是说,我不能在函数声明中使用 M 作为 res[][] 的列数。我不能留下未声明的列数......

我需要一个矩阵 NxM 作为输出,但我不知道该怎么做。你能帮助我吗?

0 投票
1 回答
1265 浏览

cuda - 执行循环展开时出现“资源不足”错误

当我将内核中的展开从 8 个循环增加到 9 个循环时,它会因out of resources错误而中断。

我阅读了如何诊断由于资源不足而导致的 CUDA 启动失败?参数不匹配和寄存器的过度使用可能是一个问题,但这里似乎不是这种情况。

我的内核计算n点和m质心之间的距离,并为每个点选择最接近的质心。它适用于 8 个维度,但不适用于 9 个维度。当我dimensions=9为距离计算设置并取消注释两条线时,我得到一个pycuda._driver.LaunchError: cuLaunchGrid failed: launch out of resources.

您认为什么可能导致这种行为?还有哪些其他问题会导致out of resources*?

我使用 Quadro FX580。这是最小的(ish)示例。为了展开真实代码,我使用模板。

0 投票
3 回答
1809 浏览

pycuda - 如何从 PyCUDA 中的现有 numpy 数组创建页面锁定内存?

PyCUDA帮助说明了如何创建一个空数组或归零数组,但没有说明如何将现有的 numpy 数组移动(?)到页面锁定的内存中。我是否需要获取 numpy 数组的指针并将其传递给pycuda.driver.PagelockedHostAllocation?我该怎么做?

更新

<--狙击-->

更新 2

谢谢的帮助。现在内存传输是页面锁定的,但程序以以下错误结束:

这是更新的代码:

0 投票
5 回答
9963 浏览

c - pyCUDA 与 C 的性能差异?

我是 CUDA 编程的新手,我想知道 pyCUDA 的性能与用纯 C 实现的程序相比如何。性能大致相同吗?有没有我应该注意的瓶颈?

编辑: 我显然试图先用谷歌搜索这个问题,但很惊讶没有找到任何信息。即我会例外,pyCUDA 人在他们的常见问题解答中回答了这个问题。