Larry O’Brien 对关于多核处理器和适应它的语言一定能带来性能提升的假设提出质疑。
原理很简单。没有边际效应(side effect)的函数式编程基本上将自己交给了并行(译者注:意思是最适合并行的技术)。比较有意思的是 Map 函数,在 Map 里函数被应用到数组里的每一个元素。
一些乐观人士看到这儿的时候,说“哈哈,编译器可以轻松地将那些计算分发到一个线程池,在一个有多核的机器上会有性能优势。”确实如此,如果函数非常长或者数组非常大的话。否则,通过多核 / 多处理器分发计算的开销会比在一个核里执行 Map 要大的多。最糟糕的情况是,当函数和数据已经在原核的缓存中时,分发它的性能会非常低效。
从历史上来比较说明,Larry 提到 C/C++ 的内联关键字(inline keyword)。他说在大多数情况下,内联关键字是一个灾难。“绝大多数开发人员在考虑内联关键字给他们带来的好处时,做的很糟糕。因为,仅作为分发用时,Map 会是反生产力的,内联的代码会降低效率(现代处理器的芯片缓存使得代码的大小和位置对性能而言是非常重要的)”
- 那些声称每一个调用都会被分发的语言,它们有足够的能力去克服并行带来的性能问题吗?
- 在并行发生的时候,程序员所要使用的语言在主流程序员的手中会像内联一样,成为一场灾难吗?
- 会有一个混合的方法同时解决这两个问题吗?
公众号推荐:
AIGC 技术正以惊人的速度重塑着创新的边界,InfoQ 首期《大模型领航者AIGC实践案例集锦》电子书,深度对话 30 位国内顶尖大模型专家,洞悉大模型技术前沿与未来趋势,精选 10 余个行业一线实践案例,全面展示大模型在多个垂直行业的应用成果,同时,揭秘全球热门大模型效果,为创业者、开发者提供决策支持和选型参考。关注「AI前线」,回复「领航者」免费获取电子书。
![](https://static001.geekbang.org/resource/image/b4/f4/b4b2dc5e41bda1a344a3179afd0049f4.png)
评论