cuda - Kepler CUDA 动态并行性和线程发散

标签 cuda kepler dynamic-parallelism

关于Kepler动态并行的资料很少,从这项新技术的描述来看,是否意味着同一个warp中线程控制流发散的问题得到了解决?

它允许递归并从设备代码中启动内核,这是否意味着不同线程中的控制路径可以同时执行?

最佳答案

看看这个 paper

动态并行、流发散和递归是不同的概念。动态并行性是在线程内启动线程的能力。这意味着您可以这样做

__global__ void t_father(...)   {
   ...
   t_child<<< BLOCKS, THREADS>>>();
   ...
}

我个人在这方面进行了调查,当你做这样的事情时,当 t_father 启动 t_child 时,整个 vga 资源会再次在这些资源之间分配,并且 t_father 会等到所有 t_child 完成后才能继续(也看看这个paper幻灯片 25)

递归从 Fermi 开始就可用,并且是线程调用自身的能力,无需任何其他线程/ block 重新配置

关于流程分歧,我想我们永远不会看到扭曲中的线程同时执行不同的代码。

关于cuda - Kepler CUDA 动态并行性和线程发散,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11390196/

相关文章:

c++ - CUDA 全局函数中的局部指针数组

java - 带有 JAR 的 WAR 项目中的 "could not create Vfs.Dir"

cuda - 为什么 GPU 的初始化在 Kepler 架构上花费很长时间以及如何解决这个问题?

cuda - 哪些因素会影响动态并行内核启动的开销?

编译多个 cuda 文件(具有动态并行性)和 MPI 代码

docker - docker上的cuda版本与PC上的cuda版本是否不同有关系吗?

c - 在不使用任何库(如 cuda 或 opencl)的情况下对 gpu 进行编程?

ruby - 使用 ruby​​ 计算太阳体的 x、y、z 位置

cuda - 使用动态并行 (CUDA) 编译 .cu 文件

c - 变量在一个函数中具有值,而传递给另一个函数时为 0?