计算机组成原理(超详解!!) 第三节 运算器(浮点加减乘)

1.浮点加法、减法运算

操作过程

1.操作数检查      

如果能够判断有一个操作数为0,则没必要再进行后续一系列操作,以节省运算时间。

2.完成浮点加减运算的操作

(1) 比较阶码大小并完成对阶

使二数阶码相同(即小数点位置对齐),这个过程叫作对阶。  

先求两数阶码 Ex 和 Ey之差,即△E = Ex-Ey  

若△E = 0,表示  Ex=Ey  

若△E > 0, 表示 Ex>Ey  

若△E < 0, 表示 Ex<Ey

通过尾数的移动来改变Ex或Ey,使其相等

对阶原则 : 阶码小的数向阶码大的数对齐, 小阶的尾数右移△E 位

(2) 尾数进行加或减运算

尾数求和方法与定点加减法运算完全一样。  

对阶完毕可得: [x]补=00 11, 00.0011                

                       [y]补=00 11, 11.0110    

对尾数求和:

即得: [x+y]补=00 11, 11.1001

(3) 结果规格化

求和之后得到的数可能不是规格化了的数, 为了增加有效数字的位数, 提高运算精度,必须将求和的结果规格化.  

①规格化的定义:              

          

采用原码:                  正数:    S=0.1 ×××…×              负数: S=1.1 ×××…×

采用双符号位的补码:正数:   S=00.1×××…×              负数:   S=11.0×××…×

原码  :不论正数、负数,第一数位为1

补码  :符号位和第 1 数位不同

特例:

②向左规格化

若不是规格化的数,需要尾数向左移位,以实现规格化的过程,我们称其为向左规格化。

前例中, 00 11, 11.1001不是规格化数,因而需要左规,即左移一位,阶码减1

得:  [x+y]补=00 10, 11.0010

③向右规格化

浮点加减运算时,尾数求和的结果也可能得到:01.×××…× 或  10.×××…×, 即两符号位不等,即结果的绝对值大于1。

此时,将尾数运算的结果右移一位,阶码加1,称为向右规格化。

(4) 舍入处理

在对阶或向右规格化时,  尾数要向右移位,  这样, 被右移的尾数的低位部分会被丢掉,  从而造成一定误差,因此要进行舍入处理。  

简单的舍入方法有两种:  

① “0舍1入”法:如果右移时被丢掉数位的最高位为0则舍去,反之则将尾数的末位加“1”。  

② “恒置1”法:只要数位被移掉,就在尾数的末位恒置“1”。

IEEE754标准,提供的四种舍入处理方法:

就近舍入:即“四舍五入”。

朝0舍入:即朝数轴原点方向舍入

朝+ ∞舍入:正数向最低有效位进1,负数截尾

朝- ∞舍入:正数简单截尾,负数向最低有效位进1

(5)溢出处理

与定点加减法一样,浮点加减运算最后一步也需判溢出。在浮点规格化中已指出,当尾数之和(差)出现01.××…×或10.××…×时,并不表示溢出,只有将此数右规后,再根据阶码来判断浮点运算结果是否溢出。

一般说浮点溢出,均是指上溢。

浮点机的是否溢出可由阶码的符号决定:    

阶码[j]补=01, ×××…× 为上溢,机器停止运算,做中断处理;    

阶码[j]补=10, ×××…× 为下溢,按机器零处理。

与定点数的加减溢出的双符号位判断原则一样          

fs1fs2 =  00         结果为正数,无溢出                      

fs1fs2 =   01         结果正溢                      

fs1fs2 =   10         结果负溢                      

fs1fs2 =   11         结果为负数,无溢出

小结

1.浮点数的溢出是以其阶码溢出表现出来的

在加、减运算过程中要检查是否产生了溢出:若阶码正常,加减运算正常结束;若阶码溢出,则要进行相应的处理。

阶码上溢—— 超过了阶码可能表示的最大值的正指数值,一般将其认为是+∞和-∞。

阶码下溢—— 超过了阶码可能表示的最小值的负指数值,一般将其认为是0。

2.对尾数的溢出也需要处理

尾数上溢:两个同符号尾数相加产生了最高位向上的进位,进行“右规”    

尾数下溢:在尾数右移时,最低有效位从右端流出,要进行舍入处理

3.加减法运算器原理图

4.部件说明

a、b、c为三个浮点数据寄存器,其中a、b中存放待运算的2个浮点操作数,c中存放运算结果操作数;

d、e为2个ALU,d为大ALU,用来进行尾数运算,e为小ALU,用来进行阶码运算;

f、g、h为三个2选一的选择器;

k为尾数右移部件,用于对阶时操作;

l为左移/右移部件,用于对大ALU运算结果的规格化;

i为阶码差寄存器; j为阶码加1/减1器件,用于对阶后操作及舍入操作;

n为舍入部件,用于舍入操作;

p为操作控制器,根据阶码差控制相关部件的操作;

5.工作过程简介

(1) 对阶

a,b中的两个阶码送e(小ALU)进行对阶操作,结果存入i(阶码差寄存器),然后送p(操作控制器),根据阶码差对尾数进行移位操作。

