算法复杂度:如何将“耗电量”视为参数?

时间:2015-09-28 11:44:27

标签: algorithm big-o gpu metal

空间和时间被视为分析算法复杂性的晴雨表。但是现在随着GPU在移动设备上的出现,有许多可能的应用程序可以使用这种高性能在移动设备上运行复杂的算法。例如:iOS的Metal框架可用于GPGPU操作。但不用说它耗费了很多力量。所以,我的问题是,如果我在移动设备上开发/实现图形搜索算法,我是否也应该考虑算法的“功率”复杂性以及时空?现在,我知道争论可能是权力是算法不直接消耗的东西,我完全赞同。所以,也许我的语法不正确,说权力是衡量算法效率的另一个方面。但是,不应该将功率视为算法的性能指标吗?

2 个答案:

答案 0 :(得分:2)

没有。 复杂性解释了算法如何在时间/内存中扩展。权力将是时间和记忆的函数。

假设你有算法A - O(N ^ 2)和B - O(N ^ 3),他们都解决了同样的问题。对于n = 1000 B使用1单位功率而A使用20.现在当你将它扩展到n = 10k时B将需要1000单位功率而A只需要2000.在n = 100k时B将需要1' 000&000; 000而A需要200&000; 000。等等。 这假设能量消耗对于算法的执行是恒定的。

顺便说一句,同样的事情随着时间而发生。例如,对于短阵列,没有什么比线性搜索更好。

对于特定情况(在固定分辨率上呈现UI),测量功率使用并对其进行优化是有意义的。但是,对于今天的决议有效的方法明天不一定是正确的。

答案 1 :(得分:1)

为了实现这一目标,您需要一个与算法中的原子操作相关的能耗模型。

类似“乘法消耗一个单位的能量”和“一个存储器插槽每单位时间使用两个单位的能量”。也许能量=时间x空间的关系可能有意义。

无论如何,这种“天真”的模型可能会遇到与时间复杂性模型相同的现象:它与现代建筑的行为没有任何相似之处,并且可能是数量级的错误。

使用更准确的模型在分析上是难以处理的。