并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程。为执行并行计算,计算资源应包括一台配有多处理机(并行处理)的计算机、一个与网络相连的计算机专有编号,或者两者结合使用。并行计算的主要目的是快速解决大型且复杂的计算问题。此外还包括:利用非本地资源,节约成本 ― 使用多个“廉价”计算资源取代大型计算机,同时克服单个计算机上存在的存储器限制。
传统地,串行计算是指在单个计算机(具有单个中央处理单元)上执行软件写操作。CPU 逐个使用一系列指令解决问题,但其中只有一种指令可提供随时并及时的使用。并行计算是在串行计算的基础上演变而来,它努力仿真自然世界中的事务状态:一个序列中众多同时发生的、复杂且相关的事件。
为利用并行计算,通常计算问题表现为以下特征:
(1)将工作分离成离散部分,有助于同时解决;
(2)随时并及时地执行多个程序指令;
(3)多计算资源下解决问题的耗时要少于单个计算资源下的耗时。
摩尔定律行将终结?——并行计算异军突起编辑本段回目录
今日视点
让我们将目光转向1965年,当时,英特尔公司的联合创始人戈登·摩尔预测,在半导体行业内,每18个月芯片上晶体管的数量就会翻番。几乎半个世纪以来,摩尔定律一直有效,它使计算机越来越便宜,运行速度越来越快,同时功能越来越强大。
然而,一直有专家提出警告称,摩尔定律最终也会遭遇物理法则的阻挠,芯片让人眼花缭乱的高增长势头必将终结。专家们的预测一直未曾发生,但是,这种想法也始终在很多人心中盘绕。
摩尔定律日薄西山?
美国《电子工程时报》(EE Times)网站近日刊文指出,今年4月7日,在2009年国际物理设计大会上,IBM的院士卡尔·安德森指出,摩尔定律很快就会成为历史。
卡尔·安德森是IBM服务器部门负责物理设计和工具的研究人员。他认为,就像之前的火车、汽车和航空工业一样,半导体工业也已经相当成熟,持续创新的速度正在慢慢减缓。随着半导体器件的尺寸和成本呈指数级下降,摩尔定律将会步入历史的故纸堆。
安德森表示,多核微处理器等最前沿的芯片可能还会出现指数级的增长。但是,更多设计人员都发现,日常应用并不需要最新的物理设计。因此,摩尔定律很快将失去效力。今天,仅仅高端的芯片制造商能够负担下一代芯片的研发和设计所需要的高昂成本,更不用说制造这些芯片了。
但也有业内巨头持不同看法。据美国媒体报道,今年4月8日,在2009年春季英特尔信息技术峰会(IDF)上,英特尔公司董事长克瑞格·贝瑞特指出:“指导英特尔发展多年的摩尔定律诞生于1968年,其将在未来15年中继续发挥作用。”
英特尔公司首席技术官兼企业技术事业部总监贾斯汀·瑞特勒在接受美国《商业周刊》采访时也坚持认为,在接下来的10年里,英特尔公司能够让下几代处理器上的芯片翻番。
并行计算:电脑变人脑
问题不在于容量,而在于速度。几年前,微处理器的速度就达到了3GHz(吉赫)。此时,处理速度不能再进一步增加,否则,微处理器就会因为过热而融化。2004年,英特尔4GHz处理器计划被迫取消,半导体厂商对晶体管数量和高主频的不断追求从此被画上休止符。
为了解决这个问题,半导体行业开始让几个芯片同时做一件事情(多线程),而不是让一块芯片以越来越快的速度处理一件事情。于是,出现了双核和四核处理器(基于单个半导体的一个处理器上拥有两个或者四个处理器核心)。瑞特勒说,10年内,我们可能会见证拥有100个甚至更多内核的处理器的诞生。
但是,这又提出了另外一个新问题:怎样把这些细小的计算机引擎排放得当,使得它们更好地发挥作用?操作系统还没有准备好,编程语言和程序开发工具也一样。
其实,就连一直编写软件的程序员们自己的内心也忐忑不安。他们过去编写的程序都是在一个处理器引擎上运行的串行软件,而不是并行运行的软件。
微软首席研究及战略官克瑞格·蒙迪说:“过去50年来,我们一直使用一种方式编写软件,现在,我们要开始朝一个不同的模式转变了。”
并行计算已经出现一段时间了,但是,仅仅限于高端的超级计算机,为这些超级计算机编写程序相当困难而且也耗费时间。
对普通的程序员来说,现在面临的挑战是他们能否编写在并行计算机上运行的软件,同时让成本更低。蒙迪预计,微软将找到解决的方式。
蒙迪说,毕竟人类的大脑本身就是一个相当庞大的并行计算机,编写出能够并行运行的程序是使计算机更像人类一样工作而不仅仅只是个机器的关键。
世界上没有亘古不变的绝对真理,摩尔定律也有湮没于历史的尘埃中的一天。其实,早在2005年,戈登·摩尔本人就曾表示:“摩尔定律不可能永远持续下去。因为芯片的体积越来越小,并且已经接近原子的体积,这就是一个根本性的障碍,统治半导体业40年的摩尔定律有可能在未来10年至20年内被打破。”
现在,我们还无法准确断定摩尔定律还能管用多久,所有的预测和猜想都预示着下一次技术的革新和腾飞。以目前的情况来看,虽然多核技术发展迅速,但是,其普及还需要软件的支持以及完整的产业链的建立。
引领PC机迈入多核并行计算时代编辑本段回目录
随着多核处理器在PC机上的普及,PC机上的计算方式也要 “改朝换代”了,串行计算将步入历史,而并行计算时代则逐渐走向主流。并行计算对我们的应用有什么变化呢?实现并行计算的最大障碍是什么呢?
并行时代到来
在单核处理器时代的初期,程序是以独占CPU的方式串行执行。随后,操作系统由DOS 到Windows 的变革,单核处理器在PC机上程序的执行有了里程碑式的进步,操作系统的并发调度和CPU的分时执行让程序执行由串行方式变为并发方式(concurrent),CPU的利用率得到了有效的提升。
为了让大家更容易理解串行和并行的概念,这里举个形象的例子。如果有一座跨河的桥,它只有一个车道,由于承重的问题一次只允许一辆车通行,这样任何需要过河的车辆都要排队等候一辆一辆逐个通过。如果我们多建几座桥梁或者建的新桥有多个车道同时有更大的承重能力,这样多辆汽车就可以并行通过桥梁,通行效率就大为提高了。现在清楚了串行和并行效率上的差别了吧!
多核处理器则进一步让并发执行的多个程序以更高效的并行方式执行(parallel),也可以让一个程序中多个并发执行的线程以并行的方式执行。程序的执行效率有了本质的提升。如果配合虚拟化技术的实现,在不久的将来多个操作系统同时在一台PC机上并行运行也会变得”稀松平常”,毫不稀奇,就像我们今天在Windows 里面可以自由在多个正在运行的程序之间来回切换一样,我们可以在多个操作系统之间自由切换。
越来越多用户的PC系统都具备了双核,甚至四核的处理器,随着处理器核数的增加,程序的并行执行度可以更高,但是目前不少用户觉得多核没有带来很明显的性能提升,这是为什么呢?这是因为现在针对多核开发和优化的应用程序还比较少。其中的主要原因之一就是开发并行执行程序的难度非常大,程序员面临的巨大挑战就是如何把需要执行的任务并行化。
然而,编写并行度超过4路以上的高效率程序,没有经过系统的专业学习和长期并行编程的实践经验,编写的程序就很难充分利用多核处理器带来的并行计算优势。即使是并行编程经验丰富的程序员在编写并行度较高的程序时的效率,相比他/她编写并行度低的程序时的效率要低得多。
多核处理器在PC机上的普及和推广,英特尔无疑是领头人。如果只是硬件就绪,而可以充分利用多核优势的应用程序寥寥可数,那么PC机并行计算时代的到来只是一句空话。
如何加快并行程序设计的速度同时确保程序并行度达到高效率呢?主要方法就是:1. 把程序员编程时需要调用的标准函数库进行重新的并行设计和优化,例如,标准的数学函数库,多媒体函数库等等。 2. 并行优化的编译器,调试工具,优化工具等等。
英特尔高效程序开发工具
在这些方面,英特尔一直在不懈的努力,而且成果在业界也是有目共睹。为了让软件开发人员可以最高效率的设计程序和对程序进行优化,英特尔之前开发了高性能程序设计的套件:
Intel® Compilers —— 英特尔® 编译器,如:Intel C++ 和 Fortran 编译器 11.0
英特尔® 集成性能原件 6.0 (Intel® Integrated Performance Primitives 6.0)
英特尔® 线程构建模块 2.1 (Intel® Threading Building Blocks 2.1)
Intel® Libraries —— 英特尔® 函数库
英特尔® 数学内核函数库10.1 (Intel Math Kernel Library 10.1)
Intel® MPI Library 3.2,性能库
Intel® VTune™ Performance Analyzer ——英特尔® VTune™ 性能分析器
Intel® Thread Profiler For Windows (用于Windows 环境的 英特尔® 线程剖析器)
Intel® Cluster Tools —— 英特尔® 集群工具
英特尔® 跟踪分析器和跟踪采集器7.2带有 MPI正确性检查器(Intel® Trace Analyzer and Collector 7.2 with MPI correctness checker)
英特尔® MPI 性能指标评测 3.2 (Intel® MPI Benchmarks 3.2) 它们用于Windows 平台和Linux平台的软件开发。
Intel® Parallel Studio —— 英特尔® 并行程序开发套件
为了提高并行程序设计的效率,英特尔公司最近还推出了令人激动的并行程序开发套件——Intel® Parallel Studio,它是用于Windows 用户端的并行程序开发包。这套件有三个主要部分组成:
Intel® Parallel Composer(英特尔® 并行设计程序): 用于并行程序编码 & 调试,利用C/C++编译器和全面的线程库开发高效的并行应用程序。
Intel® Parallel Inspector(英特尔® 并行检验程序):检测并行存储与线程错误,以确保应用程序的可靠性。通过快速的代码解析,更快地发现和定位线程错误。
Intel® Parallel Amplifier(英特尔® 并行调优程序):采用直观的性能分析工具和优化工具,快速找到并行执行的瓶颈,对程序的并行性进行优化。
上述工具可以让多线程并行编程更加高效简便,使程序在多核系统上得到了性能的飞跃,达到高能效的最终结果。
为了让中国的编程高手和爱好者熟悉并行编程和这些并行编程工具的使用,由清华大学和863高性能计算机评测中心共同主办, 英特尔中国协办的 2009 “英特尔杯” 全国计算机多核程序设计大赛已经开赛了。主要面向在校学生、软件工程师、以及广大的计算机爱好者。此次竞赛的主要目的,是推动国内的学生和软件工程师使用英特尔公司最新的 Parallel Studio 软件开发套件来简化多线程编程,提升在多核平台上并行程序设计与优化的能力。
并行计算的研究历史编辑本段回目录
1955 ①IBM推出704机,主要设计者为Gene Amdahl(IBM大型机之父,提出Amdahl定律)。这是第一台具有浮点硬件的商用机器,浮点计算能力达到5k FLOPS
1956 ①为Los Alamos国家实验室开发超级计算机,IBM启动7030项目(STRETCH项目),目标是比当时的计算机快100倍。
②为Lawrence Livermore国家实验室设计超级计算机,IBM启动LARC(Livermore Automatic Research Computer)项目。
③英国的Atlas项目,由曼彻斯特大学与Ferranti公司合作,主要设计者为Tom Kilburn。
1957 ①DEC(Digital Equipment Corporation)公司成立。
1958 ①CDC(Control Data Corporation)公司成立。
②法国Compagnie des Machines Bull发布Bull Gamma 60,这是第一台多线程(multithreading)计算机,具有多个功能部件(BCD ALU/binary ALU/通用比较单元/代码转换单元等)。http://www.cs.clemson.edu/~mark/g60.html
③John Cocke 和 Daniel Slotnick在一篇IBM研究备忘录中讨论到如何利用数值计算中的并行性。之后Slotnick提出了SOLOMON ―― 一个具有1024个1-bit自治处理单元(PE)、每个单元具有128 X 32 bit存储的SIMD计算机。虽然并没有被制造出来,但其设计可视作是后来工作的开端。
1959 ①IBM发布第一台STRETCH计算机(见1956年),总共制造了8台,其中的许多技术也应用在同年发布的IBM 7090中。
②第一台LARC计算机(见1956年)发布,虽然它达到了预定的性能要求,但总共只制造了两台。
1960 ①CDC公司开始研制CDC 6600(世界第一台巨型机)
②Datamatic Division of Honeywell公司发布Honeywell 800,用硬件实现了8个程序之间的分时运行。
③E.V.Yevreinov 在俄国新西伯利亚数学学院(IMN)开始了关于具备可编程互连节点的紧藕合、粗粒度并行体系结构的研究。
1961 无
1962 ①CDC公司发布了CDC 1604机,类似于IBM 7090机,特点是字长48位,访存周期6微秒。
②Atlas计算机投入运行。这是第一台使用虚拟内存及分页技术的计算机,具有指令流水线,配备了单独的定点和浮点算术单元,速度达到约200K FLOPS。
③C.A.Petri提出了Petri Nets模型,一个用于描述和分析并发系统的理论框架。
④Burroughs公司推出的D825型对称多处理器MIMD计算机,利用交叉开关(crossbar switch)来支持1~4个CPU对1~16个内存模块的访问。所使用的CPU类似于较晚的B5000,采用了对称(SMP)的操作系统,并共用一个等待执行队列。
(请查阅http://ed-thelen.org/comp-hist/BRL64-b.html)
1963 无
1964 ①CDC公司推出CDC6600,这是第一台在技术和市场上同时获得成功的巨型机。每台机器配备了一个60位CPU及10个外围处理单元(ppu);CPU设计中采用了记分板技术(scoreboard)来处理指令相关。(查阅CAAQA /appendix A/A.8)
②IBM公司开始高级计算机系统(Advanced Computer System)的设计,预计最高每周期可发射7条指令。工程在1969年被搁置,但许多技术应用于IBM后来的机型中。
③Daniel Slotnick提议为Lawrence Livermore国家实验室开发一种大规模并行计算机,然而美国原子能委员会却把这个合同给了CDC公司(后来制造出了STAR-100机)。而Slotnick的设计得到了美国空军的资金支持,演化为后来的ILLAC-IV,并在Illinois大学制造,主要承造商为Burroughs和德州仪器(TI)公司。德州仪器公司后来开发的高级科学计算机(Advanced Scientific Computer)是这型机器的延续。
1965 ①通用、MIT、贝尔实验室开始开发Multics,这个工程的目标是开发一种通用的、共享存储的、可多重处理的分时操作系统。
②Edsger Dijkstra提出并描述了临界区问题,之后,许多关于并行系统的研究工作围绕临界区管理展开,试图找到一种既安全又有效的管理方法。
③James W. Cooley和John W. Tukey提出了快速傅里叶变换算法(FFT),它成为后来的浮点运算器最主要的运算任务之一。
1966 ①Arthur Bernstein提出针对声明相关的Bernstein条件 (简单讲,就是不独立的两条指令不可以并行执行),这是后来人们研究数据相关的基础。
②CDC公司推出CDC 6500,配备了两个CDC6400处理器,主要设计师为Jim Thornton。
③Sperry Rand公司UNIVAC分部发布了第一台多处理器计算机UNIVAC 1108,每台配备了最多3个CPU及2个I/O控制器,其专用的EXEC 8 操作系统支持多线程程序的运行。
注:
1950年Remington Rand公司收购了Eckert-Mauchly公司(ENIAC);
1955年Sperry公司与Remington Rand公司合并组成Sperry Rand公司;
1986年Sperry Rand公司与Burroughs公司合并组成Unisys公司;
④Michael Flynn发表了对计算机体系结构进行分类的论文,提出了具有较大影响的Flynn分类法。
⑤(原苏联)E.V.Yevreinov在新西伯利亚数学学院完成了Minsk-222计算机。