您好! 请登录 注册

IT系统架构 | 并行计算应用

发表时间: 2020-04-11 14:14:39

浏览: 25

艾锑无限15年为全球中小企业提供六维一体化的IT外包服务解决方案,从企业桌面运维,网络维护,服务器维护,弱电工程,网站开发,小程序开发,到网管驻场,项目外包,信息化上云,阿里云全案解决方案等:全国免费热线:400-650-7820

IT系统架构 | 并行计算应用

一、相关背景

a.从1986年到2002年,微处理器的性能以平均50%的速度不断提升。但从2002年开始,单处理器的性能提升速度下降到每年大约20%,这个差距是巨大的。所以,从2005年起,大部分主流的CPU制造商决定通过并行处理来快速提升微处理器的性能。

b.单处理器性能大幅度提升的主要原因之一是日益增加的集成电路晶体管密度。随着晶体管尺寸减小,传递速度增快,集成电路整体的速度也加快,它们的能耗也相应增加,而在21世纪的前10年中,用空气冷却的集成电路的散热能力已经达到极限了,所以,集成电脑制造商的决策是:与其构建更快、更复杂的单处理器,不如在芯片上放置多个相对简单的处理器,这样的有多个处理器的集成电脑称之为多核处理器。

c.通常我们传统单核处理器上编写的程序无法利用多核处理器,我们需要使得程序充分利用处理器更快的运行程序,更加及时与逼真的模拟现实世界。为了达到这一目的,就需要软件开发工程师将串行程序改写为并行程序。于是并行计算架构出现了。 

二、为什么需要不断提升的性能?

过去的几十年,借助不断提升的计算能力,人类在许多领域(如:人类基因解码、医疗成像、人工智能、虚拟现实等)发展的非常迅速。但随着人类在科学步伐的前进,这里领域的许多应用在计算能力上的要求也越来越高,解决问题的规模也在不断的增加,如下就是一些例子:

气候模拟:为了更好地理解气候变化,我们需要更加精确的计算模型,这种模型必须包括大气、海洋、陆地以及冰川之间的相互关系。我们需要对各种因素如何影响全球气候做详细研究。

蛋白质折叠:人们相信错误折叠的蛋白质与亨廷顿病、帕金森病、老年痴呆症等疾病有千丝万缕的联系,但现有的计算性能严重限制了研究复杂分子(如蛋白质)结构的能力。

药物发现:不断提高的计算能力可以从不同方面促进新的医学研究。例如,有许多药物只是对一小部分患者有效。我们可以通过仔细研究疗效欠佳患者的基因来找到替代的药物,但这需要大规模的基因组计算和分析。

能源研究:不断提高的计算能力可以为某些技术(如风力涡轮机、太阳能电池和蓄电池)构建更详细的模型。这些模型能够为建立更高效清洁的能源提供信息。

数据分析。

三、怎样编写并行程序?

对于这个问题,有多种可能的解决方案。大部分方案的基本思想都是将要完成的任务分配给各个核。有两种广泛采用的方法:任务并行和数据并行

任务并行是将待解决问题所需要执行的各个任务分配到各个核上执行。

数据并行是指将所需要处理的数据分配给各个核,每个核在分配到的数据集上执行大致相似的操作。

并行硬件:

根据Flynn(费林)分类法,即基于指令和数据流方式,可以将并行计算机划分为:SISD、MISD、SIMD和MIMD四种。SISD系统即是我们典型的冯诺依曼系统,它是一次执行一条指令,一次存取一个数据项。而其它三个才是真正的并行计算系统。SIMD系统通过对多个数据执行相同的指令,从而实现在多个数据流上的操作,因此,该系统非常适合处理大型数组的简单循环。在并行计算中,一般将MIMD作为主要研究对象。其中MIMD系统主要有两种类型:共享内存系统和分布式内存系统

并行软件:

我们编写并行计算程序的主要目的当然是为了提供它们的性能,那么我们应该如何去评价一个并行计算程序的性能呢?

答案是:加速比与效率。

加速比:S=T串T并加速比:S=T串T并

加速比:η=T串pT并,p为线程数加速比:η=T串pT并,p为线程数

如何将串行程序改为高性能的并行计算程序?

一般情况下,需要将工作进行拆分,使得分布在每个进程中的工作量大致相仿,并行让它们之间的通信量最少。于是串行程序并行化设计步骤一般按以下几步进行:

1)划分

将串行程序中需要要执行的指令和数据按照计算部分拆分成多个小任务。关键:识别出可以进行并行执行的任务。

2)通讯

确定第一步识别出来的任务之间需要执行何种通信。

3)凝聚/聚合

将第一步确定的任务与通信结合成更大的任务。

4)分配

将上一步聚合好的任务分配到进程/线程中。这一步还主要注意的是,要使得通信量最小化,让各个进程/线程所得到的工作量大致均衡。

两种主要并行系统

 

个人理解

共享内存系统即单机并行,在一台机器上运行程序时分配多个进程或线程来达到加速的目的。比如用OpenMP和Pthreads进行共享内存编程,在程序中加入相关并行语句实现线程的创建和销毁。

注意:每台电脑的核数,是一个程序中同时运行的最大线程数或进程数(这里的同时指同一时刻,注意区分并行和并发的概念)。例如用OpenMP进行编程,一般情况下如果设置的线程数大于电脑核数是毫无意义的,因为同时运行的线程数只能等于核数,此时多余的线程变为并发运行,这样在线程切换上会浪费更多的时间。

分布式内存编程是在分布式系统上进行,计算框架包括Hadoop MapReduce、Spark、Storm和MPI等

以上内容由北京艾锑无限科技发展有限公司整理

咨询热线
15601064618

推荐分享

扫描领千元礼品

© 2015-2017 www.bjitwx.com 京ICP备06011561号  北京艾锑无限科技发展有限公司 北京朝阳区酒仙桥路2号798艺术区音响南路A01座