最近在学习并行计算,其中涉及到一些概念,写下来方便以后巩固,之后会不断进行补充。
分布式内存系统
简单理解就是多个计算机相连接组成的一个系统,每个计算机都有自己的内存,这样每个计算机都可以单独的工作。就好比王者荣耀的五排,每个人对应了一个英雄,每个英雄都可以独立的操作,但这个五个英雄又共同组成了一个团队\系统,团队之间可以通过消息、语音等方式来传递消息。当然正如同游戏中的协调一样、分布式内存系统的通信和协同并不是那么简单,涉及到下一个概念MPI。
官方一点便是:分布式内存系统是一种计算机系统的架构,它由多个计算节点组成,每个节点拥有自己独立的内存空间。这种架构与共享内存系统形成对比,在共享内存系统中,多个处理器可以直接访问同一块物理内存。
分布式内存系统的关键特征包括:
-
独立的内存空间:每个节点拥有自己的局部内存,节点之间的内存是物理隔离的。这意味着,任何一个节点上的程序都无法直接访问另一个节点的内存。
-
节点间通信:由于每个节点都有独立的内存空间,节点之间的数据交换必须通过网络或其他通信方式显式进行。这种通信通常涉及数据的发送和接收,是分布式并行计算中的重要组成部分。
-
并行计算:分布式内存系统天然适合于并行计算,因为每个节点可以独立地执行任务,同时处理不同的数据集。这种架构可以有效地扩展计算能力,通过增加节点数量来处理更大规模的问题。
-
可扩展性:分布式内存系统的另一个优点是可扩展性。理论上,通过增加更多的计算节点,可以无限地扩展系统的计算能力。实际中,通信开销和软件设计的复杂性可能会限制系统的扩展性。
-
使用场景:分布式内存系统广泛应用于科学研究、工程计算、数据分析等领域,特别是那些需要大规模计算资源的应用。超级计算机和计算机集群就是典型的分布式内存系统。
MPI和rank
MPI是Message Passing Interface的缩写,直接翻译过来就是消息传输接口的意思,实际上MPI就是一种并行计算中常用的有关消息传递的并行编程模型(标准化 的消息传递接口),通过发送和接受来传递信息,满足进程之间的通信要求。MPI中的进程被组织进通信域中,是一个进程组,进程之间可以进行点对点通信和集体通信,除此之外,MPI还提供了许多的同步机制,允许进程利用它来协调执行。MPI主要用于分布式内存系统中,也就是上述的系统中。
在MPI中每一个并行执行的实例,都用一个rank来标识,一般来说这个实例对应的便是一个进程,而rank便是这个进程的表示符,所以rank也可以表示对应的进程。
就好比小组作业,每个人完成一部分,rank对应的就是每个人的姓名;而每个人对应的便是进程;大家同时工作,对应的就是并行的过程;如果你们平时靠微信来沟通,那么这个用来沟通的微信对应的就是MPI,而使用微信和一个人单独发消息便是点对点通信,如果是在群聊中发消息便是集体通信,而这个小组的群聊便是通信域。
OpenMP
OpenMP是Open Multi-Processing的缩写,首先它是一个API(应用程序接口),直接翻译便是开放的多处理技术。open表示这个api是开放的、标准化的,不限于某个特定从厂商或者平;MP表示多处理技术,表示使用计算机的多个核心或者处理器一起处理程序,提高计算效率和性能。或者说它是一个支持跨平台的共享内存的多处理编程的应用程序接口(API),它注重的是共享内存系统内节点的并行。它更类似于我们使用的共享文档,比如通过共享表格来收集信息,每个人都在这个表格上输入和修改数据,大家一起对这个共享表格进行输入和修改,这样大大加快了效率。
openMP的作用主要是帮助程序并行处理,上面说到在分布式内存系统上每个节点都可以进行自己的处理和运算,MPI便是为了节点间的并行工作而存在的。而openMP关注的是单个系统下的程序的并行,使其在共享内存环境下实现程序各部分有效并行,也就是对于分配到这个节点的并行任务,对该任务进行并行处理,以便进一步的提升性能和计算效率。
TUP(张量计算处理单元)
之前听说国CPU(中央处理器)、GPU(图形处理单元),今天接触到了TPU(Tensor Processing Unit)张量处理单元。它是Google专门为加速机器学习应用而设计的一种专用的集成电路,被专门用来优化和加速神经网络相关的模型训练和推理过程。
与CPU和GPU相比,TPU能够在执行深度学习任务时能够提供更高的性能和能效比。TUP的设计重点时高吞吐量的低精度计算,能高效的处理浮点运算和矩阵乘法运算。