zen*_*nna 3 c debugging loops for-loop cuda
我在调试器中单步执行一些C/CUDA代码,例如:
for(uint i = threadIdx.x; i < 8379; i+=256)
sum += d_PartialHistograms[blockIdx.x + i * HISTOGRAM64_BIN_COUNT];
Run Code Online (Sandbox Code Playgroud)
我完全感到困惑,因为调试器只是一步一步地传递它,尽管输出是正确的.我意识到,当我在我的循环中放置大括号时,如下面的代码段所示,它在调试器中按预期运行.
for(uint i = threadIdx.x; i < 8379; i+=256) {
sum += d_PartialHistograms[blockIdx.x + i * HISTOGRAM64_BIN_COUNT];
}
Run Code Online (Sandbox Code Playgroud)
因此,在C或调试器中以不同方式处理的循环是无括号的,或者它可能是CUDA特有的.
谢谢
pmg*_*pmg 10
调试器一次执行一个语句.看一下这个:
int sum = 0; /* one assignment statement */
for (int k = 0; k < 10; k++) sum += k; /* one for statement */
Run Code Online (Sandbox Code Playgroud)
并与此进行比较
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 */
}
Run Code Online (Sandbox Code Playgroud)
在上面的第一个例子中,它sum += k是for声明的组成部分; 在第二个例子中,它是一个完整的声明.