并行计算机系统结构基础

news2024/11/25 5:01:11

一、并行计算机系统结构

1.并行性

并行性:计算机系统在同一时刻或者同一时间间隔内 进行多种运算或操作

并行性包括两方面的含义

  • 同时性:两个或两个以上的事件在同一时刻发生
  • 并发性:两个或两个以上的事件在同一时间间隔 内发生

从处理数据的角度来看,并行性等级从低到高可分为

  • 字串位串:每次只对一个字的一位进行处理(串行处理,不存在并行性)
  • 字串位并:同时对一个字的全部位进行处理,不 同字之间是串行的 (开始出现并行性)
  • 字并位串:同时对许多字的同一位(称为位片) 进行处理( 具有较高的并行性)
  • 全并行:同时对许多字的全部位或部分位进行处理(最高一级的并行)

从执行程序的角度来看,并行性等级从低到高可分为:

  • 指令内部并行:单条指令中各微操作之间的并行
  • 指令级并行(Instruction Level Parallelism,ILP):并行执行两条或两条以上的指令
  • 线程级并行(Thread Level Parallelism,TLP):并行执行两个或两个以上的线程 (通常是以一个进程内派生的多个线程为调度单位)
  • 任务级或过程级并行:并行执行两个或两个以上 的过程或任务(程序段)(以子程序为调度单位 )
  • 作业或程序级并行:并行执行两个或两个以上的 作业或程序

2.并行计算机系统结构

目前流行的高性能并行计算机系统结构通常可以分成以下5类

  • 并行向量处理机(PVP,Parallel Vector Processor)
  • 对称式共享存储器多处理机(SMP,Symmetric Multi-Processing)(这里的共享指的是共享同一个物理存储器)
  • 分布式共享存储器多处理机(DSM,Distributed Shared Memory)(注意:这里的“共享”是指地址空间的共享,并非是只具有一个集中的存储器,不同处理器上的同一个物理地址指向的是同一个存储单元)
  • 大规模并行处理机(MPP,Massive Parallel Processor)
  • 机群计算机(Cluster)

3.机群系统

因其低廉的价格、极强的灵活性和可缩放性 成为近年来发展势头最为强劲的系统结构。所以下面着重介绍一下机群系统

机群系统的硬件

  • 构成机群的每台计算机都被称为一个结点
  • 机群的各个结点一般通过商品化网络连接在一起
  • 网络接口与结点的I/O总线以松散耦合的方式相连

机群系统的软件

机群操作系统:在各结点的操作系统之上建立一层操作系统来管理整个机群

机群操作系统的功能:提供硬件管理、资源共享以及网络通信,还有一个最重要的功能是实现单一系统映象(Single System Image,SSI),它机群的一个重要特征

机群系统中的SSI至少应该提供以下三种服务

机群系统的特点

机群系统的分类

高可用机群

负载均衡机群

负载均衡机群适用于提供静态数据的服务;而高可用性机群既适用于提供静态数据的服务,又适用于提供动态数据的服务

高性能计算机群

按照构建方式将机群分类

机群系统中的异构结点指的是由不同类型或者配置的计算节点组成的机群系统。这些节点可以是不同的处理器架构、存储器大小或者网络性能等方面存在着差异。由于异构节点的存在,机群节点间的通信和任务分配需要通过一定的调度算法和框架来进行管理和协调,以达到系统整体性能的最优化

4.分布式计算的三个核心问题

  • 垂直扩展和水平扩展的选择问题
  • 如何保持高可用性(High Availability)
  • 一致性问题(Consistency)

Web服务器有两种增强服务性能的方式:第一个选择是升级现在这台服务器的硬件,使用更多cpu和更大的内存,这样的选择我们称之为垂直扩展(Scale Up)。第二个选择则是我们再租用一台和之前一样的服务器。这样的选择我们称之为水平扩展(Scale Out)

一旦开始采用水平扩展,我们就会面临在软件层面改造的问题了。也就是我们需要开始进行分布式计算了。我们需要引入负载均衡(Load Balancer)这样的组件,来进行流量分配。我们需要拆分应用服务器和数据库服务器,来进行垂直功能的切分。我们也需要不同的应用之间通过消息队列,来进行异步任务的执行。

所有这些软件层面的改造,其实都是在做分布式计算的一个核心工作,就是通过消息传递(Message Passing)而不是共享内存(Shared Memory)的方式,让多台不同的计算机协作起来共同完成任务

理解高可用性和单点故障

1 核变 2 核的这种垂直扩展的方式,扩展完之后,我们还是只有 1 台服务器。如果这台服务器出现了一点硬件故障,比如,CPU 坏了,那我们的整个系统就坏了,就不可用了

