【发布时间】:2017-08-26 14:18:40
【问题描述】:
CUDA 并行块每次都从头到尾执行是否正常?我的意思是:
如果我有 3 个线程,我总是会得到这个:
• 第一个线程结束。 • 第二个线程完成。 • 第三个线程完成。
我想知道这是否是正常行为,因为我是 CUDA 的新手。我知道 Open MP、C++ 线程或 Java 线程通常每次都会给出不同的结果。但在 CUDA 中,我总是得到相同的订单。那可能吗?或者这意味着某些东西不能很好地工作?
【问题讨论】:
标签: cuda
CUDA 并行块每次都从头到尾执行是否正常?我的意思是:
如果我有 3 个线程,我总是会得到这个:
• 第一个线程结束。 • 第二个线程完成。 • 第三个线程完成。
我想知道这是否是正常行为,因为我是 CUDA 的新手。我知道 Open MP、C++ 线程或 Java 线程通常每次都会给出不同的结果。但在 CUDA 中,我总是得到相同的订单。那可能吗?或者这意味着某些东西不能很好地工作?
【问题讨论】:
标签: cuda
CUDA 不对此行为提供任何保证。
由于 32 个线程被分组到 warp 中,您可能会在那里观察到典型或可重复的行为,但如果您启动 300 万个线程,您会观察到每次运行的不同顺序。
【讨论】:
如果这些线程在同一个warp中,它们将在锁步中执行,顺序由硬件决定,很可能是从0到31。
如果这些线程在不同的warp中但在同一个线程块中,则warp调度器确定的顺序将是不可预测的。
如果这些线程在不同的线程块中,块调度器确定的顺序将是不可预测的。
【讨论】: