在 CUDA 中使用内部类型转换的奇怪错误

Odd error using intrinsic typecasting in CUDA

本文关键字:错误 类型转换 内部 CUDA      更新时间:2023-10-16

我无法弄清楚以下代码之间的区别是什么:

int t = __double2int_rd(pos.x/params.cellSize.x*2.0)&1;
if( t ==0) {...}

if(__double2int_rd(pos.x/params.cellSize.x*2.0)&1 == 0) {...}

第二个选项永远不会返回 true,而第一个选项的行为符合预期。

有人有什么想法吗?

第二个表达式首先计算结果始终为 false 的(1==0)。然后用函数的结果ANDs__double2int_rd .

因此,它实际上评估:

if(__double2int_rd(pos.x/params.cellSize.x*2.0) & 0)

这永远是错误的。

第一个表达式的等效项为:

if((__double2int_rd(pos.x/params.cellSize.x*2.0) & 1) == 0)

注意括号。如果您不确定表达式的计算顺序,添加括号是一种很好的编程习惯。