如果采用了水平扩展,即便有一台服务器的 CPU 坏了,我们还有另外一台服务器仍然能够提供服务。负载均衡能够通过健康检测(Health Check)发现坏掉的服务器没有响应了,就可以自动把所有的流量切换到第 2 台服务器上,这个操作就叫作故障转移(Failover),我们的系统仍然是可用的

垂直拓展是不可持续的,归根到底,我们一定要走上水平扩展的路径

系统的可用性(Avaiability)指的就是,我们的系统可以正常服务的时间占比

有些系统可用性的损失,是在我们计划内的。比如上面说的停机升级,这个就是所谓的计划内停机时间(Scheduled Downtime)。有些系统可用性的损失,是在我们计划外的,比如一台服务器的硬盘忽然坏了,这个就是所谓的计划外停机时间(Unscheduled Downtime)

之所以会出现这个问题,是因为在这个场景下,任何一台服务器出错了,整个系统就没法用了。这个问题就叫作单点故障问题(Single Point of Failure,SPOF)。这个假设特别糟糕。我们假设这 1000 台服务器,每一个都存在单点故障问题。所以,我们的服务也就特别脆弱,随便哪台出现点风吹草动,整个服务就挂了

要解决单点故障问题,第一点就是要移除单点。其实移除单点最典型的场景,在我们水平扩展应用服务器的时候就已经看到了,那就是让两台服务器提供相同的功能,然后通过负载均衡把流量分发到两台不同的服务器去。即使一台服务器挂了,还有一台服务器可以正常提供服务

不过光用两台服务器是不够的,单点故障其实在数据中心里面无处不在。我们现在用的是云上的两台虚拟机。如果这两台虚拟机是托管在同一台物理机上的,那这台物理机本身又成为了一个单点。那我们就需要把这两台虚拟机分到两台不同的物理机上

不过这个还是不够。如果这两台物理机在同一个机架(Rack)上,那机架上的交换机(Switch)就成了一个单点。即使放到不同的机架上,还是有可能出现整个数据中心遭遇意外故障的情况

面对这种情况,我们就需要设计进行异地多活的系统设计和部署。所以,在现代的云服务,你在买服务器的时候可以选择服务器的 area(地区)和 zone(区域),而要不要把服务器放在不同的地区或者区域里,也是避免单点故障的一个重要因素

只是能够去除单点,其实我们的可用性问题还没有解决。比如,上面我们用负载均衡把流量均匀地分发到 2 台服务器上,当一台应用服务器挂掉的时候,我们的确还有一台服务器在提供服务。但是负载均衡会把一半的流量发到已经挂掉的服务器上,所以这个时候只能算作一半可用。想要让整个服务完全可用,我们就需要有一套故障转移(Failover)机制。想要进行故障转移,就首先要能发现故障

以我们这里的 PHP-FPM 的 Web 应用为例,负载均衡通常会定时去请求一个 Web 应用提供的健康检测(Health Check)的地址。这个时间间隔可能是 5 秒钟,如果连续 2~3 次发现健康检测失败,负载均衡就会自动将这台服务器的流量切换到其他服务器上。于是,我们就自动地产生了一次故障转移。故障转移的自动化在大型系统里是很重要的,因为服务器越多,出现故障基本就是个必然发生的事情。而自动化的故障转移既能够减少运维的人手需求,也能够缩短从故障发现到问题解决的时间周期,提高可用性

在这种情况下,我们其实只要有任何一台服务器能够正常运转,就能正常提供服务。

在实际情况中,可用性没法做到那么理想的地步。光从硬件的角度,从服务器到交换机,从网线连接到机房电力,从机房的整体散热到外部的光纤线路等等,可能出现问题的地方太多了。这也是为什么,我们需要从整个系统层面,去设计系统的高可用性

服务器硬件的损坏只是可能导致可用性损失的因素之一,机房内的电力、散热、交换机、网络线路,都有可能导致可用性损失。而外部的光缆、自然灾害,也都有可能造成我们整个系统的不可用

二、SIMD技术

  • MMX和SSE的指令集就是单指令多数据流(Single Instruction Multiple Data)技术的实现
  • MMX(Multi Media eXtension,多媒体扩展指令集)指令集是Intel公司于1996年推出的一项多媒体指令增强技术。MMX指令集中包括有57条多媒体指令,通过这些指令可以一次处理多个数据
  • MMX指令并没带来3D游戏性能的显著提升,故推出SSE指令, 并陆续推出SSE2、SSE3、SSSE3和SSE4等采用SIMD技术的指 令集,这些统称为SSE指令集
  • SSE指令集将80位浮点寄存器扩充到128位多媒体扩展通用寄存 器XMM0~XMM7,可同时处理16个字节,或8个字,或4个双 字(32位整数或单精度浮点数),或两个四字的数据 。从SSE2开始,还支持128位整数运算,或同时并行处理两个64位 双精度浮点数
  • 如果是一个多核 CPU 呢,那么它同时处理多个指令的方式可以叫作 MIMD,也就是多指令多数据(Multiple Instruction Multiple Data)

