问题标签 [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 回答
6177 浏览

python - PyCUDA:查询设备状态(特别是内存)

PyCUDA 的文档顺便提到了驱动程序接口调用,但我有点想,看不出如何从我的代码中获取诸如“SHARED_SIZE_BYTES”之类的信息。

谁能指出以这种方式查询设备的任何示例?

是否有可能/如何检查设备状态(例如在 malloc/memcpy 和内核启动之间)以实现一些机器动态操作?(我希望能够以“友好”的方式处理支持多个内核的设备。

0 投票
2 回答
784 浏览

debugging - CUDA/PyCUDA:诊断在 cuda-gdb 下消失的启动失败

任何人都知道在 cuda-gdb 下运行时消失的内核启动失败的可能调查途径吗?内存分配在规范范围内,每次在同一内核的同一运行中启动都会失败,并且(到目前为止)它在调试器中没有失败。

哦,伟大的大师,现在呢?

0 投票
1 回答
936 浏览

python - pycuda.debug 实际上做了什么?

作为一个更大项目的一部分,我遇到了一个奇怪的一致错误,我无法理解,但它是一个典型的“黑匣子”错误;与 一起运行时cuda-gdb python -m pycuda.debug prog.py -args,它运行良好,但速度很慢。如果我放弃 pycuda.debug,它就会中断。一致地,在多内核执行的同一点上。

解释; 我有(目前三个)内核,用于不同的网格和块排列,以解决更大优化问题的“切片”。这些严格来说应该可以工作,也可以不工作,因为函数本身只被告知“这里还有一些数据”,除了数据的内容之外,不知道诸如迭代次数之类的任何内容,无论它们的输入数据是否已分区或不是,直到这一点,他们表现完美。

基本上,如果没有 pycuda.debug 将调试符号暴露给 GDB,我看不到发生了什么,但我也看不到 pycuda.debug 的问题。

pycuda 实际上做了什么,所以我知道在我的内核代码中寻找什么?

0 投票
1 回答
1012 浏览

python - PyCUDA;如何动态地将工作负载分配到多个设备

PyCUDA,尽管有很多缺点,但通常会提供非常好的示例/可从 wiki 下载。但是我在示例或文档(或粗略的谷歌搜索)中找不到任何东西,展示了 PyCUDA 将工作负载动态分配给多个设备的方式。

任何人都可以暗示我应该做什么或指出我的例子吗?

突然出现在我脑海中的一个想法是使用多处理,生成一个由 N 个进程组成的池,每个进程都绑定到一个设备,然后在调用该类时(我将所有 gpu 函数放在一个单独的类中;可能不是最好的主意,但它工作)它循环的多进程。这是一个多么好的/迟钝的想法?

PS 我的开发机器是 1 个 GPU,我的测试机器是 4 个 GPU,所以我需要任何能够处理动态数量的设备的解决方案(它们的计算能力不同也无济于事,但这就是生活)

0 投票
2 回答
904 浏览

python - PyCUDA/CUDA:非确定性启动失败的原因?

任何关注 CUDA 的人都可能会看到我对我参与的项目的一些疑问,但对于那些没有的人,我会总结一下。(抱歉提前问了这么长的问题)

三个内核,一个基于一些输入变量生成一个数据集(处理位组合,因此可以指数增长),另一个解决这些生成的线性系统,另一个缩减内核以获得最终结果。这三个内核作为特定系统优化算法的一部分反复运行。

在我的开发机器(Geforce 9800GT,在 CUDA 4.0 下运行)上,无论我向它扔什么(达到基于所述指数性质的计算限制),它一直都能完美运行,但在测试机器上(4xTesla S1070's ,只有一个使用,在 CUDA 3.1 下)完全相同的代码(Python 基础,CUDA 内核的 PyCUDA 接口),在“小”情况下产生确切的结果,但在中等情况下,求解阶段在随机迭代中失败。

我之前遇到的这段代码的问题与问题的数值不稳定性有关,并且本质上是确定性的(即每次都在完全相同的阶段失败),但坦率地说,这个问题让我很生气,因为它随时会失败。

因此,我没有可靠的方法将 CUDA 代码从 Python 框架中分离出来并进行适当的调试,而且 PyCUDA 的调试器支持至少可以说是有问题的。

我检查了通常的事情,比如内核调用前检查设备上的空闲内存,占用计算表明网格和块分配很好。我没有做任何疯狂的 4.0 特定的东西,我在每次迭代时释放我在设备上分配的所有东西,并且我已经将所有数据类型固定为浮点数。

TL;DR,有没有人遇到过我在发行说明中没有看到的关于 CUDA 3.1 的任何问题,或者 PyCUDA 的自动初始化内存管理环境有任何问题会导致重复调用时间歇性启动失败?

0 投票
2 回答
15199 浏览

python - 使用 PyCUDA 进行 Python 多处理

我有一个问题,我想在多个 CUDA 设备上拆分,但我怀疑我当前的系统架构阻碍了我;

我设置的是一个 GPU 类,具有在 GPU 上执行操作的功能(奇怪)。这些操作的风格

我原以为 N 个设备会有 N 个 gpuinstances,但我对多处理的了解还不够,无法看到应用它的最简单方法,以便异步分配每个设备,奇怪的是,我遇到的示例很少处理后整理结果的具体演示。

谁能给我这方面的任何指示?

更新 感谢 Kaloyan 在多处理领域的指导;如果 CUDA 不是特别的症结所在,我会将您标记为已回答。对不起。

在使用这个实现之前,gpuinstance 类启动了 CUDA 设备,import pycuda.autoinit但是这似乎不起作用,invalid context一旦每个(正确范围的)线程遇到 cuda 命令,就会抛出错误。然后我尝试在__init__类的构造函数中手动初始化......

我的假设是在创建 gpuinstances 列表和线程使用它们之间保留上下文,因此每个设备都位于自己的上下文中。

(我还实现了一个析构函数来进行pop/detach清理)

问题是,invalid context一旦线程尝试接触 CUDA,异常仍然会出现。

有什么想法吗?感谢能走到这一步。自动为“香蕉”工作的人投票!:P

0 投票
2 回答
2834 浏览

python - PyCUDA+Threading = 内核调用的无效句柄

我会尽力说明这一点;

我有两节课;GPU(Object),用于对 GPU 功能的一般访问,以及multifunc(threading.Thread)我正在尝试多设备化的特定功能。包含所有后续用GPU例所需的大部分“第一次”处理,因此multifunc从其实例作为参数传递(以及通常的队列等)调用。GPUself__init__

不幸的是,multifunc废话:

第一个停靠点当然是块尺寸,但它们在范围内(即使我强制也有相同的行为block=(1,1,1),同样网格。

基本上,在 内multifunc,所有常用的 CUDA memalloc 等函数都可以正常工作,(这意味着它不是上下文问题)所以问题一定SourceModule出在内核函数本身的 ing 上。

我有一个内核模板,其中包含我所有的文件范围的 CUDA 代码,并且模板是jinja2GPU初始化中完成的。无论该模板化对象是否转换为SourceModulein 中的对象GPU并传递给multifunc,或者其转换是否multifunc发生相同的事情。

谷歌在这个特定问题上基本上没有用,但是按照堆栈,我假设Invalid Handle被引用的是内核函数句柄,而不是块尺寸发生的任何奇怪的事情。

我知道这是一个非常极端的情况,但我确信有人可以看到我错过的问题。

0 投票
1 回答
3454 浏览

cuda - 我在哪里可以找到“Cuda/PyCuda for Dummies”教程

我想在夏天学习如何进行 GPU 编程,我对所有语言/库都开放,但对 PyCuda 最感兴趣。

我不是一个强大的程序员;我可以用 Java 编写大多数我想要的程序,并理解 C 的基本原理,但是当我在后者中尝试任何复杂的东西时,几乎可以肯定会出现段错误或 malloc 错误。

因此,我真的需要一个“傻瓜”教程/指南/文档。理想情况下,指南将从 GPU 编程的基础知识到相当复杂的科学/数值编程,同时清晰而深入地解释每个细节,而不是认为任何先验知识是理所当然的。

0 投票
2 回答
1264 浏览

linux - CUDA/PyCUDA:哪个 GPU 正在运行 X11?

在具有多个 GPU 的 Linux 系统中,您如何确定哪个 GPU 正在运行 X11,哪个完全免费运行 CUDA 内核?在具有运行 X11 的低功率 GPU 和运行内核的高功率 GPU 的系统中,这可以通过一些启发式方法来确定以使用更快的卡。但在两张相等卡的系统上,不能使用此方法。是否有 CUDA 和/或 X11 API 来确定这一点?

更新:命令“nvidia-smi -a”显示是否连接了“显示器”。我尚未确定这是否意味着物理连接、逻辑连接(运行 X11)或两者兼而有之。在此命令上运行 strace 会显示调用了许多 ioctl,并且没有调用 X11,因此假设卡报告显示器已物理连接。

0 投票
2 回答
1393 浏览

cuda - 在共享内存中创建数组,无需模板,如 PyOpenCL

如何在不修改内核的情况下使用官方示例中看到的模板在共享内存中创建数组。还是以官方方式使用模板?

在 PyOpenCL 中,我可以通过设置内核参数在本地内存中创建一个数组