当今最前卫的计算机以双核心的处理器为主流,由于有两个运算单元,所以能够同时操纵两个分开不同的工作。而且在2007年中,主要的两家处理器制造商Intel与AMD又都会发表四核心的系统。虽然理论上多核心的处理器会比单核处理器的效率要更快,但利用多核处理器来开发软件,也就是平行化的程序设计架构,其实是相当困难的一项工程。
|
平行化的程序处理应用,是未来要面对的挑战。(Source: ClipArt) |
最近来自麻省理工学院(MIT)的研究显示,有方法让平行程序设计变得容易些,而且最后可以帮助个人计算机的处理效能,保持在一贯的基本运作上。研究人员已经提出一个新的运算架构,也就是结合专门的程序指令与修改功能来应付多核心的硬件系统,如此便能允许程序设计人员在开发软件过程中,免除了撰写一些冗长乏味的平行化程序处理细节。
从过去的发展历史来看,为多核系统开发软件是属于超级计算机专家的工作,但时代已经走到了「个人超极计算机」的节骨眼,一般程序设计人员也必须要有在多核心计算机上开发软件的心理准备。
MIT电子工程与计算机科学教授Krste Asanovic就说:「撰写平行处理程序,真是一件可怕的事,不仅多数人都没有这样的经验,而且做起来相当困难麻烦。」Asanovic和他的同僚正在着手对付其中的一项主要挑战,即当程序人员试着在多核系统上开发软件所必须面对的问题:在某种状况上,必须协调多种任务到分开的处理核心去执行,而且不能因而造成系统当机。
当一个应用程序像是微软Outlook或影音播放器之类要做平行化处理的时候,会有一定的工作被分摊到各处理核心之间。但是通常这些分别的任务需要再向一个可分享的cache memory中存取数据,然而当其中一个异动正在存取内存,另一项异动也需要去存取同一个区域的内存时,要有适当的防护来避免提出使用,否则就可能造成系统当机。这种状况可以用一对夫妻但却使用同一个支票帐户来比拟,他们可能同时兑现一张支票,不慎两张支票加起来又超出帐户的余额,结果当然会产生麻烦。
标准的平行处理程序需要程序人员预先考虑到这些同时间的运作,而且必须确保一定程度的作业能够持续地存取内存来运行,所以要「锁住」其它作业,直到这项异动完成。
如此以正确的方式来执行之后,锁定的项目固然可以加快平行系统的处理,但要实行这些频繁的异动还是相当复杂一件事。微软的一位研究经理Jim Larus举例解释说,两个不同的应用软件可能同时都取得暂时「锁住」的指令,而它们又得相互等待对方的作业;如果没有第三者进来打破这个僵局(deadlock),Larus表示,那么这两个应用软件就只有一直冻结在那里了。
MIT研究人员为了避免这样的状况发生,于是使用了一种称做「交换式内存(transactional memory)」的方法来解决,这项研究领域在过去五年已经有突破性的发展。透过交换式内存来协调软件作业,使得程序设计人员不须要写那些平行处理的句柄在他们的程序中,实际上又能允许种种的异动可以同时分享相同的记忆空间。当一个异动完成时,系统会确认其它异动项目在内存中没有受到改变,否则会妨碍到第一项异动的结果,假如其它内存中的异动有受到改变,那这些异动会被要求重新执行进来,直到作业成功为止。
然而交换式内存的运作,在某些状况下还是不够完美。Asanovic解释说,因为大多数时候的异动项目数据都很小,而在硬件里固定大小的内存足以快速地应付它们了,但是在某些时候有些异动需要比固定可用的内存更多的记忆空间,当这样的状况发生,系统也会当机。所以Asanovic建议可在硬件系统中增加小量的备用支持内存,以及在软件中增加当异动数据溢量的辨识机制,交换式内存容量可以再扩增,以缓和之前的系统故障状况。
微软研究经理Larus说,MIT研究人员使用的方法是依赖一种结合软件与硬件来制作较佳的交换式内存,但也有很多种设计是只依靠软件或硬件的架构来解决不同程度的问题。Larus表示,在使用硬件或软件来解决之间,目前还不清楚那一种才是正确的方向,但MIT研究人员已着手处理在多核心系统的程序设计中,许多重要且未解决的议题。
事实上,包括Microsoft、AMD、Intel与一些大学像是MIT或史丹福,都有投入使多核心系统更容易撰写程序的方法研究。除此之外,也着手改善交换式内存的效能,研究人员正在寻求针对平行处理程序更好的除错方法,同时也会建立架构好的并行操作函式库,让程序设计人员可以直接外挂在他们的软件中,而不须每次都要重新设置开发一遍。
依照目前状况而言,因为少有真正的平行处理程序,所以双核心的系统并不会受到太大的影响,不过四核心的系统就会受到很大的影响。因为主要的操作系统像是Windows与Mac OS X就能有效地分割应用软件到双核系统中运作,例如,扫毒软件以隐藏的方式在背后利用一个核心处理,而像是MS Word或Photoshop也在另一个核心中执行,所以并不会妨碍它们各自的处理速度。
不过当来到四核心、八核心,甚至是十六核心的状况,应用软件本身就需要做一些修改以获取更高的效能。Asanovic说,交换式内存当然也不是一个又快又容易的完美方式,它只是让程序在这些系统上的处理更简单些,但是Asanovic期望此一方法能成为未来平行化运算模式的一种要件,因为它已呈现出一种相当有用的处理机制。