算法复杂度:如何将"power consumed"视为参数?
Algorithm complexity: How to see "power consumed" as a parameter?
Space和时间被认为是分析算法复杂度的晴雨表。但是现在随着移动设备上 GPU 的出现,有许多可能的应用程序可以在移动设备上使用高性能到 运行 复杂的算法。例如:iOS 的 Metal 框架可用于 GPGPU 操作。但不用说它消耗了大量的电力。所以,我的问题是,如果我是移动设备上的 developing/implementing,比方说,图形搜索算法,我是否也应该考虑算法的 "power" 复杂度以及 space -时间?现在,我知道这个论点可能是算法不会直接消耗自身的能量,我完全同意这一点。所以,也许我的语法是错误的,因为功率是衡量算法效率的另一个维度。但是难道不应该把算力看成是算法的性能指标吗?
要实现这一点,您需要一个可以与算法中的原子操作相关联的能耗模型。
喜欢 "a multiply consumes one unit of energy" 和 "a memory slot uses two units of energy per unit of time"。也许关系 Energy = Time x Space 是有道理的。
无论如何,这样的 "naïve" 模型可能会遇到与时间复杂度模型相同的现象:它与现代架构的行为没有任何相似之处,并且可能会出现数量级的错误。
使用更准确的模型在分析上会很棘手。
没有。
复杂性解释了算法如何在时间/内存中扩展。功率将是时间和内存的函数。
假设你有算法 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 而 A 需要 200'000。等等。
这假设执行算法的能量消耗是恒定的。
顺便说一下,时间也会发生同样的事情。例如,对于短数组,没有什么比线性搜索更好的了。
对于特定情况(在固定分辨率下呈现 UI)测量电源使用情况并对其进行优化是有意义的。但是今天对决议有用的东西明天不一定是正确的。
Space和时间被认为是分析算法复杂度的晴雨表。但是现在随着移动设备上 GPU 的出现,有许多可能的应用程序可以在移动设备上使用高性能到 运行 复杂的算法。例如:iOS 的 Metal 框架可用于 GPGPU 操作。但不用说它消耗了大量的电力。所以,我的问题是,如果我是移动设备上的 developing/implementing,比方说,图形搜索算法,我是否也应该考虑算法的 "power" 复杂度以及 space -时间?现在,我知道这个论点可能是算法不会直接消耗自身的能量,我完全同意这一点。所以,也许我的语法是错误的,因为功率是衡量算法效率的另一个维度。但是难道不应该把算力看成是算法的性能指标吗?
要实现这一点,您需要一个可以与算法中的原子操作相关联的能耗模型。
喜欢 "a multiply consumes one unit of energy" 和 "a memory slot uses two units of energy per unit of time"。也许关系 Energy = Time x Space 是有道理的。
无论如何,这样的 "naïve" 模型可能会遇到与时间复杂度模型相同的现象:它与现代架构的行为没有任何相似之处,并且可能会出现数量级的错误。
使用更准确的模型在分析上会很棘手。
没有。 复杂性解释了算法如何在时间/内存中扩展。功率将是时间和内存的函数。
假设你有算法 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 而 A 需要 200'000。等等。 这假设执行算法的能量消耗是恒定的。
顺便说一下,时间也会发生同样的事情。例如,对于短数组,没有什么比线性搜索更好的了。
对于特定情况(在固定分辨率下呈现 UI)测量电源使用情况并对其进行优化是有意义的。但是今天对决议有用的东西明天不一定是正确的。