【计组】CPU并行方案--《深入浅出计算机组成原理》(四)

news2024/11/16 17:29:45

课程链接:深入浅出计算机组成原理_组成原理_计算机基础-极客时间 

一、Superscalar和VLIW

程序的 CPU 执行时间 = 指令数 × CPI × Clock Cycle Time

CPI 的倒数,又叫作 IPC(Instruction Per Clock),也就是一个时钟周期里面能够执行的指令数,代表了 CPU 的吞吐率。

(一)多发射和超标量

指令的执行阶段,是由很多个功能单元(FU)并行(Parallel)进行的。取指令(IF)和指令译码(ID)部分,也一样能通过增加硬件的方式,并行进行。

一次性从内存里面取出多条指令,然后分发给多个并行的指令译码器,进行译码,然后对应交给不同的功能单元去处理。这样,在一个时钟周期里,能够完成的指令就不只一条了。IPC 也就能做到大于 1 了。这种 CPU 设计,叫作多发射(Mulitple Issue)和超标量(Superscalar)

多发射就是同一个时间,可能会同时把多条指令发射(Issue)到不同的译码器或者后续处理的流水线中去。

超标量是说在一个时钟周期里面,只能执行一个标量(Scalar)的运算。多发射的情况下,能够超越这个限制,同时进行多次计算。

 实现多发射和超标量需要CPU 在指令执行之前,去判断指令之间是否有依赖关系。如果有对应的依赖关系,指令就不能分发到执行阶段。因此超标量 CPU 的多发射功能,又被称为动态多发射处理器。这些对于依赖关系的检测,都会使得 CPU 电路变得更加复杂。

(二)VLIW超长指令字设计

超长指令字设计(Very Long Instruction Word,VLIW)是一个非常大胆的CPU设计想法,这个设计,不仅想让编译器来优化指令数,还想直接通过编译器,来优化 CPI。

在乱序执行和超标量的 CPU 架构里,指令的前后依赖关系,是由 CPU 内部的硬件电路来检测的。而到了超长指令字的架构里面,这个工作交给了编译器这个软件。

编译器在高级代码转换到汇编代码再转换到机器码的过程中,其实是能够知道前后数据的依赖关系的。因此,超长指令字设计采取了让编译器把没有依赖关系的代码位置进行交换,再把多条连续的指令打包成一个指令包的方案。

CPU 在运行的时候,不再是取一条指令,而是取出一个指令包。然后,译码解析整个指令包,解析出多条指令直接并行运行。使用超长指令字架构的 CPU,同样是采用流水线架构的。也就是说,一组(Group)指令,仍然要经历多个时钟周期。同样的,下一组指令并不是等上一组指令执行完成之后再执行,而是在上一组指令的指令译码阶段,就开始取指令了。

 流水线停顿这件事情在超长指令字里面,很多时候也是由编译器来做的。除了停下整个处理器流水线,超长指令字的 CPU 不能在某个时钟周期停顿。编译器需要在适当的位置插入 NOP 操作,直接在编译出来的机器码里面,就把流水线停顿这个事情在软件层面就安排妥当。

VLIW 在技术层面非常具有颠覆性,不仅仅只是一个硬件层面的改造,而且利用了软件层面的编译器,来组合解决提升 CPU 指令吞吐率的问题。然而,最终 VLIW 却没有得到市场和业界的认可。

VLIW 架构决定了,如果CPU需要提升并行度,就需要增加一个指令包里包含的指令数量,比方说从 3 个变成 6 个。一旦这么做了,虽然同样 VLIW 架构,同样指令集的CPU,程序也需要重新编译。因为原来编译器判断的依赖关系是在 3 个指令以及由 3 个指令组成的指令包之间,现在要变成 6 个指令和 6 个指令组成的指令包。编译器需要重新编译,交换指令顺序以及 NOP 操作,才能满足条件。甚至,需要重新来写编译器,才能让程序在新的 CPU 上跑起来,很难实现兼容。

二、如何加速矩阵乘法

(一)超线程

无论是多个 CPU 核心运行不同的程序,还是在单个 CPU 核心里面切换运行不同线程的任务,在同一时间点上,一个物理的 CPU 核心只会运行一个线程的指令,所以其实我们并没有真正地做到指令的并行运行。

超线程的 CPU,是把一个物理层面的 CPU 核心,“伪装”成两个逻辑层面的 CPU 核心。这个 CPU,会在硬件层面增加很多电路,使得一个 CPU 核心内部可以维护两个不同线程指令的状态信息。

比如,在一个物理 CPU 核心内部,会有双份的 PC 寄存器、指令寄存器乃至条件码寄存器。这样,这个 CPU 核心就可以维护两条并行的指令的状态。在外面看起来,似乎有两个逻辑层面的 CPU 在同时运行。所以,超线程技术一般也被叫作同时多线程(Simultaneous Multi-Threading,简称 SMT)技术

不过,在 CPU 的其他功能组件上,无论是指令译码器还是 ALU,一个 CPU 核心仍然只有一份。因为超线程并不是真的去同时运行两个指令,那就变成物理多核了。超线程的目的,是在一个线程 A 的指令,在流水线里停顿的时候,让另外一个线程去执行指令。因为这个时候,CPU 的译码器和 ALU 就空出来了,那么另外一个线程 B,就可以拿来干自己需要的事情。这个线程 B 可没有对于线程 A 里面指令的关联和依赖。

超线程只在特定的应用场景下效果比较好。一般是在那些各个线程“等待”时间比较长的应用场景下。比如,需要应对很多请求的数据库应用,就很适合使用超线程。各个指令都要等待访问内存数据,但是并不需要做太多计算。

(二)SIMD--单指令多数据流

使用循环一步一步计算的算法,一般被称为 SISD,也就是单指令单数据(Single Instruction Single Data)处理方式。多核 CPU 同时处理多个指令的方式可以叫作 MIMD,也就是多指令多数据(Multiple Instruction Multiple Data)。

SIMD,中文叫作单指令多数据流(Single Instruction Multiple Data)。是一种“指令级并行”的加速方案,或者我们可以说,它是一种“数据并行”的加速方案。在处理向量计算时,同一向量不同维度之间的计算是相互独立的。而的 CPU 里的寄存器,又能放得下多条数据,因此可以一次性取出多条数据,交给 CPU 并行计算。(SIMD 在获取数据和执行指令的时候,都做到了并行)

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

基于 SIMD 的向量计算指令,正是在 Intel 发布 Pentium 处理器的时候,被引入的指令集。当时的指令集叫作 MMX,也就是 Matrix Math eXtensions 的缩写,中文名字就是矩阵数学扩展。

正是 SIMD 技术的出现,使得Pentium 时代的个人 PC,开始有了多媒体运算的能力。可以说,Intel 的 MMX、SSE 指令集,和微软的 Windows 95 这样的图形界面操作系统,推动了 PC 快速进入家庭的历史进程。

【SIMD在程序中的应用:C# 使用SIMD系列方法加速批量运算 - 知乎】

课程链接:深入浅出计算机组成原理_组成原理_计算机基础-极客时间 

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

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

相关文章

软件测试新手入门必看

随着软件开发行业的日益成熟,软件测试岗位的需求也越来越大。众所周知,IT技术行业一直以来都是高薪岗位的代名词,零基础想要转业的朋友想要进入这个行业,入门软件测试是最佳的途径之一。考虑到大多数软件测试小白对这个行业的一片…

动态规划——树形dp

树形dp 文章目录树形dp概述树形dp 路径问题树的最长路径思路代码树的中心换根DP思路代码数字转换思路代码树形dp 有依赖的背包二叉苹果树思路代码树形dp 状态机没有上司的舞会思路代码战略游戏思路代码皇宫看守思路代码总结概述 树形 DP,即在树上进行的 DP。由于…

springboot常用启动初始化方法

在日常开发时,我们常常需要 在SpringBoot 应用启动时执行某一些逻辑,如下面的场景: 1、获取一些当前环境的配置或变量; 2、连接某些外部系统,读取相关配置和交互; 3、启动初始化多线程(线程池…

Linux 网络编程套接字

目录 一.网络知识 1.网络通信 2.端口号 (1)介绍 (2)端口号和进程ID 3.TCP协议 4.UDP协议 5.网络字节序 二. socket编程接口 1.socket常见API 2.sockaddr结构 (1)sockaddr结构 (2&a…

JavaScript 语句

文章目录JavaScript 语句JavaScript 语句分号 ;JavaScript 代码JavaScript 代码块JavaScript 语句标识符JavaScript 语句 JavaScript 语句向浏览器发出的命令。语句的作用是告诉浏览器该做什么。 JavaScript 语句 JavaScript 语句是发给浏览器的命令。 这些命令的作用是告诉浏…

顶象入选信通院“数字政府建设赋能计划”成员单位

为进一步推动数字政府建设提质增效,由中国信息通信研究院(以下简称“中国信通院”)联合数字政府相关企业、科研机构共同成立“数字政府建设赋能计划”,旨在凝聚各方力量,整合优质资源,开展技术攻关&#xf…

FlinkSQL基本语法和概念

Flink Sql1、简介2、网址3、SQL客户端4、Queries5、Create6、Drop7、Alter8、Insert9、ANALYZE10、Describe11、Explain12、Use13、Show14、Load15、Unload16、Set17、Reset18、Jar19、Windowing TVF19.1、TUMBLE(滚动窗口)19.2、HOP(滑动窗口…

rabbitmq+netcore6 【2】Work Queues:一个生产者两个消费者

文章目录1)准备工作2)新建消费者13)新建消费者24)生产者5)知识点解读1、autoAck: true2、重复声明/前后不一致3、Message durability 消息持久化4、Fair Dispatch 公平调度5、综合以上知识点的代码:官网参考…

Linux的运行级别

Linux的运行级别: Linux系统有7种运行级别(runlevel): 运行级别 0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动运行运行级别 1:单用户工作状态,root权限,用于系统维护,找回丢失…

少儿Python每日一题(9):约瑟夫环

原题解答 本次的题目如下所示(原题出处:蓝桥杯) 【编程实现】 有n个人围成一个圈,按顺序排好号。然后从第一个人开始报数(从1到3 报数),报到3的人退出圈子,然后继续从1到3报数,直到最后留下一个 人游戏结束,问最后留下的是原来第几号。 输入描述:输入一个正整数n 输…

国际手机号码检查纠正 API 接口

国际手机号码检查纠正 API 接口 有效性检查及智能纠正,遵循 E.164 标准,智能统一格式。 1. 产品功能 智能检测国际手机号码有效性;可根据提供的国家编码参数,判断提供的手机号码是否为该国家有效手机号码;智能纠正提…

场景题:假设10W人突访,你的系统如何做到不 雪崩?

文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新 史上最全 面试必备 2000页 面试必备 大厂必备 涨薪必备 免费赠送 经典…

头歌:Ping服务端创建UDP套接字(底部附全关完整答案)

头歌实践教学平台 (educoder.net)在 Ping 的 服务程序中 创建一个使用 UDP 协议的 套接字数据包套接字类型套接字三种类型:流式套接字(SOCK_STREAM),数据包套接字(SOCK_DGRAM)及原始套接字(SOCK_RAW)数据包格式套接字(Datagram So…

JavaSE---多用户网络通信系统

目录 项目开发流程 多用户网络通信系统的架构设计 客户端 界面层 服务层 管理层 服务端 服务层 功能层 管理层 总结 项目开发流程 多用户网络通信系统的架构设计 整体 作为一个可供多个用户使用的通信系统,那么每个用户和其他用户之间的连接必定不是直接…

电脑宽带连接提示错误代码769怎么办?

有用户反映,在使用宽带连接网络时,出现错误代码769,无法连接到指定目标怎么办?这里整理了错误代码769的可能原因和修复方法,带大家顺利连接网络。错误代码769的原因:连接线松动或损坏网卡被禁用网卡驱动过时…

【信息论与编码 沈连丰】第四章:离散信源的信源编码

【信息论与编码 沈连丰】第四章:离散信源的信源编码第四章 离散信源的信源编码4.1 信源编码的模型4.2 信息传输速率和编码效率4.3 单义可译定理4.4 无失真信源编码定理4.5 几种典型的信源编码方法4.6 汉字编码方法及其讨论4.7 图像的信源编码4.8 误码对信源译码的影…

openFeign远程调用返回页面404 ,对应配置文件不生效,排除数据源等问题

在使用上架商品功能时,在debug时候,发现在将数据发送给ES保存时,无法远程调用es的服务,报错404找不到接口,如下图: 一开始以为是openFeign的问题,经过检查,各种接口、注解都没问题&…

2022尚硅谷SSM框架跟学(一)MyBatis基础一

2022尚硅谷SSM框架跟学 一MyBatisSSM框架整合课程优势课程体系框架图MyBatis1、MyBatis简介1.1MyBatis历史1.2MyBatis特性1.3MyBatis下载1.4和其它持久化层技术对比JDBCHibernate 和 JPAMyBatis2.搭建MyBatis2.1开发环境2.2创建maven工程(1)打包方式:jar(2)引入依赖…

【UE4 第一人称射击游戏】20-添加瞄准十字线

上一篇:【UE4 第一人称射击游戏】19-修复冲刺或换弹时可以进行射击的bug本篇效果:步骤:先下载一个瞄准的十字线图片,可以从阿里巴巴矢量图库下载:https://www.iconfont.cn/search/index?searchTypeicon&q%E7%9E%8…

反射Reflection

目录1. 反射快速入门1. 需求2. 运用反射2. 反射原理图2.1 反射相关的主要类2.1 反射优点和缺点2.1.1 反射调用优化-关闭访问检查4. Class类分析4.1 Class类常用方法4.2 获取Class类对象【六种】4.3 哪些类型有class对象4.4 动态和静态加载4.5 类加载流程图5. 获取类结构信息5.1…