Parallel processing 关于CUDA printf输出的顺序
我是CUDA的新手,我正在尝试使用CUDAParallel processing 关于CUDA printf输出的顺序,parallel-processing,cuda,Parallel Processing,Cuda,我是CUDA的新手,我正在尝试使用CUDAprintf进行并行打印 在下面的示例中,我有6线程和6数据数组,我需要在CUDA中“同时”打印所有6数组。每个数组都应分配给将打印它的1线程。我已经试了一个多星期了,不知道怎么做,因为我总是把结果排成一行:第一个数组先打印,第二个数组再打印,等等。然而,我想观察混合打印,以证明并行执行的“随机性”。这是我的密码: no code 我做错了什么?看一看CUDA C编程指南第113-114页:它提供了一些关于printf如何刷新其输出的信息 编辑 同样根
printf
进行并行打印
在下面的示例中,我有6
线程和6
数据数组,我需要在CUDA中“同时”打印所有6
数组。每个数组都应分配给将打印它的1
线程。我已经试了一个多星期了,不知道怎么做,因为我总是把结果排成一行:第一个数组先打印,第二个数组再打印,等等。然而,我想观察混合打印,以证明并行执行的“随机性”。这是我的密码:
no code
我做错了什么?看一看CUDA C编程指南第113-114页:它提供了一些关于
printf
如何刷新其输出的信息
编辑
同样根据Eric的回答,通过printf
您将只看到“颗粒”随机性,这种随机性与扭曲执行的随机性有关。所有东西都在翘曲中,可以看起来是有序的
也看看这另一个线程
Robert Crovella解释了CUDA
printf
输出背后的逻辑。由于您有一个非常小的内核,只包含1个块和6个线程,因此所有线程都在一个扭曲中运行。在一个扭曲中,不同的线程必须彼此等待。
有关更多详细信息,请参阅编程指南
warp一次执行一条公共指令,因此效率很高
当一个扭曲的所有32个线程都同意执行时实现
路径如果扭曲的线程通过依赖于数据的条件
分支时,扭曲会连续执行每个分支路径,禁用
不在该路径上的线程,并且当所有路径完成时
线程会聚回相同的执行路径。分支发散
仅在扭曲内发生;不同的扭曲独立执行
不管它们是执行公共代码还是不相交代码
路径
因此,您的数据将以与代码相同的顺序打印出来(首先是
if(id==1){…}
,然后是if(id==2){…}
,…)。我需要根据此更改什么以并行打印?对不起,我不明白..@eddwis我之前的回答中有太多无用的信息。我编辑这篇文章是为了更好地关注这个问题。如果您使用Procesas
并让int-id=blockIdx.x
,则可以。然后你可能会遇到Jack回答中提到的同花顺问题。然而,打印文本是使用GPUI的一种非常糟糕的方式。我知道这是一种非常糟糕的方式,但这是一项任务,我应该尽我所能:)好的,Procesas
完成了这项工作,非常感谢你!但是有什么方法可以与1,6
并行打印,因为给我这个任务的人说我应该增加线程数,而不是块数?
可能可以做到这一点,因为一个扭曲只包含32个线程。