根据CUDA编程指南C.4.3.1.2节。 "嵌套和同步深度",提到:
"在父内核从不调用cudaDeviceSynchronize()的情况下,系统检测到不需要为父状态保留空间的情况下允许进行优化。在这种情况下,由于永远不会发生显式父/子同步,因此程序所需的内存占用量将远低于保守的最大值。这样的程序可以指定较浅的最大同步深度,以避免过度分配后备存储"
这是否意味着编译器支持动态并行下的尾递归?例如,如果我有一个递归调用自身的内核:
__global__ void kernel(int layer){
if(layer>65535){
return;
}
printf("layer=%d\n",layer);
kernel<<<1,1>>>(layer+1);
}
在主持人上发布:
kernel<<<1,1>>>(0);
如果编译器可以优化尾递归,它是否仍受最大递归级别24的限制,因为&#34;父/子同步永远不会发生&#34; ?如果不受限制,编译器如何打开优化?
谢谢!