执行向量运算时,SIMD指令能快很多,因为SIMD在获取数据和执行指令的时候,都做到了并行。从内存里面读取数据的时候,SIMD是一次性读取多个数据。在数据读取到了之后,在指令的执行层面,SIMD也是可以并行进行的。4 个整数各自加1,互相之前完全没有依赖,也就没有冒险问题需要处理。只要 CPU 里有足够多的功能单元,能够同时进行这些计算,这个加法就是4路同时并行的

对于那些在计算层面存在大量数据并行(Data Parallelism)的计算中,使用 SIMD 是一个很划算的办法。在这个大量的数据并行,其实通常就是实践当中的向量运算或者矩阵运算。在实际的程序开发过程中,过去通常是在进行图片、视频、音频的处理。最近几年则通常是在进行各种机器学习算法的计算

SIMD技术配合超线程技术:同一个向量的不同维度之间的计算是相互独立的。而超线程 CPU 里的寄存器,又能放得下多条数据。于是,我们可以一次性取出多条数据,交给 CPU 并行计算

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1219878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新品首发 | HP1011:高性能双相交错 PFC 数字控制器

随着PFC技术的发展,不断有新型PFC拓扑结构提出,如单相PFC、交错并联 PFC、传统无桥PFC、图腾柱无桥 PFC等。交错Boost PFC系统不仅具有并联系统的所有优点,还能减少输入电流纹波,降低开关管的电流应力。在中大功率场所通常采用工作…

vue + antd 动态增加表单并进行表单校验

<template><a-modalv-model:visible="visible":title="formData.id ? 编辑渠道 : 添加渠道":width="850":mask-closable="false":destroy-on-close="true"@ok="onSubmit"@cancel="onClose"&g…

【算法萌新闯力扣】:两个数组的交集

力扣热题&#xff1a;两个数组的交集 开篇 今天早上状态不错&#xff0c;花了较短的时间刷了4道力扣算法题。挑选了一道还不错的题目与大伙分享。 题目链接:349.两个数组的交集 题目描述 代码思路 看到题目后&#xff0c;想到可以把一个数组用集合存起来&#xff0c;然后用…

C语言真的需要头文件吗?

C语言真的需要头文件吗&#xff1f; 头文件的作用是什么&#xff1f; 如果你直接定义了函数&#xff0c;当然不需要头文件。 因为调用函数&#xff0c;你得知道函数的参数有多少&#xff0c;都什么类型的&#xff0c;返回值是什么&#xff0c;这样才能调用。最近很多小伙伴找…

超详细的Jmeter接口测试教程以及接口测试流程

一、Jmeter简介 Jmeter是由Apache公司开发的一个纯Java的开源项目&#xff0c;即可以用于做接口测试也可以用于做性能测试。 Jmeter具备高移植性&#xff0c;可以实现跨平台运行。 Jmeter可以实现分布式负载。 Jmeter采用多线程&#xff0c;允许通过多个线程并发取样或通过…

HLS基础issue

hls 是一个用C/c 来开发PL &#xff0c;产生rtl的工具 hls是按照rtl code来运行的 &#xff0c; 但是rtl会在不同器件调用不同的源语&#xff1b; 可能产生的ip使用在vivado另外一个器件的话 会存在问题&#xff1b; Hls &#xff1a; vivado ip &#xff0c; vitis kernel 是…

【IDEA 使用easyAPI、easyYapi、Apifox helper等插件时,导出接口文档缺少代码字段注释的相关内容、校验规则的解决方法】

问题 IDEA 使用easyAPI、easyYapi、Apifox helper等插件时&#xff0c;导出的接口文档上面&#xff0c;缺少我们代码里的注解字段&#xff0c;如我们规定了NOTNULL、字段描述等。 问题链接&#xff0c;几个月之前碰到过&#xff0c;并提问了&#xff0c;到现在解决&#xff0c…

用华为Mate60系列体验玩机功能,乐趣翻倍!

AI隔空操控&#xff0c;隔空滑动屏幕&#xff0c;随心操作更高效&#xff1b; AI信息保护&#xff0c;智能识别人脸&#xff0c;智慧消息隐藏&#xff1b; 智感支付&#xff0c;快人一步&#xff0c;一步即付更迅捷~

助力水泥基建裂痕自动化巡检,基于yolov5融合ASPP开发构建多尺度融合目标检测识别系统

