免费午餐结束了吗?[关闭]


12

在2005 年发表的著名的《免费午餐结束》中,Herb Sutter预测了并发编程革命与面向对象革命一样大。这场革命真的发生在2005年-2013年吗?


本文的重点:

  • 处理器制造商已经没有足够的空间来使用大多数传统方法来提高CPU性能。他们没有提高时钟速度,反而转向超线程和多核体系结构。

  • 如果应用程序要充分利用CPU吞吐量的增长,它们将越来越需要并发。

  • “哦,性能无关紧要,计算机只会保持更快的速度”这句话是错误的。

  • 效率和性能优化将变得越来越重要,而不是更少。那些已经可以进行大量优化的语言将会找到新的生命。那些不需要的人将需要找到竞争的方法,变得更加高效和乐观。预计对面向性能的语言和系统的需求将长期增长。

  • 编程语言和系统将越来越被迫处理并发问题。我们迫切需要比今天的语言提供更高级别的并发编程模型。


15
您的手机有几个核心?
马特D

6
我的诺基亚2700具有一个核心。
cpp

5
@MattD对不起,但是为什么要“升级”,cpp手机中的内核数量与它有什么关系?您怎么知道诺基亚2700不足以满足他/她的需求?
Andres F.

2
我要记录下来,从完全非科学的角度来看,在硬件方面发生了如此大的革命,但是软件革命却进展缓慢。为所有程序员提供高质量的并发工具仍然是一项艰巨的任务,并发性仍然使那些经验丰富的并行开发人员难以复制。
Jesse C. Slicer 2013年

2
我只想指出,只是因为预测的时间错误,并不一定会使预测错误。显而易见,您上面列出的关键点并未获得所暗示的重要性,但是在每个要点的方向上都有步骤。因此,我想说以上的预测将成为现实,这只是什么时候的问题。WHEN将成为需求时而不仅仅是需求时。知道何时会超过该阈值是为什么很难预测时间。
Dunk 2013年

Answers:


23

是的,但这要视情况而定。

如果没有同时利用并行硬件和并发性作为程序结构技术,就不能期望编写非同寻常的高性能软件。但是,大多数软件既琐碎又对性能不重要。Web应用程序并没有进行太多的数字运算,CRUD应用程序没有某些模拟和医疗软件的严格计时限制。

尤其是游戏开发人员,需要注意这一点,因为游戏是具有软实时要求的最常见的应用程序类型。问题在手机上很突出,在手机上,您希望从具有两个CPU内核和一个低功耗GPU的集成芯片中榨取尽可能多的计算和渲染功能。这就是很多开发人员正在关注Haskell并等待Rust等语言成熟的另一个原因,我们希望现代硬件具有安全性性能。

自2005年以来,我们获得了新的和改进的工具,例如OpenCL,CUDA,OpenMP和矢量指令集,可用于以既定语言处理并发和数据并行性。但是,相对的新手从一开始就被设计为通过并发来做更多有趣的事情。

Haskell的并发运行时允许该语言为轻量级并行性(火花)和并发抽象(线程,通道和共享的可变引用)提供丰富的支持。Go和Rust还提供轻量级任务,Go使用通道,Rust使用消息传递。

这些系统提供了内存安全性,高性能的运行时以及针对某些特定种族的静态保护。默认情况下,Haskell和Rust的不变性使并发性易于管理。二郎在上世纪80年代已经这样做了,但软件和我们如何设计编程系统知识的需求也得到了改善,因为,谢天谢地。

最后,许多现有的语言(我不会说出名字)随时准备拒绝作为编写新软件的可靠选择。它们的复杂性负担和并发抽象差,使其不适合现代应用程序的考虑。我们只是在等待成熟的替代方案。


2
我不太确定某些语言是否会流行,我希望我们会看到编写的代码比其他任何东西都更加注重最小化依赖性。毕竟,并不是真正的语言有问题,而是您的使用方式。并且其使用的“低垂果实”不再与多线程/并发保持一致。
Matt D

6
@MattD:无论你如何使用语言语言本身可以是出现故障。说您的程序是错误的。您是写错它的人,但是这种语言并不一定能帮助您正确地编写它,这同样重要。
乔恩·普迪

6

这里有几个数据点;自己决定是否算是一场革命。

并行硬件

在2005年左右,英特尔和AMD都开始批量生产2核台式x86 CPU(奔腾D和Athlon 64),时钟速度约为3 GHz。

PlayStation 3于2006年发布,其功能单元具有3.2 GHz的8 + 1核。

2006年,GeForce 8系列发布。它由大量(〜100个)通用“流处理器”组成,与图形专用单元相反。大约在2007年,CUDA 1.0规范发布,允许一些通用计算在大规模并行NVidia硬件上运行。

从那以后,这种趋势一直在继续。

假设现在,2013年,英特尔和AMD都提供4、8和16核CPU,时钟速度略高于4 GHz。双核和四核设计普遍用于低功耗设备,例如笔记本电脑和智能手机。

所有这些都是批量生产的消费级日常计算机硬件。

软件

CUDA于2007年发布,然后于2008年发布OpenCL,从而允许在大型(非图形)计算中使用大规模并行GPU。该模型广受欢迎;许多托管公司(例如Amazon)都提供用于一般计算任务的GPU。

Go于2009年发布,具有非常便宜的抢占线程(“ goroutines”),并允许有效地表达高度并发的算法。

Akka工具包于2009年发布,适用于Java和Scala,支持基于角色的并发。

Erlang(一种高度并发的语言)的使用量有所增加。

并发与并行

注意,要利用并行硬件,并不一定需要软件并发,也就是说,要在计算中处理执行线程。并行,非交互过程解决了许多问题,其中每个过程都是传统的顺序程序。

并行处理可以利用更多传统语言和并行框架,例如map-reduce或MPC或OpenMP。对于这样的框架,在同一CPU晶体上存在多个内核在概念上与仅在集群中拥有更多CPU并没有太大的区别。区别主要是速度。

到目前为止没有免费的午餐

在高端,CPU速度仍徘徊在5 GHz左右。随着更好的技术(例如石墨烯晶体管)的出现,频率可能会在未来再次上升,但可能不会很快上升。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.