如果我将使用pycuda的数组传递给GPU,然后进行打印,为什么它会打印零?

亚伦·洛克哈特(Aaron Lockhart)

我正在尝试使用pycuda加速我的神经网络(我知道tensorflow更容易用于GPU加速,因为我对神经网络比较陌生,所以我只想先手动进行它),但是每当我将数组传递给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。

看守人

问题出在内核中的print语句中。%d格式说明是为整数。它不会正确格式化浮点值。要修复它,请按如下所示修改内核:

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

    """)

[从评论中收集答案,并将其添加为社区Wiki条目,以尝试从CUDA标签的原始队列中解决问题]。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的程序为什么将数组中的数字打印为零,但仍然从数组中打印出最大值?

为什么我的程序会打印垃圾?

使用Ruby:为什么我的数组先打印结果,然后再打印带有idex数字的数组

为什么不打印传递给die()的整数参数?

当我使用改造call.request()。url()打印URL时,它会打印不同的URL

为什么我执行此代码时会打印inf?

为什么只有在使用gcc编译器进行优化时,我错误地将指针返回到堆栈上的值,printf才会打印0?

if条件inThymeleaf。验证日期是否为DayOfWeek。使用th:text时,它会打印MONDAY,但是如果我执行检查,它将不起作用

为什么我的.bat文件会打印其内容?

地图,然后进行迭代-为什么?

为什么我不能打印传递给程序的第一个参数?

打印数组时,它会打印任意符号,因为我没有使用所有数组值

为什么当我希望awk打印变量时,它会打印整行?

如果此值大于99,为什么会打印呢?

无论我为输入放置什么,为什么我的C程序会打印出相同的输出?

如果没有给出路径,为什么find会打印一个前导“ ./”?

我正在传递模型类对象,但它会打印广告普通对象

为什么我的脚本会打印错误消息?

当我遍历数组值时,它会打印一个随机数。为什么是这样?

为什么我的冒泡排序实现会打印额外的数字?

为什么我不能打印数组?

为什么当我在 C 中使用 for 循环时,它会无限多次打印我的文本?(我是初学者)

为什么我的打印机在每次打印作业后都会打印一张空白页?

为什么 javascript 构造函数打印传递给它的参数?

如果 2%2 为 0,为什么会打印 2?

为什么打印不打印我的数组排序

为什么`which`会打印出脚本?

为什么当我打印数组的元素时,它以 undefined 开头,然后是我插入的数字

当我的列表中有 3 个元素时,为什么它会打印列表 1 的长度