Parallel processing 关于CUDA printf输出的顺序

Parallel processing 关于CUDA printf输出的顺序,parallel-processing,cuda,Parallel Processing,Cuda,我是CUDA的新手,我正在尝试使用CUDAprintf进行并行打印 在下面的示例中,我有6线程和6数据数组,我需要在CUDA中“同时”打印所有6数组。每个数组都应分配给将打印它的1线程。我已经试了一个多星期了,不知道怎么做,因为我总是把结果排成一行:第一个数组先打印,第二个数组再打印,等等。然而,我想观察混合打印,以证明并行执行的“随机性”。这是我的密码: no code 我做错了什么?看一看CUDA C编程指南第113-114页:它提供了一些关于printf如何刷新其输出的信息 编辑 同样根

我是CUDA的新手,我正在尝试使用CUDA
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个线程。