算法与硬件
Progress in Algorithms Beats Moore's Law.
---
硬件的随时间增长的倍数, 通常是比较固定的, 比如摩尔定律就有 40 年的历史了.
但各类算法的复杂度下界却不断的被刷新着, 先刷新各个模型的下界, 然后是更为统一通用的模型, 最终证明其阶甚至常数为最优的. 然后就去搞计算复杂度理论去了? :D
硬件和算法一起发展, 可以解决之前无法解决的问题.
硬件的发展对应的是新的应用, 而不是旧应用的性能提升. 旧应用的性能提升只是个副产品.
如果只有硬件的发展没有算法的提升, 那就是在掩盖真正的本质问题.
算法发展速度超越硬件, 解决的都是本质问题, 才配的上"解决"一词. 否则就应该用"掩盖".
曾经有多少人坐等硬件发展, 然后性能又被 M$ 的新一代操作系统吃光?
这就是当年的硬件厂商的商业模式(Wintel), 今天 PC 风光不再了, 这个联盟也就被破坏的差不多了.
---
今天的大规模应用越来越多了. 硬件和算法必取至少其一.
G 的技术路线大家都知道. 廉价硬件堆起来. 如何堆如何高效利用那就是核心技术了. 这是典型的算法路线.
取硬件的路线也挺常见的, 不过很容易形成厂商依赖 (IOE 为典型? :D).
取硬件效果那当然是立竿见影的, 不过这个依赖性会伴随很久.
既然前面说了是*掩盖*问题, 而又不自知, 认为是自己很牛解决掉了, 沾沾自喜.
简单说, 既然功劳都要算到硬件身上, 留你何用?
都堆硬件就解决了, 软件提升不重要了, 都裁了吧.
既然给硬件厂商每年进贡就能获得成倍提高的新硬件, 软件工程师就没有存在的意义了.
(上面说了 Wintel 嘛, M$ 把新硬件的性能耗光就有存在意义了, 你说对吧?
说对的同学, 你又忘了新硬件要配新应用了.)
---
最后呢, 算法, 数学, 底层等等基础/背景知识有啥用呢?
达到一般的程度, 大概可以避免写出非常糟糕的代码, 做出糟糕的设计.
比较好的程度, 每一项决策都是有足够理由支撑的, 可以做出比较无懈可击的设计, 不被人轻易指出缺陷来.
再往上, 也许找一条罕为人知(或者就算知道也不会用不敢用)的结论, 使用的效果就是 blow your minds~ (飘~)
(关于第三条的效果... 希望你见到的时候能认出来, 别搞错了...)
---
硬件的随时间增长的倍数, 通常是比较固定的, 比如摩尔定律就有 40 年的历史了.
但各类算法的复杂度下界却不断的被刷新着, 先刷新各个模型的下界, 然后是更为统一通用的模型, 最终证明其阶甚至常数为最优的. 然后就去搞计算复杂度理论去了? :D
硬件和算法一起发展, 可以解决之前无法解决的问题.
硬件的发展对应的是新的应用, 而不是旧应用的性能提升. 旧应用的性能提升只是个副产品.
如果只有硬件的发展没有算法的提升, 那就是在掩盖真正的本质问题.
算法发展速度超越硬件, 解决的都是本质问题, 才配的上"解决"一词. 否则就应该用"掩盖".
曾经有多少人坐等硬件发展, 然后性能又被 M$ 的新一代操作系统吃光?
这就是当年的硬件厂商的商业模式(Wintel), 今天 PC 风光不再了, 这个联盟也就被破坏的差不多了.
---
今天的大规模应用越来越多了. 硬件和算法必取至少其一.
G 的技术路线大家都知道. 廉价硬件堆起来. 如何堆如何高效利用那就是核心技术了. 这是典型的算法路线.
取硬件的路线也挺常见的, 不过很容易形成厂商依赖 (IOE 为典型? :D).
取硬件效果那当然是立竿见影的, 不过这个依赖性会伴随很久.
既然前面说了是*掩盖*问题, 而又不自知, 认为是自己很牛解决掉了, 沾沾自喜.
简单说, 既然功劳都要算到硬件身上, 留你何用?
都堆硬件就解决了, 软件提升不重要了, 都裁了吧.
既然给硬件厂商每年进贡就能获得成倍提高的新硬件, 软件工程师就没有存在的意义了.
(上面说了 Wintel 嘛, M$ 把新硬件的性能耗光就有存在意义了, 你说对吧?
说对的同学, 你又忘了新硬件要配新应用了.)
---
最后呢, 算法, 数学, 底层等等基础/背景知识有啥用呢?
达到一般的程度, 大概可以避免写出非常糟糕的代码, 做出糟糕的设计.
比较好的程度, 每一项决策都是有足够理由支撑的, 可以做出比较无懈可击的设计, 不被人轻易指出缺陷来.
再往上, 也许找一条罕为人知(或者就算知道也不会用不敢用)的结论, 使用的效果就是 blow your minds~ (飘~)
(关于第三条的效果... 希望你见到的时候能认出来, 别搞错了...)