操作控制器输出x、y、z、u、v、w,6个控制信号。信号y控制选择器g将阶码较小数的尾数送k(右移部件)。同时,对较小的阶码进行加1操作(由操作控制信号x控制),对阶后的阶码作为结果操作数的阶码。

(2) 尾数运算

经过对阶后的2个尾数送入d(大ALU)进行加减运算,运算结果送入l(左移/右移部件)进行规格化。

(3) 运算结果规格化    

规格化时对运算结果的尾数进行左移或右移由操作控制器p的控制信号u控制,同时结果的阶码进行加1或减1操作,由j(加1/减1部件)实现,尾数右移,阶码加1,尾数左移,阶码减1。

(4) 舍入处理

规格化后数据送n舍入部件,经过舍入操作的数据结果送入c(结果数据寄存器)。

6.练习

2.浮点运算流水线

1、提高并行性的两个渠道

空间并行性:增加冗余部件,如增加多操作部件处理机和超标量处理机

时间并行性:改善操作流程如:流水线技术

2、流水技术原理  

仿照工厂中流水装配线原理,对计算机中复杂任务进行流水线处理。首先把任务分割为一系列子任务,使各子任务能在流水线的各个阶段并发地执行,这是实现计算机时间并行性的一种方法。    

假设作业T被分成k个子任务,可表达为T={T1,T2,…,Tk}  

各个子任务之间具有一定的优先关系,如i<j,则处理完Ti后,才能处理Tj,这种具有线性优先关系的流水线称为线性流水线。

在流水线中必须是连续的任务,只有不断的提供任务才能充分发挥流水线的效率

把一个任务分解为几个有联系的子任务。每个子任务由一个专门的功能部件实现

在流水线中的每个功能部件之后都要有一个缓冲寄存器,或称为锁存器

流水线中各段的时间应该尽量相等,否则将会引起“堵塞”和“断流”的现象

流水线需要有装入时间和排空时间,只有当流水线完全充满时,才能充分发挥效率

3.流水线浮点运算器

4. 流水线浮点加法器

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

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

相关文章

windows@浏览器主页被篡改劫持@360篡改主页@广告和弹窗设置@极速版

文章目录 360篡改浏览器主页方法1锁定浏览器主页 方法2注册表修改 360广告和弹窗360极速版 小结 360篡改浏览器主页 如果您使用360,且不想卸载它,那么当你启动360后,它可能会篡改你的浏览器(比如edge)的主页start page为360早期可能是通过修改快捷方式的target等属性,但是现在…

《剑指 Offer》专项突破版 - 面试题 93 : 最长斐波那契数列(C++ 实现)

题目链接&#xff1a;最长斐波那契数列 题目&#xff1a; 输入一个没有重复数字的单调递增的数组&#xff0c;数组中至少有 3 个数字&#xff0c;请问数组中最长的斐波那契数列的长度是多少&#xff1f;例如&#xff0c;如果输入的数组是 [1, 2, 3, 4, 5, 6, 7, 8]&#xff0…

C++模版(基础)

目录 C泛型编程思想 C模版 模版介绍 模版使用 函数模版 函数模版基础语法 函数模版原理 函数模版实例化 模版参数匹配规则 类模版 类模版基础语法 C泛型编程思想 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。 模板是泛型编程…

【前端Vue】Vue3+Pinia小兔鲜电商项目第3篇:静态结构搭建和分类实现,1. 整体结构创建【附代码文档】

Vue3ElementPlusPinia开发小兔鲜电商项目完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;认识Vue3&#xff0c;使用create-vue搭建Vue3项目1. Vue3组合式API体验,2. Vue3更多的优势,1. 认识create-vue,2. 使用create-vue创建项目,1. setup选项的写法和执行…

【数据结构与算法】java有向带权图最短路径算法-Dijkstra算法(通俗易懂)

目录 一、什么是Dijkstra算法二、算法基本步骤三、java代码四、拓展&#xff08;无向图的Dijkstra算法&#xff09; 一、什么是Dijkstra算法 Dijkstra算法的核心思想是通过逐步逼近的方式&#xff0c;找出从起点到图中其他所有节点的最短路径。算法的基本步骤如下&#xff1a;…

应用层协议 - HTTP

文章目录 目录 文章目录 前言 1 . 应用层概要 2. WWW 2.1 互联网的蓬勃发展 2.2 WWW基本概念 2.3 URI 3 . HTTP 3.1 工作过程 3.2 HTTP协议格式 3.3 HTTP请求 3.3.1 URL基本格式 3.3.2 认识方法 get方法 post方法 其他方法 3.3.2 认识请求报头 3.3.3 认识请…

MyBatis是纸老虎吗?(七)

在上篇文章中&#xff0c;我们对照手动编写jdbc的开发流程&#xff0c;对MyBatis进行了梳理。通过这次梳理我们发现了一些之前文章中从未见过的新知识&#xff0c;譬如BoundSql等。本节我想继续MyBatis这个主题&#xff0c;并探索一下MyBatis中的缓存机制。在正式开始梳理前&am…

