问题标签 [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.
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 一起工作?
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。
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:
示例设置
错误信息
cuda - 如何诊断由于资源不足而导致的 CUDA 启动失败?
我在尝试启动 CUDA 内核(通过 PyCUDA)时遇到资源不足的错误,我想知道是否可以让系统告诉我我缺少哪个资源。显然系统知道什么资源已经耗尽,我也想查询一下。
我使用了占用计算器,一切似乎都还不错,所以要么没有覆盖一个角落案例,要么我用错了。我知道这不是寄存器(这似乎是通常的罪魁祸首),因为我使用的是 <= 63,但它仍然失败,在 CC 2.1 设备上出现 1x1x1 块和 1x1 网格。
谢谢你的帮助。我在 NVidia 板上发布了一个帖子:
http://forums.nvidia.com/index.php?showtopic=206261&st=0
但没有得到任何回应。如果答案是“您不能向系统询问该信息”,那也很高兴知道(有点……;)。
编辑:
我见过的寄存器使用最多的是 63。编辑上面的内容以反映这一点。
numpy - Pycuda 搞砸了 numpy 矩阵转置
为什么转置矩阵在转换为 a 时看起来不同pycuda.gpuarray
?
你能重现这个吗?什么可能导致这种情况?我使用了错误的方法吗?
示例代码
输出
cuda - 如何使用 PyCUDA 中的 `prepare` 函数
我在将正确的参数传递给prepare
函数(以及prepared_call)以在 PyCUDA 中分配共享内存时遇到问题。我以这种方式理解错误消息,我传递给 PyCUDA 的变量之一是 along
而不是我想要的float32
。但我看不到变量来自哪里。
此外,在我看来,官方示例和文档prepare
block
在是否需要方面相互矛盾None
。
输出
matrix - PyCUDA - 通过引用将矩阵从 python 传递到 C++ CUDA 代码
我必须编写一个获取两个矩阵 Nx3 和 Mx3 的 PyCUDA 函数,并返回一个矩阵 NxM,但我不知道如何在不知道列数的情况下通过引用传递矩阵。
我的代码基本上是这样的:
编译这个我收到一个错误:
也就是说,我不能在函数声明中使用 M 作为 res[][] 的列数。我不能留下未声明的列数......
我需要一个矩阵 NxM 作为输出,但我不知道该怎么做。你能帮助我吗?
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)示例。为了展开真实代码,我使用模板。
pycuda - 如何从 PyCUDA 中的现有 numpy 数组创建页面锁定内存?
PyCUDA帮助说明了如何创建一个空数组或归零数组,但没有说明如何将现有的 numpy 数组移动(?)到页面锁定的内存中。我是否需要获取 numpy 数组的指针并将其传递给pycuda.driver.PagelockedHostAllocation
?我该怎么做?
更新
<--狙击-->
更新 2
谢谢你的帮助。现在内存传输是页面锁定的,但程序以以下错误结束:
这是更新的代码:
c - pyCUDA 与 C 的性能差异?
我是 CUDA 编程的新手,我想知道 pyCUDA 的性能与用纯 C 实现的程序相比如何。性能大致相同吗?有没有我应该注意的瓶颈?
编辑: 我显然试图先用谷歌搜索这个问题,但很惊讶没有找到任何信息。即我会例外,pyCUDA 人在他们的常见问题解答中回答了这个问题。