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);
}
这是结果:OpenCL中的1.x中不支持
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
Hello Aderstedt。谢谢你的回答。那么,在OpenCL中没有任何调用堆栈吗? AFAIK,OpenCL的函数调用使用内联函数,并且所有上下文更改仅使用寄存器。如果它是正确的,调用堆栈不能在OpenCL中存在。 我说的是对的吗? – soongk
是的。有些平台(如CPU)可能会在内部使用调用堆栈,但您不能依靠深度堆栈。 – Aderstedt
谢谢Aderstedt。你的帮助对我来说是如此翔实。 – soongk