0
CUDA编程指南分为以下的说:CUDA线程是否以O(n)操作的锁步执行?
的经执行一次一个共同的指令,所以,当经纱的所有32个线程的执行路径上同意达到最高效率。如果warp的线程通过依赖于数据的条件分支发散,则warp会连续执行所采用的每个分支路径,禁用不在该路径上的线程,并且当所有路径完成时,线程会聚到相同的执行路径。
我在想,因为一个共同的指令在一个时间锁步。
- 那么在没有分支并且每个线程需要计算O(n)操作的情况下会发生什么?
- 如果他们操作的数据值较小,那么warp中的某些线程是否会在其他线程之前完成?
- 如果某些线程在其他线程之前完成,它们保持空闲状态,直到其他线程完成?
指南指的是O(1)(至少在理论上)的具体机器指令。您的O(n)操作由机器指令组成。为了在其他人之前进行经纱整理,您需要为他们提供不同的数据。这只适用于一个分支(除非我在这里错了,而你有一个反例)。 – Drop
这正是我想要发现的;如果他们用不同的数据喂食,会在别人之前完成线程处理? – John
我的观点是:你不能在没有分支的情况下饲喂不同的东西(即(1)中的假设是错误的)。并且在分支的情况下,每条路径长度相同并且被序列化。无论如何,线程同时完成。 – Drop