由两大芯片厂商Intel和AMD最近的动作来看,处理器的下一个时代将是多核的时代,这些在PC机上表现出来的趋势和走向,实际上是这些底层芯片厂商向着平台垄断供应商发展的一个征兆。
从计算机的历史来看,不论技术如何疯狂的、甚至超乎人们想象的向前发展,终归还是需求主导的,计算,作为未来世界的一种生产力,应用越广,对它提出的要求必然也是越来越高,而且始终是紧扣社会的发展需求的。任何对计算极限的断言都是要谨慎的,比如认为个人家庭不需要高级的、为知识分子发明的电子计算机,比如认为计算机天生是一个电子世界的产物,机器语言是最恰当的控制方式……
从社会发展的角度看,人,是应用的主体,人的需求是驱动生产力的发展,未来的社会要将人类从低级的劳动中解放出来,从事更为高级的劳动,那么,计算力,将充当什么样的角色,发挥怎样的作用呢?那就是将人们长期以来常规化的一些东西“可计算化”,过去的几次产业革命分别是“机械化”,“电气化”,这次将是“可计算化”,前两次是动力的革命,劳动的能量来源从人转移到机械力、电力,但是人的监督仍然不可少;这一次是控制的革命,劳动作用形式从人的低级智能转移到存储在计算设备的计算智能,人的监督从现场退到了后台程序的设计。为了释放更多的由低级智能占用的时间和精力(现场智能),人们将进一步挖掘社会生活各个方面的常规因子,探索将它们“可计算化”的途径,由少数人的短期智力投资,来换取所有人长期的劳动解放。
为了满足日益增长的对计算设备的速度的要求,现有的处理硬件的物理尺寸已经接近极限;上层的应用平台和软件尚未在“软件危机”的阴影中摸索出一条革命性的光明的道路;而在二者之间,处理器厂商,在芯片架构这一个层面,借助材料科学的发展和制造工业的技术进步(相当程度正是计算机发展的结果),不断尝试,推陈出新,从CISC到RISC,从single-core到duo-core,在挑战计算极限的征途中取得了现实意义的成果。
事实上,芯片制造商尽量不让这种底层硬件的革新带来上层软件的变动,试图在编译器这一级完全消化掉提升的性能,“肥水不流外人田”,因为一旦这种性能增益无法在编译器这一层消化,势必将引发长久以来困顿于算法性能的软件开发者的兴趣,它们试图通过改良软件结构来获取这部分性能增益,而这些,不在芯片制造商的利益圈内,白白被软件库提供商、服务平台提供商挣去了,当然芯片制造商的合作者比如微软也能分得一杯羹,这种编译器层以上的性能残余越少,微软分得的比例就越多,Intel/AMD分得就还要更多,这样是芯片制造商的初衷。但现实不等于初衷,在编译器层即“如何让软件代码最大程度利用到下层的这种并行架构”面临的难度要远远大于它们当初“如何在芯片上实现并行理论下的多核”,因而这一层面也成为软硬件商的“兵家必争之地”。
这一层面可以划分为三个问题:
一个是如何写代码,即在现有软件思想、结构下,最小变动的改写代码以获取处理器的性能提升;
一个是如何将这种只有最小改动的代码完全翻译成新的处理器架构下的最欢迎的指令序列,将性能的提升落实到最终的指令序列上;
最后是如何提供一个新的处理器平台上的程序运行环境,保证新生的软件就如它们编译时被保证的那样得到执行,甚至对那些没有被重新编译的程序提供某种程度的绿色通道,让他们部分享受到新架构带来的性能提升。
2006/9的《程序员》杂志上为多核开了一个专题,其中有文章对sun公司从事多线程开发的专家进行了采访,从产业链下游的角度来说明多核到底会带来什么。文章中指出了芯片制造商这一市场策略的缘由和动机,也分析了如何利用这一新趋势来解决当前业界的一些现实问题,并提醒多核并不是多新鲜的技术,这在计算机学科领域已经有了相当长的研究了,这对于我们学计算机系统结构的人来说一点也不陌生,无须为铺天盖地的宣传蒙蔽了双眼。
Intel宣称到2007年多核的产量将过亿颗,假设每颗是3-core,那么是相当于现在的单核的数量翻了几倍呢?俗话说淘金的不如卖茶水的,接下来就是这么多processor-core怎么来有效的使用呢?而这一方面谁会占有先机呢?原来搞大型机、集群、网格等分布计算的人估计理解会比别人更容易一些……其中一个比较典型的问题就是多线程编程,虽然在软件平台级老早就提供这种接口,但是单核时代“并行多线程”几乎是一张空头支票,花功夫在这些往往处于程序员书目中“高级篇”的多线程技术上不值;而现在不同,底层真实的提供多核,设计良好的多线程将获得承诺的高性能,不能不引起软件界的关注和追逐。
专业一点说,目前的多线程一般采用两种机制:共享锁和线程间通信,而多采用第一种——使用简单,而线程间通信来协调的方式过于复杂,而且跟当前的顺序执行的程序结构差距较远,难以驾驭。
既然传统的程序设计语言诞生的环境是顺序执行的单核处理器,那么在并行计算的多核时代,设计一种适合并行环境下的软件开发工具是否可行呢?不只是一种全新的语法,而且应该比现在的顺序执行的思想更贴近人脑思维的程序设计方法学,当然,对充当翻译角色的开发支持环境的要求也会更高,这方面要尽量利用现成的快速成熟的IDE工具,比如eclipse,挖掘它的工具性。难点可能仍然在并行程序的设计方法学,然后才是语法、单词。传统的堆栈计算机曾一度被追捧,像Hannoi这样的难题用堆栈计算机来做的话,采用一种数学里老早就有的“递归”的思想可以很容易的设计出“函数式”的基于“表”求值的程序(如Lisp,scheme),而且这种程序正是堆栈计算机“最欢迎的”,能够被简单的翻译成可以被高效执行的指令。那么,多核的处理器最欢迎什么样的程序结构呢?并行计算的理论成果给了我们哪些已知的办法呢?有没有其他领域的灵感呢?这种灵感是离现有人脑的思维方式更远呢还是更近?象scheme这类是容易理解的,并行体系下的程序设计语言(platto?)可能是理解的另一端:更难被人理解。然而,生活中,我们言语中经常出现的“一边……一边……”反映的就是并行的思想,在动作上的并行生活中很常见;在思维上的并行就是发散思维,考虑问题的多个方面,甚至交叉考虑,可见人脑采用了高级的并行模式,这么看,并行程序语言应当也是很肯能存在的。
01:56:06