我对GPU中的分支预测有疑问。据我所知,在GPU中,它们通过分支进行预测。
例如,我有一个这样的代码:
if (C)
A
else
B
所以如果A需要40个周期而B需要50个周期才能完成执行,如果假设一个warp,A和B都被执行,那么完成这个分支需要总共90个周期吗?或者它们是否与A和B重叠,即,当执行A的某些指令时,等待存储器请求,然后执行B的某些指令,然后等待存储器,依此类推? 感谢
答案 0 :(得分:12)
到目前为止发布的所有支持CUDA的架构都像SIMD机器一样运行。当warp中存在分支差异时,两个代码路径都由warp中的所有线程执行,其中没有跟随活动路径的线程执行NOP的功能等价物(我想我记得存在条件执行)标志附加到warp中的每个线程,允许屏蔽非执行线程。
因此,在您的示例中,90个周期的答案可能是比替代方案更接近实际发生的事情。