在说我的主题云计算之前,我还行拓展一个很老的知识点,就是并行计算,这个概念应该是四五十年的历史了,在计算机里面应该是算是old的了。
摩尔定律大家都知道,简单说每年翻一倍,但这个定律过去几年随着intel CEO的下跪,证实了这个规律的不可延续性,硬件的精度总是有限的,由于同样小的空间里集成越来越多的硅电路,产生的热量也越来越大,这种原本两年处理能力加倍的速度已经慢慢下滑。此外,还有更多更大的问题也慢慢显现,如今顶级的芯片制造商的电路精度已经达到14纳米,比大多数病毒还要小。即便现在鼓吹的2-3纳米,电子的行为将受限于量子的不确定性,晶体管将变得不可靠。在这样的前景下,尽管这方面已经有无数研究,但目前人们仍然无法找到可以替代如今的硅片技术的新的材料或技术。
好了,瞎扯了这些东西,主要是为了说明,硬件是有上限的,所以才需要并行计算在软件层面上面去解决高性能计算问题。
在过去几年,并行计算在很多方面都有突出贡献,譬如人类基因测序、气象模型和地址探测等多个方面,国内我还知道一家叫做并行科技的公司,一直从事着方面工作,在太湖之光、银河等高性能计算中心里面都有它的身影。上面说到的太湖之光,顺便多说一句,2016年6月20日在LINPACK性能测试中以 93 PFLOPS 的测试结果超越同为中国组建的天河二号(LINPACK成绩约为34 PFLOPS),成为世界上最快的超级计算机。相关的话题太多了,譬如权威的测试LINPACK排名都能说出一地鸡毛。
在并行计算中,所有处理器是紧耦合于共享内存或者送耦合于共享分布式内存,处理器之间通信通过共享内存或者消息传递完成,它主要有以下几个概念:
并行计算机系统:并行计算的硬件平台
并行算法:并行计算的理论基础
并行程序设计:并行计算的软件支持
并行应用:并行计算的推动力
这个里面的概念也很多譬如:并行计算的算法包括划分法、迭代法、分治法和流水线法等,每一个都可以单独说一篇文章。我只能尽力一点一点的理清楚。
先从串行到并行讲起,你可以把一个但进程的for循环,拆分放到不同CPU(或者不同机器)上面跑,这就是做了并行化。

隐式并行

流水线:如果生成汽车要100小时,那么我拆分到10个流水线那么是不是就可以把时间缩短,缩短时间是衡量并行算法的很重要指标speedup。处理器把取指令、调度、译码、取操作数、执行以及存储等重叠到不同阶段,对于处理器而言,现在任务变小了,但流水线任务受制于流水线中最大原子任务,
超标量:处理器一个周期发送多条指令。如果两个指令是相互独立的,就可以同时去运行,原理简单,但操作起来很复杂,某一个指令的数据被后续指令所依赖,这种数据相关性的就不能同时执行。

超长指令处理器,这个是依赖编译器,在代码编译时,把能够并发的执行的指令合并到一组里面,作为一个超长指令在处理器上面运行。

控制结构和通信模型

并行任务方法以及指定任务之间相互作用机制,是并行计算两个方面,分别就是控制结构和通信模型。
先说控制结构,单指令流多数据流,单一的控制部件向每个处理器分发指令;与之对应是多指令多数据流,就是每个处理器能够独立于其他处理器执行程序。

通信模型

不同处理器如何保持数据的一致性能呢,那么就需要通信机制。
共享地址空间平台:支持一个公共的数据空间,所有处理器都能访问该空间,处理器通过修改共享空间内的数据来实现通信。共享地址空间可以使本地(处理器独占)的也可以是全局的(所有处理器公用),如果访问系统中任何内存字(本地、全局)的时间都相同,叫做一致内存访问UMA,另一方面,如果访问某些内存的耗时高于其它内存访问时间就叫做非一致内存访问NUMA。
消息传递平台:每个节点都有自己独立空间,运行在不同节点上的进程通过消息来完成,消息传递支持在不同节点上面运行不同程序。

网络模型

程序最终还是要运行在物理集群集群上面的,这么多物理服务器怎样网络连接,就引出网络模型这个问题,这个的分类也很多,简单来说就是静态和动态。复杂来说,1.总线:所有节点共享介质,总线成本与节点数目成线性关系,此外网络中任何两点的访问时间是常数。2.交叉开关网络,用形成网格形成的开关点,可以将处理器m和存储n连接起来,要实现这个网络要m*n个开关。3.全连接网络,这个简单,就是每个点都和其它点连接,这个是一个理想网络。4.线性阵列和超立方体,二维阵列的每个节点都有上下左右四个节点,相应的三维节点,每个节点都有6个与之相连的节点。5.基于树的网络,节点之存在一条通路网络。

Logo

汇聚原天河团队并行计算工程师、中科院计算所专家以及头部AI名企HPC专家,助力解决“卡脖子”问题

更多推荐