我需要在内核中使用模运算,这会减慢速度。我不可能删除它。基本上我有一个%b,其中b不是2的幂。有没有办法避免使用它?
答案 0 :(得分:1)
您可以预取答案并使用查找表吗? 而不是
c = a%b;
然后你可以尝试
c = table[a][b];
必须对签名和表格化进行一些考虑。 根据整体用例,您可以将此表移动到更高级别,并删除更多只有这一次计算。
modulo的自定义实现将使用它的定义
(a/b)*b + a%b == a; //true
a%b == a - (a/b)*b // true
根据a和b的可能值,您可以尝试优化它。
根据您的目标硬件,您可以尝试查看是否有可以解决特定产品的快速硬件解决方案。 (见this)
可能会有更多解决方案。