计算机组成结构—多处理器

目录

一、SISD、SIMD、MIMD 和向量处理器

1. 费林分类法

2. SIMD 和向量处理器

二、硬件多线程

三、多核处理器和 SMP

1. 多核处理器

2. 共享内存多处理器(SMP)

3. MPP 和集群


一、SISD、SIMD、MIMD 和向量处理器

        通过改进系统结构,可以有效地提升计算机的性能,一个方向就是 并行处理。指令流水线就是一种典型的并行处理技术,它提供的是 指令 的并行;而另一种思路则是考虑让 数据 的处理并行起来。

1. 费林分类法

        美国计算机科学家迈克尔 · 费林(Michael Flynn)根据指令和数据是否并行,将计算机体系结构分为四类:

  • SISD(Single Instruction stream, Single Data stream)单指令流单数据流。普通的串行执行结构,CPU 同时只能执行一条指令,处理一条数据;

  • SIMD(Single Instruction stream, Multiple Data streams)单指令流多数据流。单条指令可以同时对应处理多个数据,从而实现了数据的并行处理;

  • MISD(Multiple Instruction streams, Single Data stream)多指令流单数据流。多条指令同时执行,但只处理一条数据,这种架构非常罕见,只是作为一种理论模型;

  • MIMD(Multiple Instruction streams, Multiple Data streams)多指令流多数据流。同时执行多条不同的指令,它们分别处理不同的数据;这种方式实现了线程、指令和数据的全方位并行处理。

2. SIMD 和向量处理器

        SIMD 的特点是,设置了多个并行的执行单元,而所有的执行单元都是同步的,执行的指令从同一个 PC 中取出,由同一个控制单元来进行调度管理。SIMD 对应的程序设计风格可以跟 SISD 非常相近,但要求程序中必须存在大量同构的数据,以便实现 数据级并行

        向量处理器是 SIMD 架构的一种具体实现,可以并行执行一组数据(向量)的计算任务。

        向量处理器的基本原理是,从主存中收集数据,将它们按照顺序放到一组 向量寄存器 中,使用流水线式的执行单元在寄存器中依次进行操作,然后将结果写回主存。

二、硬件多线程

        相比 SIMD,MIMD 提高了更高的并行程度。MIMD 需要同时执行不同的指令流,这就要依赖多个 进程(process) 或者 线程(thread) 同时执行,让处理器时刻保持忙碌状态。

        对于一个处理器,可以允许多个线程以重叠的方式,共享处理器的功能部件;当一个线程停顿时,就切换到另一个线程,从而更加充分地利用了硬件资源。这种技术就称为 硬件多线程(hardware multithreading)。

        在支持硬件多线程的 CPU 中,需要为每个线程提供单独的寄存器堆和 PC 等资源,这样就可以在共享资源的同时保持线程的独立状态。

        硬件多线程主要有两种实现方法。

  • 细粒度多线程

        每条指令执行后就进行线程切换,从而实现多线程在时间上的交叉执行。这种交叉执行是轮转进行的,并且会跳过停顿的任何线程。

  • 粗粒度多线程

        仅在发生高开销的停顿时(例如末级 cache 失效),才进行线程切换。对于流水线中的停顿,需要清空或者冻结流水线,因此流水线的重启开销比较大。

        除此之外,硬件多线程还可以结合流水线多发技术,进一步降低成本、提高并行效率,这就是 同时多线程(Simultaneous Multithreading,SMT)。同时多线程是硬件多线程的一种变体,它结合使用多发射、动态调度流水线的处理器资源,来实现 线程级指令级 并行。

        英特尔(Intel)公司的 “ 超线程 “(Hyper-Threading)技术,就是一种在单个 CPU 上实现硬件多线程的方式。

三、多核处理器和 SMP

1. 多核处理器

        另一种实现线程级并行的方式,就是在一个处理器芯片上,集成多个处理单元。为了区分不同的概念,每个处理单元就称为一个 ” “(core),有多个核的处理器就被称为 多核处理器

        要想充分利用多核处理器的性能,应该采用多线程的方式执行程序。这样,多个线程可以在不同的核上并行执行,大大提升运行效率。

        多核处理器一般也采用硬件多线程技术,为了进行区分,有时会将单个核心上同时运行多个线程称为有多个 ”逻辑内核“,而对应的真正的核心则称为 ”物理内核“。

        在多核处理器中,一般所有内核会有自己独立的寄存器和 L1、L2 缓存,而共享更低级的 cache(L3)和主存。  

        如果不对处理单元进行集成,也可以用同样的架构将多个处理器联合在一起,这就是所谓的 多处理器。广义上讲,多核处理器也是一种多处理器。

