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

cuda - 从pycuda中的全局函数调用设备函数

我是 PyCUDA 的新手。我想从用声明__device__的函数调用用声明的函数__global__。我怎样才能在 pyCUDA 中做到这一点?

上面的代码给了我以下错误

0 投票
1 回答
1038 浏览

cuda - 在 PyCUDA 中打印消息

在简单的 CUDA 程序中,我们可以通过包含 cuPrintf.h 来按线程打印消息,但是在 PyCUDA 中这样做并没有在任何地方解释。如何在 PyCUDA 中做到这一点?

0 投票
2 回答
2071 浏览

cuda - cuda——内存不足(线程和块问题)——地址越界

我正在使用 63 个寄存器/线程,所以(最多 32768 个)我可以使用大约 520 个线程。在这个例子中我现在使用 512 个线程。

(并行性在全局 computeEHfields 函数函数内的函数“computeEvec”中。)问题是:

1)下面的内存检查错误。

2)当我使用 numPointsRp>2000 时,它显示“内存不足”,但是(如果我没有做错)我计算全局内存并且没关系。

- - - - - - - - - - - - - - - -更新 - - - - - - - - - ---------

我用 cuda-memcheck 运行程序,它给了我(仅当 numPointsRs>numPointsRp 时):

========= 大小为 4 的无效全局读取

========= 在 computeEHfields 中的 0x00000428

========= 块 (0,0,0) 中的线程 (2,0,0)

========= 地址 0x4001076e0 超出范围

========= ========= 大小为 4 的无效全局读取

========= 在 computeEHfields 中的 0x00000428

========= 块 (0,0,0) 中的线程 (1,0,0)

========= 地址 0x4001076e0 超出范围

========= ========= 大小为 4 的无效全局读取

========= 在 computeEHfields 中的 0x00000428

========= 块 (0,0,0) 中的线程 (0,0,0)

========= 地址 0x4001076e0 超出范围

错误摘要:160 个错误

- - - - - -编辑 - - - - - - - - - - - - - -

此外,有时(如果我只使用线程而不使用块(我没有测试它的块))如果例如我有 numPointsRs=1000 和 numPointsRp=100 然后更改 numPointsRp=200 然后再次更改 numPointsRp= 100 我不接受第一个结果!

--------------------GPU型号---------------------------- --------------------

0 投票
2 回答
523 浏览

cuda - pycuda only block(N,1,1) 有效

我不明白为什么下面的程序对于 block=N,1,1 运行正常,但对于 1,1,N (结果是无效值)或 1,N,1 (结果是 0,1,0... ..0) 或 10,50,1(结果为 0,1,0..0)(N=500)。

- - - - - - - 编辑 - - - - - - - - - - - - - - - - - - -----

好的,我忘了如果我使用 int idx=threadIdx.y ,那么我可以使用 block(1,N,1) 。

但是,那么,我总是必须使用这个排列块(N,1,1)吗?

我必须明白这一点!谢谢!

0 投票
1 回答
815 浏览

python - PyCuda 执行错误

这是我用于旋转的 pycuda 代码。我已经安装了最新的 cuda 驱动程序,并且我使用了支持 cuda 的 nvidia gpu。我还安装了 cuda 工具包和 pycuda 驱动程序。我仍然收到这个奇怪的错误。

这是我的错误。

请帮我解决这个问题。

0 投票
1 回答
1424 浏览

python - 使用 pycuda.driver.Event 测量时间会给出错误的结果

我从PyCuda示例中运行 SimpleSpeedTest.py,产生以下输出:

前四个时间测量值是合理的,但最后一个(0.000002s)距离很远。CPU 结果应该是最慢的,但它比最快的 GPU 方法快几个数量级。所以显然测量的时间一定是错误的。这很奇怪,因为对于前四个结果,相同的计时方法似乎工作得很好。

所以我从 SimpleSpeedTest.py 中获取了一些代码,并制作了一个小测试文件[2],它产生了:

选项 1pycuda.driver.Event.record()使用(如在 SimpleSpeedTest.py 中)测量持续时间,选项 2使用time.clock(). 同样,选项 1 关闭,而选项 2 给出了合理的结果(运行测试文件所需的时间约为 6 秒)。

有谁知道为什么会这样?

由于 SimpleSpeedTest.py 支持使用选项 1,是否是我的设置导致了问题?我正在运行 GTX 470、显示驱动程序 301.42、CUDA 4.2、Python 2.7 64、PyCuda 2012.1、X5650 Xeon

[2]测试文件:

0 投票
3 回答
1366 浏览

cuda - driver.Context.synchronize()- 还有什么要考虑的——清理操作失败

我在这里有 这段代码(由于答案而修改)。

信息

32 字节堆栈帧,0 字节溢出存储,0 字节溢出加载
ptxas 信息:使用 46 个寄存器,120 字节 cmem[0],176 字节 cmem[2],76 字节 cmem[16]

我不知道还要考虑什么才能使其适用于点“numPointsRs”和“numPointsRp”的不同组合

例如,当我使用 Rs=10000 和 Rp=100000 运行代码时,block=(128,1,1),grid=(200,1) 很好。

我的计算:

46 个寄存器*128 线程=5888 个寄存器。

我的卡有限制 32768 个寄存器,所以 32768/5888=5 +some => 5 块/SM
(我的卡有限制 6)。

使用占用率计算器,我发现使用 128 个线程/块给了我 42% 并且在我的卡的限制范围内。

此外,每个 MP 的线程数为 640(限制为 1536)

现在,如果我尝试使用 Rs=100000 和 Rp=100000(对于相同的线程和块)它会给我标题中的消息,其中:

cuEventDestroy 失败:启动超时

cuModuleUnload 失败:启动超时

1)我不知道/理解还需要计算什么。

2)我不明白我们如何使用/查找块的数量。我可以看到,大多数情况下,有人放(threads-1+points)/threads,但这仍然不起作用。

- - - - - - - 更新 - - - - - - - - - - - - - - - - - - ------------

使用 driver.Context.synchronize() 后,代码适用于许多点(1000000)!

但是,这个添加对代码有什么影响?(对于许多点,屏幕冻结 1 分钟或更长时间)。我应该使用它还是不使用它?

--------------已更新2----------------------------------- ------------

现在,代码在不做任何事情的情况下无法再次工作!

代码快照:

我的卡:

0 投票
1 回答
593 浏览

pycuda - PyCuda多线程执行错误

这是我的 pycuda 代码。执行时出现线程错误。我正在尝试在其中实现 pycuda 线程。我已经搜索了谷歌但找不到答案。对于 pycuda 我是 Internet 的资源也非常有限。所以伙计们请帮帮我。

0 投票
1 回答
508 浏览

cuda - pycuda 似乎是不确定的

我对 cuda 有一个奇怪的问题,

在下面的片段中,

当我编译并运行代码(通过 pycuda)时,它按预期工作。当我删除 printf 时,结果很奇怪 - 大多数数组都正确填充,但其中一些似乎完全随机。

这是完整的python代码:

基本上,使用内核中的 printf,错误为 0 - 没有它,它会打印一些随机错误(在我的机器上大约 2452(最大值)和 -2583(最小值))

我不知道为什么。

我使用 geforce 570 在 pycuda 2012.2(Windows 7 64 位)上运行 cuda 4.2。

谢谢。

0 投票
1 回答
2056 浏览

cuda - pycuda::complex 数组上的元素智能函数

我想在大型 2D 复杂数组(最终 2* 12x2 *12 数据点)上运行一个函数。但是,pycuda 不能按预期工作。ElementWise 函数不适用于二维数组,因此我使用了具有块大小的 SourceModule 函数。

现在的问题是,GPU 上的 C 代码给出的结果与 CPU 上的 numpy 计算结果不同。产生了非常大和奇怪的数字。

我正在使用以下代码。怎么了?