首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用PyCUDA打印(使用开普勒图形处理器)

使用PyCUDA打印(使用开普勒图形处理器)
EN

Stack Overflow用户
提问于 2016-08-11 15:08:28
回答 1查看 1.2K关注 0票数 1

在pycuda内核中打印时遇到问题: printf()函数不打印任何内容。

@username_4567发布了一个类似的问题,还给出了一个here的例子,@harrism在他的答案中指出了这一点。但是,我已经在pycuda example中实现了代码,没有任何东西被打印出来(尽管没有错误)。我猜问题是我使用的是开普勒GPU,示例中指定它只在费米设备上工作。

有谁知道如何使用我的开普勒GPU从pycuda内核中打印信息?也许我可以设计一种变通办法,它可以将我想要打印到CPU上的任何数据复制到CPU上,然后通过Python打印,但我宁愿避免这种情况!

我已经在网上搜索过任何有同样问题的人,但我什么也没找到。

我使用Python3.5 (Anaconda build),Spyder作为集成开发环境(从终端启动)和带有El Capitan的iMac。图形处理器为GeForce GT 755M。

EN

回答 1

Stack Overflow用户

发布于 2016-08-11 15:33:29

您正在尝试使用的示例中的代码没有任何错误,它非常适合在开普勒GPU上使用。问题是,CUDA运行时为printf输出使用了一个缓冲区,该缓冲区仅由驱动程序定期刷新,并且需要由几个API调用中的任何一个触发。

我猜你是在一个交互式的python shell中测试它。在这种情况下,您应该向代码添加显式同步调用:

代码语言:javascript
运行
AI代码解释
复制
import pycuda.driver as cuda
import pycuda.autoinit
from pycuda.compiler import SourceModule

mod = SourceModule("""
    #include <stdio.h>

    __global__ void say_hi()
    {
      printf("I am %d.%d\\n", threadIdx.x, threadIdx.y);
    }
    """)

func = mod.get_function("say_hi")
func(block=(4,4,1))

# Flush context printf buffer
cuda.Context.synchronize()

或者,如果您添加了一行shebang行,并从命令提示符处运行未修改的代码:

代码语言:javascript
运行
AI代码解释
复制
$ cat hello_cuda.py 
#!/usr/bin/env python
import pycuda.driver as cuda
import pycuda.autoinit
from pycuda.compiler import SourceModule

mod = SourceModule("""
    #include <stdio.h>

    __global__ void say_hi()
    {
      printf("I am %d.%d\\n", threadIdx.x, threadIdx.y);
    }
    """)

func = mod.get_function("say_hi")
func(block=(4,4,1))

$ ./hello_cuda.py 
I am 0.0
I am 1.0
I am 2.0
I am 3.0
I am 0.1
I am 1.1
I am 2.1
I am 3.1
I am 0.2
I am 1.2
I am 2.2
I am 3.2
I am 0.3
I am 1.3
I am 2.3
I am 3.3

它也会起作用。在后一种情况下,它是由pycuda.autoinit模块触发的上下文清理,它会自动刷新缓冲区。

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

https://stackoverflow.com/questions/38900084

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文