2. 共享内存多处理器(SMP)

        编写运行在多处理器上的并行程序会更加复杂。在架构上,一个很重要的影响因素是,是否为所有处理器提供一个共享的统一物理地址空间;换句话说,所有处理器(核心)是否可以访问同一个主存储器。于是多处理器又可以划分为两种架构。

        共享内存多处理器(Shared Memory Processor,SMP)为所有处理器提供统一的物理地址空间。处理器通过存储器中的 共享变量 进行通信,所有处理器都能通过加载(Load)和存储(Store)指令访问任意的主存位置。

        尽管物理地址空间是统一的、共享的,但如果存储器本身也采取了并行架构(例如多模块存储器),不同的处理器对存储器不同部分的访问可能就会有区分。因此 SMP 又可以有两种类型。

  • 统一内存访问(Unified Memory Access,UMA)多处理器

        不管是来自哪个处理器的访存指令,延迟都是一致的。这样,每个处理器对所有存储单元的访问时间都大致相同,是对称的系统架构。

  • 非统一内存访问(Non-Unified Memory Access,NUMA)多处理器

        访存指令的延迟不一致,取决于哪个处理器去访问哪个存储单元。一般架构中,每个处理器(CPU)会单独直接连接一部分主存,称为 本地内存;其它主存部分则通过总线进行访问,称为 远程内存

3. MPP 和集群

        如果不采用共享内存的方式,而是让每个处理器都拥有私有的地址空间,这样就可以让各个处理器更加独立、获得更好的并行性和可扩展性。这种架构被称为 大规模并行处理(Massive Parallel Processing,MPP)。

        采用 MPP 架构的多处理器,必须通过显式的 消息传递 进行通信,因此传统上也把这种类型的计算机称为 显式消息传递计算机

        更进一步,我们可以通过标准网络交换机上的 I/O 接口进行连接,用一组计算机的集合来构建出消息传递多处理器,这种形式就被称为 集群Cluster)。集群是一种分布式系统,已经成为如今并行处理计算机最典型的架构,也是大数据领域的技术基础。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java:reactor的Mono和Reactor的简单例子

【pom.xml】 <dependency><groupId>io.projectreactor</groupId><artifactId>reactor-core</artifactId><version>3.3.17.RELEASE</version> </dependency>【MyReactorTest2.java】 package com.chz.myReactor;import react…

十年数据分析经验分享

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

WPF入门--多种方式设置样式(Style)

前言 在上篇文章中&#xff0c;介绍了WPF九种布局方式。本篇文章通过多种方式设置样式&#xff08;Style&#xff09;以控制UI元素的外观和行为。下面来具体介绍一下。 传送门 WPF入门--常用布局方式 目录 前言 一、直接在XAML中设置属性&#xff08;内联样式&#xff09…

【蓝桥杯2025备赛】分巧克力

【蓝桥杯2025备赛】分巧克力 [蓝桥杯 2017 省 AB] 分巧克力 题目描述 儿童节那天有 K K K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 N N N 块巧克力&#xff0c;其中第 i i i 块是 H i W i H_i \times W_i Hi​Wi​ 的方格组成的长方形…

C++ | Leetcode C++题解之第135题分发糖果

题目&#xff1a; 题解&#xff1a; class Solution { public:int candy(vector<int>& ratings) {int n ratings.size();int ret 1;int inc 1, dec 0, pre 1;for (int i 1; i < n; i) {if (ratings[i] > ratings[i - 1]) {dec 0;pre ratings[i] rati…

c++ 里函数选择的优先级:普通函数、模板函数、万能引用,编译器选择哪个执行呢?

看大师写的代码时&#xff0c;除了在类里定义了 copy 构造函数&#xff0c;移动构造函数&#xff0c;还定义了对形参采取万能引用的构造函数&#xff0c;因此有个疑问&#xff0c;这时候的构造函数优先级是什么样的呢&#xff1f;简化逻辑测试一下&#xff0c;如下图&#xff0…

计算机网络 —— 数据链路层(以太网)

计算机网络 —— 数据链路层&#xff08;以太网&#xff09; 什么是以太网以太网传输介质和拓扑结构的发展传输介质的发展&#xff1a;拓扑结构的发展&#xff1a; 10BASE-T 以太网适配器和MAC地址适配器&#xff08;Adapter&#xff09;MAC地址适配器与MAC地址的关系 MAC帧以太…

GLM-4-9B领先!伯克利函数调用榜单BFCL的Function Calling评测方法解析与梳理

智谱公布的GLM-4-9B基于BFCL榜单的工具调用能力测试结果 ©作者|格林 来源|神州问学 在智谱最新开源的GLM-4-9B-Chat中&#xff0c;其工具调用能力在BFCL&#xff08;伯克利函数调用排行榜&#xff09;榜上获得了超高的总BFCL分&#xff0c;和gpt-4-turbo-2024-04-09几乎不…

