OpenCL函数调用堆栈大小

soo*_*ngk 2 opencl

我可以知道OpenCL的函数调用堆栈大小吗?

我在Ubuntu中使用NVIDIA OpenCL1.2.(NVIDIA CC = 5.2)我在测试代码中发现了一些意想不到的结果.

当某些函数调用64次时,下一个调用的函数似乎无法访问参数.

在我的想法中,调用堆栈溢出使这个问题变得复杂.

下面是我的示例代码和结果:

void testfunc(int count, int run)
{
    if(run==0) return;
    count++;
    printf("count=%d  run=%d\n", count, run);
    run = run - 1;
    testfunc(count, run);
}

__kernel void hello(__global int * in_img, __global int * out_img)
{
    int run;
    int count=0;
    run = 70;
    testfunc(count, run);   
}
Run Code Online (Sandbox Code Playgroud)

这就是结果:

count=1  run=70
count=2  run=69
count=3  run=68
count=4  run=67
count=5  run=66
count=6  run=65
count=7  run=64
   .....
count=59  run=12
count=60  run=11
count=61  run=10
count=62  run=9
count=63  run=8
count=64  run=7
count=0  run=0  // <--- Why count and run values are ZERO?
count=0  run=0
count=0  run=0
count=0  run=0
count=0  run=0
count=0  run=0
Run Code Online (Sandbox Code Playgroud)

Ade*_*edt 6

OpenCL 1.x不支持递归.从AMD的OpenCL简介:

OpenCL C语言的主要限制是:

  • 不支持函数指针.
  • 不支持位字段.
  • 不支持可变长度数组.
  • 不支持递归.
  • 没有C99标准头文件,如ctypes.h,errno.h,stdlib.h等.可以包括在内.

AFAIK并非所有实现都具有类似于调用堆栈的功能.在这些情况下,可能在您的情况下,任何函数调用都在调用范围内联.