OpenCL函数调用堆栈大小

时间:2015-10-20 11:44:10

标签: 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);   
}

这就是结果:

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

1 个答案:

答案 0 :(得分:6)

OpenCL 1.x中不支持递归。来自AMD的OpenCL简介:

  

OpenCL C语言的主要限制是:

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

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