cuda - GPU 上的分支预测

标签 cuda opencl gpu gpgpu

我对 GPU 中的分支谓词有疑问。据我所知,在 GPU 中,它们使用分支进行预测。

例如我有这样的代码:

if (C)
 A
else
 B

所以如果 A 需要 40 个周期而 B 需要 50 个周期才能完成执行,如果假设对于一个 warp,A 和 B 都被执行,那么完成这个分支总共需要 90 个周期吗?或者它们是否与 A 和 B 重叠,即当执行 A 的某些指令时,然后等待内存请求,然后执行 B 的某些指令,然后等待内存,依此类推? 谢谢

最佳答案

到目前为止发布的所有支持 CUDA 的架构都像 SIMD 机器一样运行。当 warp 中存在分支分歧时,两个代码路径都由 warp 中的所有线程执行,不遵循事件路径的线程执行 NOP 的功能等价物(我想我记得有一个条件执行标记附加到 warp 中的每个线程,允许屏蔽非执行线程)。

因此在您的示例中,90 个周期的答案可能比替代方案更接近实际发生的情况。

关于cuda - GPU 上的分支预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55302014/

相关文章:

multithreading - 本地和全局大小对程序执行的影响 - OpenCl

c - 使用 OpenCL 传输

c - OpenCL 根据缓冲区大小返回 INVALID_KERNEL_ARGS

python - 了解经过训练的神经网络内存使用情况

CUDA Kernel 仅通过单个线程执行语句

c++ - CUDA推力库中的函数是否隐式同步?

c++ - 在 CUDA 内核中重载赋值运算符

tensorflow - MultiWorkerMirroredStrategy 启动 GRPC 服务器后挂起

cuda - NVIDIA 的 GPU 是大端还是小端?

c++ - CUDA 使用 CMake 在 x86 中卡住构建