道路场景下的自动化智能巡检、洞体场景下的壁体类建筑缺陷自动检测识别等等已经在现实生活中不断地落地应用了&#xff0c;在我们之前的很多博文中也已经有过很多相关的实践项目经历了&#xff0c;本文的核心目的是想要融合多尺度感受野技术到yolov5模型中以期在较低参数量的情…

人工智能飞速发展的今天,IT行业能做些什么?

原创 | 文 BFT机器人 01 IT行业&#xff1a;信息流通的“媒介” IT行业作为一个信息化产业&#xff0c;通过运用信息手段和技术&#xff0c;为客户收集、整理、储存、传递信息情报&#xff0c;提供信息服务&#xff0c;并提供相应的信息手段、信息技术等服务。 近年来&#xf…

C生万物 | 从浅入深理解指针【最后部分】

C生万物 | 从浅入深理解指针【最后部分】 文章目录 C生万物 | 从浅入深理解指针【最后部分】前言sizeof和strlen的对比sizeofstrlen 数组和指针笔试题解析一维数组字符数组二维数组 前言 我们前面学了四个部分了&#xff0c;如果没有看前面的建议可以看一下前面的~~ C生万物 |…

机械电子设备信息展示预约小程序的效果如何

电子电工机械设备制造业所涵盖的产品非常广泛&#xff0c;各种产品也都是人们生活所需&#xff0c;近些年来&#xff0c;借势市场规模也在迅速增加中。 电子机械设备产品有大件也有小件&#xff0c;但多数产品都是特定人群购买&#xff0c;因其具有长期使用性&#xff0c;因此…

等级保护建设全流程

等保&#xff0c;全称为信息安全等级保护&#xff0c;是对信息和信息载体按照重要性等级分级进行保护的一种工作。 企业的信息系统有收集、储存用户信息的&#xff0c;都需要进行等保建设&#xff0c;以此来整改提升系统的安全防护能力&#xff0c;降低被攻击的风险。若不然一旦…

Android源码分析 - Service启动流程

作者&#xff1a;dreamgyf 这次我们就来讲讲四大组件之一的Service是如何启动和绑定的 流程图 在查阅资料的过程中&#xff0c;我发现有些博主会将梳理好的流程图贴在开头&#xff0c;我觉得这样有助于从宏观上去理解源码的整个流程和设计理念&#xff0c;所以以后的文章我都…

LeetCode---117双周赛---容斥原理

题目列表 2928. 给小朋友们分糖果 I 2929. 给小朋友们分糖果 II 2930. 重新排列后包含指定子字符串的字符串数目 2931. 购买物品的最大开销 一、给小朋友们分糖果I 看一眼数据范围&#xff0c;如果没有啥其他想法思路就直接暴力&#xff0c;时间复杂度O(n^2) 思路&#x…

@Autowired 注入Mapper接口时报红色下划线警告

问题描述 在使用Autowired 注入Mapper接口时报红色下划线警告&#xff0c;虽然对代码没有什么影响可以正常执行&#xff0c;但是作为代码猿的我看着这个报红的就很不舒服&#xff0c;就想着让他不报红 问题描述&#xff1a; Autowired 自动注入&#xff0c;首先要求被自动注入…

精密云工程:智能激活业务速率 ——华为云11.11联合大促倒计时 仅剩3日

现新客3.96元起&#xff0c;下单有机会抽HUAWEI P60 Art&#xff0c;福利仅限双十一&#xff0c;机会唾手可得&#xff0c;立即行动&#xff01; 双十一购物节来临倒计时&#xff0c;华为云备上多款增值产品&#xff0c;以最优品质迸发冬日技术热浪&#xff0c;满足行业技术应用…

ROS 学习应用篇(九)ROS中launch文件的实现

launch文件就好比一个封装好的命令库&#xff0c;我们按照在终端中输入的代码指令&#xff0c;全部按照launch语言格式封装在一个launch文件中&#xff0c;这样以后执行的时候&#xff0c;就可以不用开很多终端&#xff0c;一条一条输入代码指令。 lauch文件的语言风格很想我之…

Redis(列表List)

使用LPUSH从头部添加元素&#xff0c;可以一次添加一个或多个。 使用LRANGE 查看列表中的数据&#xff0c;0表示起始位置&#xff0c;-1表示结束位置。 当然也可以使用RPUSH来从尾部添加元素。 可以使用RPOP从尾部删除元素&#xff0c;会返回删除的元素的值。 同理使用LPOP…

【python基础】用户输入和while循环详解

文章目录 一. 函数input()的工作原理1. 编写清晰的程序2. 使用int()来获取数值输入3. 求模运算符 二. while循环简介1. 使用while循环2. 让用户选择何时退出3. 使用标志4. 使用break退出循环5. 在循环中使用continue 三. 使用while循环处理列表和字典1. 在列表之间移动元素2. 删…