如何解决kafka rebalance导致的暂时性不能消费数据问题

文章目录 背景思考答案排它故障转移共享 背景 之前在review同组其它业务的时候&#xff0c;发现竟然把kafka去掉了&#xff0c;问了下原因&#xff0c;有一个单独的服务&#xff0c;我们可以把它称为agent&#xff0c;就是这个服务是动态扩缩容的&#xff0c;会采集一些指标&a…

使用C++实现一个简单的日志功能

日志对于一些大一些的项目来说&#xff0c;可以在项目运行出现问题时更好的帮助 项目的维护人员快速的定位到问题出现的地方并且知道出现问题的原因&#xff0c; 并且日志也可以帮助程序员很好的进行项目的Debug&#xff0c;那么今天我就来实 现一个C编写的一个简单的日志功能。…

深度学习中常用计算距离的几种算法对比与python实现

前言 距离度量在许多机器学习算法中扮演着至关重要的角色&#xff0c;无论是监督学习还是无监督学习。选择适当的距离度量可以显著影响模型的性能。 在高维数据集中&#xff0c;欧几里得距离可能会受到所谓的“维度诅咒”的影响&#xff0c;因为随着维度的增加&#xff0c;数…

海外媒体软文发稿:谷歌关键词优化细分人群成功案例,突破海外市场!

海外媒体软文发稿&#xff1a;谷歌关键词优化细分人群成功案例&#xff0c;突破海外市场&#xff01; 引言 在全球化的时代&#xff0c;海外市场对于企业的发展至关重要。而在海外市场中&#xff0c;互联网媒体的作用不可忽视。本篇教程将介绍如何通过谷歌关键词优化细分人群…

Spring设计模式-实战篇之单例模式

实现案例&#xff0c;饿汉式 Double-Check机制 synchronized锁 /*** 以饿汉式为例* 使用Double-Check保证线程安全*/ public class Singleton {// 使用volatile保证多线程同一属性的可见性和指令重排序private static volatile Singleton instance;public static Singleton …

Learn OpenGL 30 SSAO

SSAO 我们已经在前面的基础教程中简单介绍到了这部分内容&#xff1a;环境光照(Ambient Lighting)。环境光照是我们加入场景总体光照中的一个固定光照常量&#xff0c;它被用来模拟光的散射(Scattering)。在现实中&#xff0c;光线会以任意方向散射&#xff0c;它的强度是会一…

C++ STL - 优先级队列及其模拟实现

目录 0. 引言 1. priority_queue 介绍 1.1 构造函数 1.2 priority_queue 接口函数使用 1.3 仿函数 1.4 题目练习 2. priority_queue 模拟实现 2.1基本框架&#xff1a; 2.2 默认构造函数 2.3 基本函数 2.4 堆的向上以及向下调整 0. 引言 优先队列 (priority_queu…

【剑指offr--C/C++】JZ22 链表中倒数最后k个结点

一、题目 二、思路及代码 遍历链表并存入vector容器&#xff0c;通过下标取出对应位置元素或者返回空 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/ #include <cstddef> #include <iterator> #…

【微服务】接口幂等性常用解决方案

一、前言 在微服务开发中&#xff0c;接口幂等性问题是一个常见却容易被忽视的问题&#xff0c;同时对于微服务架构设计来讲&#xff0c;好的幂等性设计方案可以让程序更好的应对一些高并发场景下的数据一致性问题。 二、幂等性介绍 2.1 什么是幂等性 通常我们说的幂等性&…

【Entity Framework】 EF三种开发模式

【Entity Framework】 EF三种开发模式 文章目录 【Entity Framework】 EF三种开发模式一、概述二、DataBase First2.1 DataBase First简介2.2 DataBase First应用步骤2.3 DataBase First总结 三、Model First3.1 Model First简介3.2 Model First实现步骤 四、Code First4.1 Cod…

全市场都忽视了!大摩:数据中心算力成本正在迅速下降

随着AI技术迈入普及与应用的新纪元&#xff0c;其算力需求蓬勃增长的同时&#xff0c;算力成本随技术进步呈现下降趋势。 摩根士丹利在3月24日的AI报告中指出&#xff0c;随着GPU技术的不断进步&#xff0c;例如英伟达从Hopper发展到Blackwell GPU架构&#xff0c;GAI的算力成…

ChatGPT 对 ELT的理解

本文主要内容来自 ChatGPT 4.0 到底什么是 ETL&#xff1f;在数据库内部&#xff0c;把数据从 ODS 层加工成 DWD&#xff0c;再加工成 DWS&#xff0c;这个过程和 ETL 的关系是什么&#xff1f;带着这些问题&#xff0c;我问了一下 ChatGPT&#xff0c;总结如下。 数据在两个数…

AWS EC2设置root登录

在使用亚马逊的服务器时&#xff0c;官方默认是使用密钥登录&#xff0c;跟国内的云服务器差别较大&#xff0c;本文记录下&#xff0c;如何开放AWS EC2的root登录。 一、通过网页版或者XShell登录服务器 这里略过 二、设置root账户密码 # 切换 root sudo -i # 设置或修改密…