我需要在内核中使用模运算,这会使事情变慢。我无法删除它。基本上我有一个%b,其中b不是2的幂。有什么办法可以避免使用它?
最佳答案
您可以预取答案并使用查找表吗?
代替
c = a%b;
然后你可以尝试
c = table[a][b];
必须考虑签名和表大小。
根据整体用例,您可以将此表移至更高级别,并仅除去一次计算即可删除更多表。
模的自定义实现将使用其定义
(a/b)*b + a%b == a; //true
a%b == a - (a/b)*b // true
根据a和b的可能值,您可以尝试对此进行优化。
根据目标硬件,您可以尝试查看是否有快速的硬件解决方案可以针对特定产品解决此问题。 (请参见this)
可能还有更多解决方案。