nvcc是否支持动态并行中的尾调用优化?

时间:2014-09-04 16:54:36

标签: recursion cuda tail-recursion dynamic-parallelism

根据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; ?如果不受限制,编译器如何打开优化?

谢谢!

0 个答案:

没有答案