什么网站比较容易做,江苏网站备案,秦皇岛市住房和城乡建设局网,做门户型网站如果觉得本篇文章对你有所启发#xff0c;请给我点个赞好吗#xff0c;这对我很重要#xff0c;谢谢 文章目录1 并行计算基础1.1 什么是并行计算1.1.1 对计算速度的需求1.1.2 并行计算1.1.3 并行计算的基本条件1.1.4 平行计算和分布式计算1.2 为什么需要并行计算1.3 并行计算… 如果觉得本篇文章对你有所启发请给我点个赞好吗这对我很重要谢谢 文章目录1 并行计算基础1.1 什么是并行计算1.1.1 对计算速度的需求1.1.2 并行计算1.1.3 并行计算的基本条件1.1.4 平行计算和分布式计算1.2 为什么需要并行计算1.3 并行计算机的发展1.4 并行算法复杂性分析1.5 并行计算的基本概念1.5.1 概念1.5.2 最大加速比1.6 并行计算机分类1.6.1 费林分类法1.6.1.1 SISD1.6.1.2 MIMD1.6.1.3 SIMD1.6.1.4 MISD1.6.2 存储器结构分类法1.6.2.1 共享存储器多处理机1.6.2.2 消息传递多计算机1.6.2.3 分布式共享存储器1.6.2.4 共享存储器多处理机体系结构1.7 并行计算模型1.7.1 共享内存模型1.7.2 消息传递模型1.7.3 两种模型的优缺点1.8 机群计算1.8.1 以互联计算机作为计算平台1.8.2 超级计算机的概念1.8.3 并行计算机系统互连1.8.3.1 以太网连接1.8.3.2 TCP/IP1.8.4 并行程序间的通信——网络拓扑1.8.4.1 基本概念1.8.4.2 拓扑结构1 并行计算基础
1.1 什么是并行计算
1.1.1 对计算速度的需求
随着计算机硬件的快速发展采用计算机进行大规模计算在科学研究中已经发挥越来越大的作用逐渐成为科研人员和工程技术人员必不可少的研究手段和工具之一。随着数据规模的快速增大和求解问题复杂度的提高仅仅靠单台计算机通常难以满足大规模快速计算的需要尤其是对于天气预报、信息检索、新闻提炼这些时效性较高的应用这些应用一般都属于我们说的巨大挑战性问题。对于老式的传统计算机来说它们只有一个处理器你可以简单理解为CPU而并行计算的出现就是为了解决单台计算机算力不足的问题。所谓并行计算就是指将一个应用分解为多个子任务分配给不同的处理器各个处理器之间相互协同并行地执行子任务从而达到提高求解速度或者求解大规模应用问题的目的。这里我们要注意多个处理器未必是多台计算机哦随着时代的发展一台计算机也拥有多个处理器。 1.1.2 并行计算
并行计算(Parallel Computing)在有些书上也叫平行计算在后面的讲解中我们的进程数或处理器数用p表示而用多处理机(multiprocessor)来表示所有多于一个处理器的并行计算机系统。
基本概念并行计算是指在并行机上将一个计算问题分解成多个子任务分配给不同的处理器各个处理器之间相互协同并行地处理子任务从而达到加速分解或者求解大规模应用问题的目的。基本思想通过多个处理器共同解决同一个计算问题即每一个处理器单独承担整个计算任务中的一部分。目前问题由于是不同处理器解决同一个计算问题所以出现的问题就是如何分解计算问题。目前常见的方法大的来说分为时间上和空间上的并行。 1.1.3 并行计算的基本条件
并行机并行机需要包含多个处理器核心这些处理器核心通过特定硬件相互连接相互通信。应用问题必须具有并行度也就是说应用可以分解为多个子任务这些子任务可以并行地执行。将一个应用分解为多个子任务地过程成为并行算法地设计。并行编程。在并行机提供的并行编程环境上具体实现并行算法编制并行程序并通过并行该程序从而达到并行求解应用问题的目的。 下面通过一个数组求和的例子来给出并行算法设计的思路。虽然第一次见到这些公式可能会被吓到但是这里我可以总结一下。 如果我们要解决一个S∑i0n−1aiS \sum^{n-1}_{i 0}a_iS∑i0n−1ai的问题。那我们实际上就是要求一个从0加到n-1的总数那么我们可以设总数为n其中这个n由四部分组成即4个m每两个m对应一台机器也就是说我们可以用下面的式子来表示我们上面说的 S0∑i0m−1ai,S1∑im2m−1ai,S2∑i2m3m−1ai,S3∑3mn−1aiS_0 \sum^{m-1}_{i0}a_i,S_1 \sum^{2m-1}_{im}a_i,S_2 \sum^{3m-1}_{i2m}a_i,S_3 \sum^{n-1}_{3m}a_i S0i0∑m−1ai,S1im∑2m−1ai,S2i2m∑3m−1ai,S33m∑n−1ai 这样的话一个问题被分解成四部分计算。如果设S00S0S1S_{00} S_0S_1S00S0S1和S01S2S3S_{01} S_2S_3S01S2S3可以同时计算S00S_{00}S00和S01S_{01}S01最后再计算SS00S01S S_{00}S_{01}SS00S01。 1.1.4 平行计算和分布式计算
平行计算和分布式计算(distributed computing)都是用同一台电脑连接在一起但是它们的目的不一样。并行计算是相对于串行计算而言的分布式计算是相对于单机计算而言的。如果一个计算是串行跑的即使他是在集群上跑的也不是并行计算同时如果一个计算是在集群上跑的即使是串行跑的也是分布式计算。
并行计算平行计算分布式计算不同事件同时发生跨系统或远程服务器的活动将单个应用程序分散到多个核心/处理器/进程上以更快的速度实现更大规模的应用更多地关注并发性和资源共享大多数用于科学计算来自商业并行和并发也是两个不一样的概念关于这点在计算机操作系统笔记中1.1.2.1并发中有记载如果想了解可以去查看。 1.2 为什么需要并行计算
并行计算是人们为了提高求解问题的计算速度而提出的。根据摩尔定律现在的电子元件已经做到了一个瓶颈了如果想要提高计算效率就必须从算法入手。所以即使单个计算机的计算能力已经非常强大仍然无法满足有很多科学和工程计算问题的计算需求。因此并行计算机是解决这些问题不可或缺的重要工具。
并行计算出现的根本原因是因为数据的积累。 举个例子一个餐厅顾客很多而且顾客还在源源不断地增加如果想要更快地处理好这个问题那肯定是增加服务员。同样地高速公路地收费站众所周知高速公路的车辆是非常多的如果只有一个收费站那就相当于串行这样的话收费效率很慢解决这类问题就是把公路拓宽然后增加多个收费站同时收费。 1.3 并行计算机的发展
我国高性能计算机的研制水平一直处于世界领先行列这对我国开展科学研究促进技术进步所起到的巨大推动作用是毋庸置疑的然而我们必须清楚认识到在使用高性能计算机方面与先进国家相比还有巨大差距。 1.4 并行算法复杂性分析
在数值计算中我们通常需要预先知道一个算法在计算机上和何时能够完成。从理论上就可以得出哪些算法具有优势。因此需要建立分析算法复杂性的手段从而可以对算法进行定量评估。
那么什么是算法复杂性呢
算法复杂性主要是指由四则运算次数和存储空间大小两部分构成。为了能够更好地了解我们是怎么优化算法的我们先来用两个例子看看算法的复杂性怎么算。
如果我们现在要计算xnx^nxn的复杂性那么我们首先要给出计算xnx^{n}xn的算法针对算法给出计算复杂性。诶可能你说我计算个xnx^{n}xn哪里需要那么复杂比如x5x^5x5我只需要先算然后用x1x^1x1再乘一个x1x^1x1然后依次计算完。但是也可以采取其他的顺序比如先算x1x_1x1乘x1x_1x1。然后第三个x1x_1x1和第四个x1x_1x1相乘这样得出两个x2x_2x2相乘后再乘上x1x_1x1。这就是我们算法的思想。据此我们也能看出当所有aia_iai均非零时这个算法的复杂性为2k1。即2log2n12log_2n12log2n1这个就是我们说的算法复杂度了。不过在并行计算中我们叫做计算复杂性。通过此算法可以看出即使一个简单的问题它的计算方法也可以很复杂。但该问题并不适合并行计算。 1.5 并行计算的基本概念
1.5.1 概念 粒度在并行计算执行过程中两个通信之间每个处理器计算工作量大小的粗略描述分为细粒度和粗粒度。 粒度在并行算法设计中必不可少通常在进程数与效率之间选择粒度的大小比如后面将要介绍的MPI并行程序更适合粗粒度并行而使用CUDA并行程序就需要细粒度。 并行度某一时刻多个处理器上可以同时执行的子任务个数。 并行度越高说明可以使用的处理器多但不一定有好的效率需要根据具体问题具体分析。 加速比在一些书上也被叫做加速系数求解一个问题的最佳串行算法执行时间与并行算法地执行时间之比。 在一个多处理机上研发求解时也许最感兴趣的一个问题是采用多处理机求解该问题能快多少为了进行这种比较我们应该使用单处理器能得到的最优解也就是上面提到的最佳串行算法执行时间与在多处理机上所研究的并行算法进行比较。加速比是对相对性能的衡量它的定义为S(p)使用单处理器系统执行时间使用具有p个处理器的多处理机的执行所需的时间S(p) \frac{使用单处理器系统执行时间}{使用具有p个处理器的多处理机的执行所需的时间}S(p)使用具有p个处理器的多处理机的执行所需的时间使用单处理器系统执行时间
如果我们用TsT_sTs来表示分子部分用Tp(q)Tp(q)Tp(q)来表示分母部分那么公式可以简化为S(p)TsTp(q)S(p) \frac{T_s}{Tp(q)}S(p)Tp(q)Ts。
S§给出了使用多处理机后所能得到的速度增加。
在理论分析中加速系数也可以根据计算步来进行预测即
S(p)使用单处理器所需的计算步数使用具有p个处理器所需的并行计算步数S(p) \frac{使用单处理器所需的计算步数}{使用具有p个处理器所需的并行计算步数}S(p)使用具有p个处理器所需的并行计算步数使用单处理器所需的计算步数
对于顺序计算通常用时间复杂性来比较不同的算法。也就是说我们对于并行计算也可以同样应用时间复杂性来比较也就是计算步数。但是我们忽略的是在并行计算中我们不仅仅考虑算法本身的优劣实际应用中还要考虑各并行部分之间的联系所需的开销。 效率有时需要知道处理器在多长时间内用于有用的计算这可以从系统效率(efficiency)推得。至此我们可得定义 E使用单处理器的执行时间使用多处理机执行时间×处理器个数TsTp(q)×PS(p)pE \frac{使用单处理器的执行时间}{使用多处理机执行时间×处理器个数} \frac{T_s}{T_{p(q)}×P} \frac{S(p)}{p}E使用多处理机执行时间×处理器个数使用单处理器的执行时间Tp(q)×PTspS(p) 其中E以百分比形式表示例如如果E有百分之五十则平均来讲处理器仅有一半的时间是用来计算的。百分之百的最大效率仅当所有处理器在所有时间都用于计算时才会出现。 1.5.2 最大加速比
那么谈论了这么多到底是什么原因限制了加速呢
有时并非所有处理器都能完成有用的工作从而导致了一些处理器处于闲置状态。在并行版本中需要在顺序计算中不会出现的额外计算。例如对常数重新进行局部计算。进程间的相互通信。 1.6 并行计算机分类
一台并行计算机可以是一台具有多个内部处理器的单计算机也可以是多个互联的计算机构成一个一体的高性能计算平台。术语并行计算机通常是指专门设计的部件。根据不同的分类法可以分成不同类型的并行计算机。
1.6.1 费林分类法
在操作系统中我们知道程序根据高级程序设计语言设计程序设计语言在实现程序的功能的时候是转换为机器指令来告诉机器该干什么。大概在50年前Flynn(1996)创造了一种计算机分类方法,中文译为费林分类法该分类基于两个独立维度的计算机体系结构这两个维度即数据和指令。 根据以上提到这两个维度我们可以划分为四大类如图 1.6.1.1 SISD Single Instruction,Single Data(SISD) SISD机器是一种传统的串行计算机它的硬件不支持任何形式的并行计算所有的指令都是串行执行。并且在某个时钟周期时间片内CPU只能处理一个数据流。因此这种机器被称作单指令流单数据流计算机。早期的计算机都是SISD机器如冯诺.依曼架构如IBM PC机早期的巨型机和许多8位的家用机等。 1.6.1.2 MIMD Multiple Instruction,Multiple Data(MIMD) 在一个通用的多处理机系统中每个处理器拥有一个独立的程序由每个程序为每个处理器生成一个指令流不同的数据可能需要不同的处理对应赋给不同的指令。每条指令对不同数据进行操作。Flynn将这种形式的计算机分类为多指令流多数据流计算机。 我们前面叙述的共享存储器或消息传递多处理机都属于MIMD类型。其已经经受了时间考验至今仍然广泛地用于这种操作模式下的计算机系统中。例如多核CPU计算机。 1.6.1.3 SIMD Single Instruction,Multiple Data(SIMD) 如果对某些应用而言将计算机设计成由单一程序生成指令流但是却有多个数据存在时将会在性能上有很大的优势。打个比方你输入一条指令就能够处理很多的数据那不就是提高了性能吗。我们熟知的Hadoop就是基于SIMD的。 SIMD是采用一个指令流处理多个数据流。这类机器在数字信号处理、图像处理、以及多媒体信息处理等领域非常有效。 Intel处理器实现的MMXTM、SSEStreaming SIMD Extensions、SSE2及SSE3扩展指令集都能在单个时钟周期内处理多个数据单元。也就是说我们现在用的单核计算机基本上都属于SIMD机器。 1.6.1.4 MISD Multiple Instruction,Single Data(MISD) MISD是采用多个指令流来处理单个数据流。由于实际情况中采用多指令流处理多数据流才是更有效的方法谁会去一个数据多个指令去处理呀。因此MISD只是作为理论模型出现仅仅只在1971年CMU的实验中出现过也就是说实际上并不存在SISD。 1.6.2 存储器结构分类法
1.6.2.1 共享存储器多处理机
这里说得比较晦涩难懂实际上这里和操作系统进程的共享存储是同一回事详情可见计算机操作系统笔记2.1.4.2 共享存储。
再说的简洁点这里指的共享存储器多处理机你完全可以理解为一个多核的计算机或者很多个单核的共用一份内存的计算机。 也就是说处理器如果想要处理数据那么就得跑去存储器拿数据。怎么知道数据在哪呢通过存储器上的地址去拿。 在操作系统中我们学过如果这个时候两个处理器要同时在一个存储器上拿东西那它们一定要提前沟通好也就是说两个处理器对共享空间的访问是互斥的。它们提前沟通的工具是互联网络。 多处理机系统由多台独立的处理机组成每台处理机都能够独立执行自己的程序和指令流相互之间通过专门的网络连接实现数据的交换和通信共同完成某项大的计算或处理任务。系统中的各台处理机由统一的操作系统进行管理实现指令级以上并行这种并行性一般是建立在程序段的基础上也就是说多处理机的并行是作业或任务级的并行。共享存储多处理机系统是指有一个可以被所有处理机访问的存储器系统。存储器系统由一个或多个存储器模块组成所有的存储器模块使用一个统一的编址的地址空间。处理机可以用不同的地址访问不同的存储器模块。按存储器组织方式分类共享存储多处理机系统分为集中式共享存储器系统和分布式共享存储器系统。
对共享存储器多处理机进行编程设计到在共享存储器中存有可由每个处理器执行的代码。每个程序所需的数据也将存于共享存储器中。即程序段和数据段都在共享内存中。因此如果有需要的话每个程序可以访问所有的数据。
程序员要想使用并行计算机的每个处理器来处理一件问题那原有的高级程序语言就无法使用了。所以为了解决此问题程序员们开发了一种新的、高级并行程序设计语言它具有特殊的并行程序设计构造和语句以声明共享变量和并行代码段。虽然想法很好但是这类并行程序设计语言并不是使用很广泛。
比较广泛的做法是在普通的高级程序语言的基础上生成并行代码你可以理解为嵌入式编码类似于嵌入式SQL。此时使用制定好规则的编程语言然后用预处理器命令对程序的并行部分加以说明即可这类实践比较著名的模型就是OpenMP。它去油编译器命令和构造的一个工业标准可融入到C/C中。
另外我们也可以多开几条线程这样的话给人的感觉也像是并行计算的样子不同线程中含有为各个处理器执行的规整的高级语言代码序列这些代码序列可以用来访问共享单元。但是需要注意的是实际上用线程的方法不是并行而是并发。
使用一个规则的顺序编程语言并修改语法以说明并行性。这也是一种常用的共享存储器多处理机模型常用的模型是UPC即统一并行CUnified Parallel C。
共享存储器多处理机是很一种很不错的并行计算机综上所述其方便了对数据的共享。 对于上图所示的基于总线互联结构的小型共享存储器多处理机系统是很流行的。这种在很多系统中都有广泛应用。但是用硬件来达到所有处理器的快速访问是很困难的特别是在有大量存储器时。因此大多数大型的共享存储器系统具有某种形式的层次或分布式存储器结构以此来使得处理器能够更快的速度访问物理上相近的处理单元。 1.6.2.2 消息传递多计算机
另外一种多处理机系统的形式可以通过互联网络连接多台完整的计算机来构成。这里实际上对应了操作系统笔记中2.1.4.4 消息传递。 多处理机系统的形式可以通过互联网络连接多台完整的计算机来构成。如下图所示 每台计算机由一个处理器和本地主存储器组成其他处理器不可访问该本地的主存储器。换句话来讲就是一台计算机的处理器只能访问它对应本地的主存储器而无法访问其他计算机上的主存储器。不同的计算机之间是用互联网来建立联系的通常来说多个电脑之间通过互联网传递的消息含有的可能是程序所指明的其他计算机处理器进行计算时所需的数据。这种多处理器系统我们通常称为消息传递多处理机(message-passing multiprocessor)或简称多计算机。你可以理解为多计算机实质上是真正意义上的分布式存储器计算机不是分布式共享存储器哈。
我们在操作系统常提到进程这个概念在多计算机上我们可以把一个问题分成多个并发进程它们可在各台计算机上分别执行。如果有6个进程和6个计算机则我们可在每台计算机上执行一个进程如果进程数大于计算机数那么其中一台计算机中如果是多核可以采用并行执行如果是单核可以采用分时方式执行。进程间将通过发送消息的原语来联系对方。同样地发送消息可以采用两种方式一种是直接通信方式一种是间接通信方式如果想详细了解可以前往教材或者操作系统笔记中了解。
消息传递多计算机比共享存储器多处理机更容易在物理上进行扩展也就是说它可以构成较大规模。一般规模比较小的叫做机群Cluster规模比较大的叫做超级计算机SuperComputer规模很大的叫做数据中心DataCenter。 1.6.2.3 分布式共享存储器
对于程序员来说消息传递多计算机并没有像共享存储器多处理机那么好用因为它通常需要程序员在它们的代码中使用显式的消息传递调用即用原语来进行数据交换。而这又非常容易出错且很难调试所以在程序中写的代码很类似于低级的汇编语言。你想想是不是嘛你要写代码去调硬件那不就是汇编嘛。数据不能共享且必须拷贝在一些具体的应用中这就很可能成为问题因为要拷贝数据冗余不说还要多次拷贝多次操作。但是消息传递多处理还是有很多优点的它不需要专门的同步机制以控制对数据的同时访问。如果使用这些机制将会明显提高并行程序的执行时间。
由于意识到从编程观点而言期望使用共享存储器范例一些研究人员开始追求分布式共享存储器系统的概念。从名字上面看存储器物理地分布在每个处理器中但每个处理器使用单一的存储器地址空间对整个存储器进行访问。当一个处理器要访问的单元不在本地存储器中时必须使用消息传递方法在处理器和存储单元之间以某种自动方式进行数据的传递以隐藏存储器是分布的这一事实。当然远程访问将导致更大的延迟而且比起本地访问来此延迟常常是相当大的。
简单来说就是分布式共享存储器的内存在物理上分离逻辑上统一。 1.6.2.4 共享存储器多处理机体系结构
根据1.6.2.1 讲述的共享存储器多处理机结构我们还能按存储器组织方式分类共享存储多处理机系统分为集中式共享存储器系统Unirom Memory AccessUMA和分布式共享存储器系统Non-Unirom Memory AccessNUMA。 集中式共享存储器系统由于直接访问存储器所以拥有高效率并且每个处理器到达存储器的时间都相等。但是当CPU太多很可能不能一起连在同一个存储器上而且效能可能也会达到某个程度上不去。例如commercial servers(商用服务器)。 而分布式共享存储器系统不能直接访问存储器其跨连接的访问存储器速度较慢但是其CPU的增多提高了计算效率在CPU增多提高的效率大于访问存储器时间效率损失时我们也可以理解为是一种高效。例如HPC server(高效能服务器)。 1.7 并行计算模型
并行编程模型作为硬件或内存架构之上的抽象存在。一般来说编程模型的设计与计算机体系结构相匹配。如
如果是共享内存程序那么对应共享内存机模型如果是消息传递程序那么对应分布式内存机模型消息传递模型
虽然一般来说是上面两种模型但是其并不是一一对应。编程模型不受机器或内存体系结构的限制。即使你是一台电脑也可以使用分布式内存机模型即使你是多台电脑也可以使用共享内存模型。
1.7.1 共享内存模型
对于共享内存模型来说最著名的两个模型莫过于Pthread和OpenMP。对于Pthread来说它是并行源代码调用的子程序库也就是说写起来相对复杂抽象度比较低。而对于OpenMP来说抽象度比较高这就意味着我们并不需要写过多的代码。其为嵌入在串行或并行源代码中的一组编译器指令。如图所示 1.7.2 消息传递模型
消息传递模型可以在计算过程中使用自己的本地内存的一组任务。多个任务可以驻留在同一台物理机器上和/或跨任意数量的机器。任务通过发送和接收消息通过通信交换数据。这和我们操作系统里面讲到的消息传递所做的事是一样的只是这里写的比较抽象。
消息传递模型建立在MPI消息传递接口上其常见的API为send 、recv、 bcast、Gather、Scatter等。 1.7.3 两种模型的优缺点 共享内存模型 优点缺点可以分享数据结构没有区域性控制只需注释循环规模不大解决串行代码消息传递模型 优点缺点区域性控制需要重新思考整个应用/数据结构问题CPM通信在代码中都是显式的有些问题不知道什么时候说“接收”大量繁琐的打包/解包代码1.8 机群计算
1.8.1 以互联计算机作为计算平台
综上所述我们已经讲了许多专门设计、用作并行计算平台的并行计算机其中包括多处理机和多计算机。
实际上多年来许多大学的研究项目都偏向于去研究多处理机系统。但是问题是在你研究的时候处理器不断的在更新迭代也就是说第二年的处理器速度很可能比第一年的处理器速度快一倍。那后面n年后买的处理器说不定是第一年处理器效率的n倍。
为了解决上述问题超级计算机的开发商只有一种办法我不是说后面n年后买的处理器说不定是第一年处理器效率的n倍吗那我就买n个处理器用钱来解决一切。当然这样对钱不友好。
在后期一些大学尝试了一种更为经济的办法就是不用多处理机啦用多计算机即使用互联的工作站和PC机来构成一个强大的计算平台。使用工作站网络有许多显著优点胜过那些专门设计的多处理机系统关键的优点如下
可用较低的成本使用有很高性能的工作站和PC机系统可以很容易地引入那些可以买到的最新的处理器且系统可以通过加入附加的计算机磁盘以及其他资源增量式地加以扩展自身原有的硬件可使用已有的应用软件或对之加以修改
为了让这些很多计算机连接起来的计算机网络并行计算机去设计并行程序在后期又发明了并行虚拟机Parallel Virtual MachinePVM。在后面出现了消息传递多计算机后 又定义了标准的消息传递库即消息传递接口MPIMessage-Passing Interface。
而在后续的历史中PC机越来越便宜使得工作站的概念和PC机两者的区别已经消失。现在我们采用的小型并行计算机叫做机群(clusster)这个我们在1.6.2.2 已经提到过了。而我们用机群去解决一个问题的过程我们称为机群计算cluster computing。 1.8.2 超级计算机的概念
在前面我们已经提到过超级计算机了即中规模计算机群。超级计算机一般用机柜装着单位用Uunit单元来表示一般来说超级计算机的机柜是16-42U一个服务器一般是1-4U。
有时候一个机柜很大不一定服务器就能放的很多一般服务器放的多少取决于其散热如果使用水冷散热的话一个机柜放的服务器数量就能增加。
这里还需要引入一个知识 CUP核数即一个CPU由多少个核心组成,核心数越多,代表这个CPU的运转速度越快,性能越好。对于同一个数据处理,一核CPU相当于1个人处理数据,双核CPU相当于2个人处理同一个数据,4核CPU相当于4个人去处理同一个数据,因此处理核心数越多,CPU的工作效率也就越高。 一般来说现在的CPU上面一般有4-12个核心而为了加速计算速度后面又出现了GPU。 所以一般我们给超级计算机的定义如下 超级计算机与通用计算机相比具有高级计算能力的计算机 一般来说衡量一个超级计算机的好坏是用其每秒能计算几个浮点数来衡量的而用来检验浮点数的多少是用HPL Benchmark即高性能计算机基准来检验的。
高性能计算机基准实际上是在计算一个线性矩阵方程每秒算出来的浮点数的多少即为衡量超级计算机好坏的标准。当然超级计算机性能并不是越大越好符合自己计算要求即可不需要太高过高性能的超级计算机价格也高烧钱。
综上所述组成一台超级计算机需要考虑很多方面主要方面如下
硬件设施的来源自定义系统配置优化的软件和库巨大的金钱和能源成本
超级计算机实际上也是衡量一个国家的军事实力的标准。
1.8.3 并行计算机系统互连
1.8.3.1 以太网连接
联网计算机的通信方法通常使用的是以太网类型。最初的以太网由单条总线简称单线构成所有的计算机都连接在该总线上。而现在单线被各种交换器和集线器所代替但以太网的协议不变。 交换器可以理解为计算机网络中的每个点不同的总线汇集的点用交换器连着。集线器也是如此 源和目标结点之间的所有传递都是按包的形式进行传递的。如果一个数据过大那么就要分割成多个包分别传输等到到了目的地再将所有的包重组成为完整的数据 。
需要注意的是最初使用单条总线时线只有一条但是有多个计算机这就导致了要是同时有计算机发出信息包会对总线做一个抢占如果一个计算机发出了信息包那么另外一个检测到单线有消息包他就不会发出消息包。
最初的以太网速度很慢直到光纤的诞生速度才慢慢上来但是实际上以太网的消息传递时延仍然很大。
1.8.3.2 TCP/IP
TCP/IP是一个标准它构成了联网计算机进行通信和传递数据的规则。也就是说联网计算机不同于前面的以太网连接的计算机根据TCP/IP联网的计算机每个主机上都有一个地址一般来说都是形如192.168.1.1。
1.8.4 并行程序间的通信——网络拓扑
1.8.4.1 基本概念
相比于多处理器计算机多计算机是需要互连的而通过什么来连接是至关重要的我们不一定要采用网络来进行传输也可以用最朴素的方式——一根总线。而对于连接各台计算机来说无非就是考虑几点要素高效能、成本cost、可扩展性scalabilety、带宽bandwidth、时延latency。 时延和带宽是计算机网络的知识这里简要说明下。 “带宽”原本指某个信号具有的频带宽度即最高频率和最低频率之差单位是赫兹Hz。而在计算机网络中带宽用来表示网络的通信线路传送数据的能力通常是指单位时间内从网络中的某一点到另外一点所能通过的最高数据率。单位是“比特每秒”。 而对于时延来说一般大的看分为三类 时延种类说明网络时延一般指的是消息经过网络传输时所需的时间通信时延是指发送消息所需的总时间包括软件开销和接口延迟消息时延消息时延也被叫做启动时间也就是发送消息时所需的软硬件开销还必须加上沿互联通路发送数据所需的确切传送时间。而按过程来看也可以如下分类 发送时延传输时延从发送分组的第一个比特算起到该分组的最后一个比特发送完毕所需的时间其为主机把数据放到信道上的过程。发送时延数据长度信道带宽发送速率发送时延 \frac{数据长度}{信道带宽发送速率}发送时延信道带宽发送速率数据长度传播时延取决于电磁波传播速度和链路长度。传播时延信道长度电磁波在信道上的传播速率传播时延 \frac{信道长度}{电磁波在信道上的传播速率}传播时延电磁波在信道上的传播速率信道长度排队时延等待输出/入、链路可用处理时延检错、找出口两个结点之间路径的物理链路数也是一个重要的考虑元素因为它是确定消息延时的主要因素。其中术语网络直径是网络内两个相距最远的结点的最小链路数。网络直径给定了单个消息必须经历的最大距离它可为某些并行算法找到通信的下限。
1.8.4.2 拓扑结构
如果谈到拓扑结构那么就要从最简单的开始说起也就是我们再1.8.3.1 提到的最简单的单线结构单线结构简单但是对于时延和可恢复性较差一旦一条线路间有一处地方断裂那整条网路就断了。
为了解决此问题循环结构出现了也就是对于单条总线多加一条总线。这样的话如果想要切断整个网络需要切断两条线虽然听着可恢复性还是很差但是是单线结构的两倍可恢复性是一个较大的进步了。
后来又出现了树状结构其使用的是二叉树。 对于上图的树状网来说树中的每个交换器都有两条链路与位于其下层的2个结点相连这种结构我们叫做完全二叉树。而树状网也可以是非完全二叉树。树状结构的时延很低但是可恢复性也很差。
比较广泛使用的有限互联网络应该是网络2D-Mesh和超立方体hypercube。网络的网络拓扑如下 如果在每个自由端结点与其对立端结点循环相连则就构成了环绕网。这种网格结构不易断裂扩展性能好时延也低。
超立方体网络也有分类一种是3D超立方体一种是4D超立方体。如下所示 需要注意的是超立方体的开销高和可扩展性差一个node要如此多的链路连接成本肯定先对要高。
除了上面说的网络拓扑还有一些网络拓扑如纵横交差交换器、多级互联网等。
还有一种蜻蜓拓扑其利用高基数路由器、长通道光纤的技术进步现在被最新的超级计算机所使用。