问题标签 [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 投票
2 回答
411 浏览

cuda - Efficient method to check for matrix stability in CUDA

A number of algorithms iterate until a certain convergence criterion is reached (e.g. stability of a particular matrix). In many cases, one CUDA kernel must be launched per iteration. My question is: how then does one efficiently and accurately determine whether a matrix has changed over the course of the last kernel call? Here are three possibilities which seem equally unsatisfying:

  • Writing a global flag each time the matrix is modified inside the kernel. This works, but is highly inefficient and is not technically thread safe.
  • Using atomic operations to do the same as above. Again, this seems inefficient since in the worst case scenario one global write per thread occurs.
  • Using a reduction kernel to compute some parameter of the matrix (e.g. sum, mean, variance). This might be faster in some cases, but still seems like overkill. Also, it is possible to dream up cases where a matrix has changed but the sum/mean/variance haven't (e.g. two elements are swapped).

Is there any of the three options above, or an alternative, that is considered best practice and/or is generally more efficient?

0 投票
1 回答
260 浏览

cuda - 为什么更改内核参数会耗尽我的资源?

我在下面做了一个非常简单的内核来练习CUDA。

现在,如果我们运行上面的代码,执行通过 for 循环的第一次迭代就可以了。但是,在循环的第二次迭代期间,我收到以下错误。

如果我拿走线路width -= 1,错误就会消失。这是为什么?我不能第二次更改内核的参数吗?供参考,这里是clouds.jpg.

在此处输入图像描述

0 投票
1 回答
957 浏览

python - PyCuda 中的 cudaBindTextureToArray

有没有办法使用 PyCuda 将 gpu 上已经存在的数组绑定到纹理?

已经有一个将 CPU 上的数组绑定到纹理,但如果该数组已经在设备上cuda.bind_array_to_texref(cuda.make_multichannel_2d_array(...), texref),我在 PyCuda 中找不到等价物。cudaBindTextureToArray例如,做:

0 投票
1 回答
2016 浏览

python - CUDA 中的 scipy.interpolate.griddata 等效项

我正在尝试在 python 中执行拟合值迭代(FVI)(涉及使用分段线性插值逼近 5 维函数)。

scipy.interpolate.griddata 非常适合这个。但是,我需要调用插值程序几千次(因为 FVI 是基于 MC 的算法)。

所以基本上,已知函数的点集是静态的(并且很大 - 比如说 32k),但是我需要近似的点(它们是原始集的小扰动)非常大(比如 32k x 5000)。

是否有已移植到 CUDA 的 scipy.interpolate.griddata 的实现?或者,有没有办法以某种方式加快计算速度?

谢谢。

0 投票
1 回答
1542 浏览

python - N 点之间距离计算的 pyCUDA 基准测试结果令人失望

为基准测试目的设置了以下脚本。它使用欧几里得 L2 范数计算 N 点之间的距离。实现了三个不同的例程:

  1. scipy.spatial.distance.pdist使用该函数的高级解决方案。
  2. 相当低级的 OpenMP 支持的scipy.weave.inline解决方案。
  3. pyCUDA 驱动的 GPGPU 解决方案。

以下是使用 GTX660(2GB RAM)在 i5-3470(16GB RAM)上的基准测试结果:

我对 pyCUDA 的性能有点失望。由于我是 CUDA 的新手,因此我可能在这里缺少一些东西。那么问题的症结在哪里呢?我是否达到了全局内存带宽的限制?块和网格大小的选择不当?

编辑:

我添加了哈希爆炸线

在文件的顶部并使其可执行。weave.inline使用和注释掉计算后scipy.spatial.distance.pdist,NVIDIA Visual Profiler 会提示以下结果:

NVIDIA 视觉分析器

0 投票
1 回答
706 浏览

c++ - 使用 pycuda 将二维矩阵相乘。

如何迭代两个数组?

输入: X = [[1,2], [3,4], [5,6], [7,8], [9,10]]Y = [[0,0], [1,1]]

预期输出: [[0, 3], [0, 7], [0, 11], [0, 15]. [0, 19]]

我怎样才能做到这一点?我的困难是在 X 和 Y 上进行迭代。

预期的:

[idx: 0 idy: 0 = 0] [idx: 1 idy: 0 = 3] [idx: 2 idy: 0 = 0] [idx: 3 idy: 0 = 7] [idx: 4 idy: 0 = 0] [idx: 0 idy: 1 = 11] [idx: 1 idy: 1 = 0] [idx: 2 idy: 1 = 15] [idx: 3 idy: 1 = 0] [idx: 4 idy: 1 = 19]

0 投票
0 回答
829 浏览

pycuda - 使用 PyCUDA + CURAND 生成许多随机模拟

对于最多 100000 (1M) 的 numDraws,我可以轻松执行以下操作

但是,对于 N = 10000000 (10M),我在将随机值传输到 GPU 时耗尽了 GPU 内存。我想一次解决两个问题:(1)有效地使用 GPU 生成随机数和(2)消除大小限制。

现在,我不确定最好的方法。这里的代码展示了如何使用“原始”PyCUDA 制作自定义的普通随机数生成器,以从 CPU 生成的统一随机数中执行 Box-Muller,但我认为使用 CURAND 会更有意义。但是,使用 PyCuda 的 CURAND 接口似乎给了我相同的大小限制(而且,我相信它会产生许多随机数生成器,这会导致高开销 - 这是来自 PyCUDA CURAND API 文档警告here。所以,我想一种可能性是使用PyCUDA 对底层 CURAND 的自定义调用。这都是猜测工作。

但是,我真正的问题是解决上述两个问题的最佳方法。

非常感谢示例、指针和建议。

0 投票
1 回答
8843 浏览

python - pycuda.driver 中的 pycuda ImportError

我正在尝试编译一些用于我的 GPU 的源代码。我为此使用pycuda。当我编译源代码时,我从 Python 收到一些错误:

有没有人遇到过类似的问题?我该如何解决这个问题?我使用 Windows 7 64 位,我的 GPU (NVIDIA GT520M) 和 CUDA Toolkit v.5.0 的最后一个驱动程序。

0 投票
2 回答
9414 浏览

python - 用于处理大数据的 Pycuda 块和网格

我需要帮助来了解我的块和网格的大小。我正在构建一个 python 应用程序来执行基于 scipy 的度量计算:欧几里得距离、曼哈顿、皮尔森、余弦、加入其他。

该项目是PycudaDistances

它似乎适用于小型阵列。当我进行更详尽的测试时,不幸的是它没有用。我下载了电影镜头集(http://www.grouplens.org/node/73)。

使用Movielens100k,我声明了一个形状为 (943, 1682) 的数组。即用户对943部和1682部影片进行评价。不是分类器用户的电影我将值配置为 0。

使用更大的数组算法不再有效。我面临以下错误:

pycuda._driver.LogicError:cuFuncSetBlockShape 失败:无效值。

研究这个错误,我找到了一个解释,告诉 Andrew 支持 512 个线程加入并使用更大的块,必须使用块和网格。

我想要一个帮助来调整算法欧几里得距离数组,以适应从小到大的数组。

有关更多详细信息,请参阅:https ://github.com/vinigracindo/pycudaDistances/blob/master/distances.py

0 投票
1 回答
1082 浏览

python - OS X 10.8 上的 PyCuda / 多处理问题

我正在做一个项目,我将计算任务分配给多个 python 进程,每个进程都与自己的 CUDA 设备相关联。

产生子进程时,我使用以下代码:

CudaWorker 在另一个文件中定义如下:

当我在 Windows 7 或 Linux 上运行此代码时,我没有任何问题。在装有 OSX 10.8.2、Cuda 5.0 和 PyCuda 2012.1 的 MacBook Pro 上运行代码时,出现以下错误:

我没有在我的 Mac 上分叉新进程的情况下运行 PyCuda 脚本没有问题。我只在生成新进程时遇到这个问题。

有没有人遇到过这个问题?