【发布时间】:2023-03-14 18:55:01
【问题描述】:
我在 CUDA 统一内存 [2] 上使用 PyCUDA 的接口 [1]。在某些时候,我添加了随机数生成器 [3] 并盯着 Jupyter Notebook 中的死内核:
我将问题缩小到创建随机数生成器。或者,准确地说,到我这样做的那一刻:
import pycuda.curandom
from pycuda import autoinit, driver
import numpy as np
gpu_data_1 = driver.managed_zeros(shape=5, dtype=np.int32, mem_flags=driver.mem_attach_flags.GLOBAL)
gpu_generator = pycuda.curandom.XORWOWRandomNumberGenerator(pycuda.curandom.seed_getter_uniform)
gpu_data_2 = driver.managed_zeros(shape=5, dtype=np.int32, mem_flags=driver.mem_attach_flags.GLOBAL)
上面的代码在没有任何错误消息的情况下失败,但如果我将gpu_generator = ... 行高或低一行,它似乎工作正常。
我相信 PyCUDA 可能无法执行 prepare call,这归结为这个内核:
extern "C" {
__global__ void prepare(curandStateXORWOW *s, const int n,
unsigned int *v, const unsigned int o)
{
const int id = blockIdx.x*blockDim.x+threadIdx.x;
if (id < n)
curand_init(v[id], id, o, &s[id]);
}
}
知道可能是什么问题吗?
【问题讨论】:
-
您使用的是哪种 GPU?
-
@talonmies 它是 GeForce GTX 1060 3GB
-
在 pre-pascal GPU 上,我可以理解为什么会失败,但使用 GTX1060 则不应该出现这种情况。我有一个解决方法,不管它是否适合你 IDK。
-
如果您碰巧在 Windows 上,则 UM 将处于 pre-pascal 状态,即使您使用的是 pascal GPU。
标签: python cuda jupyter-notebook pycuda curand