关于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/