我在调试器中单步执行一些 C/CUDA 代码,如下所示:
for(uint i = threadIdx.x; i < 8379; i+=256)
sum += d_PartialHistograms[blockIdx.x + i * HISTOGRAM64_BIN_COUNT];
我完全困惑了,因为调试器一步就通过了它,尽管输出是正确的。我意识到,当我将大括号放在循环周围(如下面的代码片段所示)时,它在调试器中的行为符合预期。
for(uint i = threadIdx.x; i < 8379; i+=256) {
sum += d_PartialHistograms[blockIdx.x + i * HISTOGRAM64_BIN_COUNT];
}
因此,在 C 或调试器中,无括号 for 循环的处理方式不同,或者可能是 CUDA 特有的。
Thanks
调试器执行一份声明一次。
看一下这个:
int sum = 0; /* one assignment statement */
for (int k = 0; k < 10; k++) sum += k; /* one for statement */
并与此进行比较
int sum = 0; /* one assignment statement */
for (int k = 0; k < 10; k++)
{ /* for statement with the body
in a block of statements */
sum += k; /* assignment statement */
}
在上面的第一个例子中,sum += k
是的一个组成部分for
陈述;在第二个示例中,它本身就是一个完整的语句。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)