举个栗子!Quick BI 技巧(8):柱形图的制作及应用

众所周知&#xff0c;在数据分析中&#xff0c;柱形图是利用率非常高的一种图&#xff0c;主要是用于比较各组数据之间的差别&#xff0c;并且可以显示一段时间内的数据变化情况。那么在 Quick BI 中要如何来制作柱形图呢&#xff1f; 今天的栗子&#xff0c;我们就来分享如何…

网关鉴权模块-鉴权+登录拦截+jwt

1. 鉴权流程 浏览器发送请求时。请求头会携带键值对"authorization"&#xff1a;jwt 网关先解析jwt令牌&#xff0c;做第一次鉴权&#xff0c;鉴权完成后将解析的user对象的id添加到请求头中&#xff1a;user-info 用户id&#xff1b; 微服务的拦截器会获取请求头中…

spring boot2.7.x遇到问题

validation报错 高版本已移除了validation以来&#xff0c;需手动添加 <dependency><groupId>jakarta.validation</groupId><artifactId>jakarta.validation-api</artifactId> </dependency>mybatis报错 升级版本 <dependency>&…

基础篇01——SQL的基本语法和分类

MySQL数据库安装与基本使用 安装教程参见&#xff1a;通过zip安装MySQL 通过命令行启动和停止MySQL服务命令 前提&#xff1a;安装MySQL成功之后 启动服务&#xff1a;net start mysql 停止服务&#xff1a;net stop mysql 通过命令行连接mysql 可以通过mysql的客户端命令行…

记录某书请求返回406及响应{“code“:-1,“success“:false}

今天测试某个平台的爬虫时使用requests post请求正常写了个测试脚本把各种参数带上出来以后出现了406情况&#xff0c;和网站数据是完全一样的 以为是 X-S、X-T参接不对&#xff0c;但在postman里测试又是可以的成功&#xff0c;以为是检验了参数顺序&#xff0c;测试发现也没…

SQLAlchemy 模型中数据的错误表示

1. 问题背景 在使用 SQLAlchemy 0.6.0 版本&#xff08;也曾尝试使用 0.6.4 版本&#xff09;的 Pylons 应用程序中遇到了一个 SQLAlchemy ORM 问题。该问题出现在使用 psycopg2 作为数据库驱动程序、连接至 Postgresql 8.2 数据库的环境中。定义了一个 User 模型对象&#xf…

封装了一个仿照抖音评论轮播效果的iOS轮播视图

效果图 原理 就是我们在一个视图里面有两个子视图&#xff0c;一个是currentView, 一个是willShowView,在一次动画过程中&#xff0c;我们改变current View的frame&#xff0c;同时改变willShowView的frame&#xff0c;同时&#xff0c;需要改变currentVIew 的transform.y不然…

Linux操作系统:Redis在虚拟环境下的安装与部署

Redis下载方法 最近部署项目的时候用到了Redis&#xff0c;自己在安装的时候也碰到了一些列问题最终安装成功&#xff0c;记录一下自己的安装历程。前期准备&#xff1a; 服务器Linux版本&#xff1a;Centos8.4 64位&#xff08;http://isoredirect.centos.org/centos/8/isos/…

快速了解JVM机制

1.JVM 简介 JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的、运⾏在⼀个完全隔离的环境中的完整计算机系统。 常⻅的虚拟机&#xff1a;JVM、VMwave、Virtual Box。 JVM 和其他两个虚拟机的区别&#xff1a; V…

Ubuntu有线连接消失,无法联网怎么办!

今天重启 Ubuntu 虚拟机&#xff0c;突然之间发现没有网络&#xff0c;打开设置中的网络看&#xff0c;有线网络竟然消失了 经过一番查阅资料&#xff0c;发现解决问题很简单&#xff1a; 先看原因&#xff0c;输入命令 sudo lshw -c Network 检查所有的网络情况&#xff0c…

每天坚持写java锻炼能力---第一天(6.4)

今天的目标是菜单&#xff1a; B站/马士兵的项目菜单 package java1;import java.util.Scanner;public class Test {public static void main(String[] args) {while(true){ //3.加入死循环&#xff0c;让输入一直有System.out.println();System.out.println("--->项…

Python logging 模块详解

Python 的 logging 模块提供了一个强大而灵活的日志系统。它是 Python 标准库的一部分&#xff0c;因此可以在任何 Python 程序中使用。logging 模块提供了许多有用的功能&#xff0c;包括日志消息的级别设置、日志消息的格式设置、将日志消息输出到不同的目标&#xff0c;以及…