首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于CUDA打印输出顺序的探讨

关于CUDA打印输出顺序的探讨
EN

Stack Overflow用户
提问于 2013-09-26 15:09:48
回答 2查看 1.3K关注 0票数 0

我是新的数据自动化系统,我试图做平行打印与数据自动化系统printf

在下面的示例中,我有6线程和6数据数组,我需要在CUDA中“同时”打印所有6数组。每个数组都应该分配给将打印它的1线程。我尝试了一个多星期,却不知道如何去做,因为我总是得到连续排列的结果:第一个数组打印第一个数组,第二个数组打印第二个等等。然而,我想观察混合打印,以证明并行执行的“随机性”。这是我的代码:

代码语言:javascript
复制
no code

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-26 15:35:35

因为您有一个非常小的内核,只包含一个带6个线程的块,所以所有的线程都在一个翘曲中运行。在经纱内,不同的线程必须互相等待。有关详细信息,请参阅编程指南。

http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#simt-architecture

一个翘曲一次执行一个公共指令,所以当一个翘曲的所有32个线程都同意它们的执行路径时,就能实现完全的效率。如果翘曲的线程通过依赖于数据的条件分支发散,则翘曲会依次执行所采取的每个分支路径,禁用不在该路径上的线程,并且当所有路径完成时,这些线程将收敛到相同的执行路径。分支发散只在翘曲中发生;不同的翘曲是独立执行的,不管它们是执行公共的还是不相交的代码路径。

因此,您的数据将按照相同的代码顺序打印出来(首先是if(id==1){...},然后是if(id==2){...},.)。

票数 1
EN

Stack Overflow用户

发布于 2013-09-26 15:31:40

看看CUDA C编程指南,第113-114页:它提供了一些关于printf如何刷新其输出的信息。

编辑

此外,根据Eric的回答,通过printf,您将只看到一个“粒状”的随机性,这种随机性与翘曲执行的随机性有关。一切都在里面,经纱似乎是有序的。

也可以查看另一个线程。

CUDA : unexpected printf behavior

在这里,Robert解释了CUDA printf输出背后的逻辑。

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

https://stackoverflow.com/questions/19031970

复制
相关文章

相似问题

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