分裂的大O.

时间:2013-01-18 09:18:48

标签: algorithm architecture big-o division integer-division

大多数现代国际检索单位的分工是什么?有某种优化还是天真的O(分子/分母)?我正在编写严重依赖模数运算的代码。

例如,执行10/5和20/5和40/5所需的相对时间是多少?来自英特尔,nVidia,高通等的现代处理器是否具有相同的Big-O用于划分?

注意:假设除法是O(分子的大小),我可能错了,这个问题根本没有任何意义。如果是这种情况,请纠正我。

1 个答案:

答案 0 :(得分:2)

这个问题不太好。但它也不是那么“愚蠢”,所以我试着回答/澄清一些观点:

几乎所有现代CPU / GPU都有分区指令。因为它适用于默认字大小,所以它的速度无关紧要,就Big-O而言它是恒定的,所以它总是O(1)。即使对于没有分割指令的嵌入式处理器,微控制器等也是如此,因为它是在软件中模拟的,软件仿真受到单词大小的限制,所以它始终是一个恒定的时间来执行操作(也就是说它也是O(1))。

例外情况是在谈论对非字大小数据执行的操作时。这发生在例如在谈论BigInt图书馆时。但在这种情况下,所有操作(加法,乘法,......)不再是O(1),而是取决于数字的大小。

但是注意:Big-O没有说明实际的计算时间。它只是忽略常数因子的渐近行为。这意味着,即使您有两个采用O(n)的算法,时间差也可能是1000(或一百万或任何您想要的)。分裂的最好例子:例如一个加法都是O(1),但通常除法需要比加法要多得多的周期/时间。