我需要在内核中使用模运算,这会使事情变慢。我无法将其删除。基本上我有一个%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的可能值,您可以尝试对此进行优化。
根据您的目标硬件,您可以尝试查看是否有快速的硬件解决方案可以解决特定产品的问题。(参见此)
可能还有更多解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句