2

如果我只需要整数除法的商,我可以使用__aeabi_uidiv. 但 ARMCC 编译器__aeabi_uidivmod用于以下代码:

unsigned int a, b, c;
//...
//... 
c = a/b;
/* use c for some operations */

在这种情况下我不需要余数,所以如果我直接调用它会提高速度__aeabi_uidiv吗?像这样:

c = _aeabi_uidiv(a,b);

我正在考虑一个函数,这个代码被调用了数百万次。

4

1 回答 1

3

除法算法自然需要商和余数。这个过程就像长除法。不返回余数所节省的成本是微乎其微的,并且只涉及寄存器mov操作。此外,拥有多个变体division将消除缓存效果,实际上您可能会使系统整体变慢。

这是一些libgcc源代码。

如果您已经分析并确定您的大部分时间都花在了除法例程中,那么将剩余部分从返回中删除可能是有意义的,但仍然需要计算它。检查您的要求可能会更好。

如果您确实需要更快地进行划分,您可以根据数据分析的特殊情况。牺牲精度,不严格遵守“C”规则,并使用倒数和移位表。这些将提供比不返回余数更好的结果。

于 2013-05-07T14:33:17.160 回答