Я пытаюсь использовать pycuda для ускорения моей нейронной сети (я знаю, что тензорный поток проще использовать для ускорения GPU, я просто хотел сначала сделать это вручную, поскольку я относительно новичок в нейронных сетях), но всякий раз, когда я прохожу массив в графический процессор и каждый поток распечатывает значение массива в threadIdx, он печатает нули, хотя я устанавливаю значения массива.
Я попытался использовать чрезвычайно простое ядро для тестирования, которое просто печатает значения одномерного массива, и я попытался изменить тип данных на float32.
Базовое ядро, которое я использую для тестирования этой проблемы:
test_mod = SourceModule("""
__global__ void test(float *a)
{
printf("%d: %d\\n", threadIdx.x, a[threadIdx.x]);
}
""")
Код Python, который я использую для создания массива и инициализации ядра:
a = np.asarray([4,2,1])
a = a.astype(np.float32)
test_module = test_mod.get_function("test")
test_module(cuda.In(a), block=(3, 1, 1))
Я ожидаю, что он напечатает порядка 4, 2 и 1, но каждый поток печатает 0.