您的位置:首页 > 运维架构

我所了解的多核处理器与OpenMP并行计算

2009-03-12 20:24 218 查看
发信人: marion(好奇心?那只是科研的第一步!), 信区: Hardware
标  题: 优秀的硬件 需要 优秀的软件 来支持
发信站: 瀚海星云 (2007年04月14日23:36:25 星期六), 站内信件 WWWPOST

题记:
看到有业内人士介绍多核处理器,有人质疑多核处理器的性能提升,
那我就来介绍一下多核处理器要在什么条件下才能发挥其应有的性能。
顺便宣传一个观点:优秀的硬件需要优秀的软件来支持。

多核真的有效吗?
那为什么在Windows下面玩魔兽感觉不到性能提升呢?

多核真的没用吗?
为何越来越多的超级计算机采用 多核+多主机 的架构来建设呢?
为何最注重性能的大型数据库很早就开始支持SMP架构服务器呢?

优秀的硬件需要有优秀的软件帮助才能发挥性能:

比如显卡驱动——许多失败的显卡不是因为硬件性能差,而是因为驱动太烂,ATI、
3dfx、S3……这些公司都有此类经验教训,甚至因此折戟沉沙。

又比如与Sony PlayStation竞争的世嘉SS(土星),性能几乎相当,却一直没有公司能
编写出充分发挥其性能的游戏,导致PS一统江湖,而SS几乎无人知晓。

再比如Intel NetBurst的超长流水线——与竞争者K7、K8相比,Pentium4被称为“傻
快”的CPU。但是,由Fortran9X优化编译的科学计算程序就能充分发挥P4高主频的威
力,因为F90/95程序及其编译器更容易实现可预测性分支结构(并且分支数目比较
少),确保超长流水线几乎总是满的,Pentium4因而才能够“快”而不“傻”。

多核的处理器,如果只跑单进程程序的话,那就一定要利用并行编程才能发挥威力!
逻辑上可以并行的程序,如果拿OpenMP库或/和某些私有的并行库重写,然后再放到多核
处理器上运行,你就会感受到性能的飞跃……可惜的是,我们日常使用的大部分软件都
不是并行编程的,通常只能发挥单个核的作用。

为什么呢?

首先,有些程序在逻辑上是不可以并行化的!比如自动控制领域的许多程序。

其次,更重要的是,并行编程的成本太高,大型软件工程完全采用并行程序设计的风险太大
——要知道,并行程序设计迄今为止还没有一套公认的抽象体系结构,也没有很好的断点调试
工具,……开发日用软件的公司,权衡利弊,是绝对不会轻易开发并行编程的日用软件的!

日常使用的PC机软件,大多数都可以很流畅的运行在1~2GHz的单核处理器上,(我的笔
记本是Pentium3 850MHz,也没有让我无法忍受。)而且速度往往局限于硬盘存取速度和
内存大小,这就更没有可能刺激软件公司开发并行版本了。游戏?游戏主要靠的是内存
和显卡,还有…嗯…网速。

如果想发挥PC机上多核处理器的威力,你也可以同时运行多个重型进程,在合适的操作
系统(用Linux ——消费版Windows只支持两个核哦!)支持下,这些进程的压力就会分
摊到多个核上;而后,不堪重负的也许就是你的内存容量、硬盘速度以及前端总线了。

在科学与工程计算、大型数据库、监控中心等领域,性能需求高于编程代价,早在单核
时代,就已经广泛采用单主机上的多CPU,乃至多主机集群的结构,自然也很早就开始使
用并行程序——有单进程多线程的并行,有单机多进程的并行,还有多机多进程的并行。

即使是使用多主机集群(Cluster)结构的场合,往往也欢迎多核CPU的到来,因为在一台
主机的一个CPU中集成更多的核,就可以减少所需的主机总量,减少邻近核之间的通讯时
间开销,降低系统成本,还能减少占地面积和电力负荷。

多核处理器是优秀的硬件,但是,不是每个领域都会为她开发同样优秀的软件。
希望进入多核处理器并行编程的世界吗?你可以从 OpenMP 并行库开始,他就是多核处
理器的“通用驱动程序”。

BTW:
如果是多主机集群,那么只好仰仗于MPI来实现并行计算,当然还有另外一种复杂的技术
—— MPI与OpenMP 混合编程,每台主机上OpenMP并行,主机间通过MPI协同并行 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息