首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果我将一个使用pycuda的数组传递给GPU,然后打印它,为什么它打印零?

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

Stack Overflow用户
提问于 2019-05-04 09:41:30
回答 1查看 227关注 0票数 0

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

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

我用来测试这个问题的基本内核:

代码语言:javascript
运行
复制
test_mod = SourceModule("""
    __global__ void test(float *a)
    {
        printf("%d: %d\\n", threadIdx.x, a[threadIdx.x]);
    }

    """)

我用来创建数组和初始化内核的python代码:

代码语言:javascript
运行
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-08 18:08:19

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

代码语言:javascript
运行
复制
test_mod = SourceModule("""
    __global__ void test(float *a)
    {
        printf("%d: %f\\n", threadIdx.x, a[threadIdx.x]);
    }

    """)

答案由评论组合而成,并作为社区维基条目添加,以尝试将问题从CUDA标签的无人问答队列中提取出来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55978800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档