kernel中如何消除取余运算

我的kernel的block是16×16,参与计算的参数数组是在一定的范围内循环使用,比如说数组大小是100。那么就会在kernel计算过程中出现threadId.x%100这种操作。请问有什么办法,把此操作删除掉。谢谢

用2的幂作分母.用与操作.

1、指令对加速的影响并不是太大
2、二楼说的用2的幂作分母.用与操作,看看能否把数组大小改成2的幂

指令级的优化一般都不用考虑的

没事。对常数求余还是很快的。一般不须把心思放在这种指令的优化上。编译器会为你考虑的。
比如你说的x%100这种情况,在2.x上,大致会有如下编译:
uint64_t b = x1374389535;
uint32_t c = HIGH32Bit(b)>>5;
uint32_t d = c
100;
uint32_t e = x - d; //这里就是你要的x%100
也就是只有32位整数乘法(2-3clocks/cuda core), 移位(2-3clocks), 乘法(2-3clocks),减法(2-3clocks), 一共需要8(2.0)或者12(2.1) clocks/cuda core,已经很快了。完全不用担心。