Python 如果我使用pycuda将一个数组传递给GPU,然后打印它,为什么它要打印零?

Python 如果我使用pycuda将一个数组传递给GPU,然后打印它,为什么它要打印零?,python,cuda,pycuda,Python,Cuda,Pycuda,我试图使用pycuda来加速我的神经网络(我知道tensorflow更容易用于GPU加速,我只是想先手动进行,因为我对神经网络比较陌生),但是每当我将数组传递给GPU,让每个线程在threadIdx打印出数组的值时,即使我设置了数组值,它也会打印零 我曾尝试使用一个非常简单的内核进行测试,它只打印一维数组的值,并尝试将数据类型更改为float32 我用于测试此问题的基本内核: test\u mod=SourceModule(“”) __全局无效测试(浮动*a) { printf(“%d:%d\\

我试图使用pycuda来加速我的神经网络(我知道tensorflow更容易用于GPU加速,我只是想先手动进行,因为我对神经网络比较陌生),但是每当我将数组传递给GPU,让每个线程在threadIdx打印出数组的值时,即使我设置了数组值,它也会打印零

我曾尝试使用一个非常简单的内核进行测试,它只打印一维数组的值,并尝试将数据类型更改为float32

我用于测试此问题的基本内核:

test\u mod=SourceModule(“”)
__全局无效测试(浮动*a)
{
printf(“%d:%d\\n”,threadIdx.x,a[threadIdx.x]);
}
""")
我用来创建数组和初始化内核的python代码:

a=np.asarray([4,2,1])
a=a.aType(np.32)
测试模块=测试模块获取功能(“测试”)
测试_模块(cuda.In(a),块=(3,1,1))

我希望它按4、2和1的顺序打印,但每个线程打印一个0。

问题在于内核中的print语句。
%d
格式说明符用于整数。它将无法正确格式化浮点值。要修复此问题,请按如下方式修改内核:

test_mod = SourceModule("""
    __global__ void test(float *a)
    {
        printf("%d: %f\\n", threadIdx.x, a[threadIdx.x]);
    }

    """)

[从评论中收集答案并添加为社区wiki条目,以尝试将问题从CUDA标记的无动力队列中删除]。

是否
%d
是打印
浮动
数量的正确
printf
格式说明符?我不这么认为。我想应该是
%f
之类的。非常感谢!这让我永远无法自拔