Я использую интерфейс PyCUDA [ 1 ] поверх унифицированной памяти CUDA [ 2 ]. В какой-то момент я добавил генераторы случайных чисел [ 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
вызов , который идет к этому ядру:
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]);
}
}
Есть идеи, в чем может быть проблема?