计算机体系结构标量处理机

news2025/1/11 14:05:17

先行控制技术

缓冲深度的设计方法

以先行指令缓冲栈为例。

假设缓冲深度为 D 1 D_1 D1,考虑以下两种极端情况。

(1)先行指令缓冲栈已经充满,此时指令流出速度最快,例如连续分析RR型指令 ,设这种指令序列的最大长度为 L 1 L_1 L1,平均分析一条指令的时间为 t 1 t_1 t1;同时,指令流入的速度最慢,平均取一条指令的时间为 t 2 t_2 t2,从主存取到先行指令缓冲栈中的指令数为 L 1 − D I L_1-D_I L1DI。应该满足以下关系:

L 1 t 1 = ( L 1 − D I ) t 2 L_1t_1=(L_1-D_I)t_2 L1t1=(L1DI)t2

D I = ⌈ L 1 × ( t 2 − t 1 ) t 2 ⌉ D_I=\lceil\frac{L_1\times(t_2-t_1)}{t_2}\rceil DI=t2L1×(t2t1)

可以预见时间 L 1 t 1 L_1t_1 L1t1之后,缓冲栈变空,失去作用。因此必须保证这种指令流的连续长度不超过 L 1 L_1 L1。通过对程序进行静态分析以确定 L 1 L_1 L1的值来计算出缓冲深度 D I D_I DI

(2)先行指令缓冲栈原来为空,此时指令流出速度最慢,指令流入的速度最快。

控制相关

通过转移预测技术降低控制相关带来的损失。

(1)通过编译器尽量降低转移成功的概率。

(2)设置两个先行指令缓冲栈,按照转移成功的方向预取指令到先行目标缓冲栈,先行指令缓冲栈仍然按照转移不成功的方向继续预取指令。如果转移不成功,则继续分析原来先行指令缓冲栈中的指令;如果转移成功,则分析新增设的先行目标缓冲栈中的指令。Don’t put all your eggs in one basket.

流水线技术

线性流水线的性能分析

  1. 吞吐率

    n n n为任务数, T k T_k Tk为完成 n n n个任务所用的时间,则流水线的吞吐率为 T P = n T k TP=\frac{n}{T_k} TP=Tkn

    假设各段执行时间相等,输入连续任务的情况下,完成 n n n个任务需要的总时间为 T k = ( k + n − 1 ) × Δ t T_k=(k+n-1)\times\Delta t Tk=(k+n1)×Δt,其中 k k k为流水线的段数, Δ t \Delta t Δt为时钟周期。最大的吞吐率为 T P m a x = l i m n → ∞ n ( k + n − 1 ) Δ t = 1 Δ t TP_{max}=lim_{n\rightarrow\infty}\frac{n}{(k+n-1)\Delta t}=\frac{1}{\Delta t} TPmax=limn(k+n1)Δtn=Δt1

    若各段时间不等,完成连续 n n n个任务(可以想象到其他流水段会出现一些“气泡”等待最长的流水段执行):

    T P = n ∑ i = 1 k Δ t i + ( n − 1 ) m a x ( Δ t 1 , . . . , Δ t k ) TP=\frac{n}{\sum_{i=1}^{k}\Delta t_i+(n-1)max(\Delta t_1,...,\Delta t_k)} TP=i=1kΔti+(n1)max(Δt1,...,Δtk)n

    T P m a x = 1 m a x ( Δ t 1 , . . . , Δ t k ) TP_{max}=\frac{1}{max(\Delta t_1,...,\Delta t_k)} TPmax=max(Δt1,...,Δtk)1

  2. 加速比(Speedup)

    加速比的基本公式: S = 顺序执行时间 T 0 流水线执行时间 T k S=\frac{顺序执行时间T_0}{流水线执行时间T_k} S=流水线执行时间Tk顺序执行时间T0

  3. 效率(Efficiency)

    计算流水线效率的一般公式: E = n 个任务占用的时空区 k 个流水段的总的时空区 = T 0 k × T k E=\frac{n个任务占用的时空区}{k个流水段的总的时空区}=\frac{T_0}{k\times T_k} E=k个流水段的总的时空区n个任务占用的时空区=k×TkT0

  4. 流水线最佳段数的选择

    采用顺序执行方式完成一个任务的时间为 t t t,在同等速度的 k k k段流水线上执行一个任务的时间为 t k + d \frac{t}{k}+d kt+d d d d为流水锁存器的延迟时间,因此,流水线的最大吞吐率为 P = 1 t k + d P=\frac{1}{\frac{t}{k}+d} P=kt+d1,流水线的总价格估计为 C = a + b k C=a+bk C=a+bk,其中 a a a为功能段身的总价格, b b b为每个锁存器的价格。

    我们可以定义一个“性价比”,性能和价格比PCR定义为

    P C R = P C = 1 t k + d × 1 a + b k PCR=\frac{P}{C}=\frac{1}{\frac{t}{k}+d}\times\frac{1}{a+bk} PCR=CP=kt+d1×a+bk1

    令导数为0得到 ( k t + k d × 1 a + b k ) ′ = 0 (\frac{k}{t+kd}\times\frac{1}{a+bk})'=0 (t+kdk×a+bk1)=0

    解得 k 0 = t × a d × b k_0=\sqrt{\frac{t\times a}{d\times b}} k0=d×bt×a

在这里插入图片描述

非线性流水线的冲突问题

在非线性流水线中,会出现几个任务用同一流水段的情况。

无冲突调度方法

首先定义一些概念:

启动距离:连续输入两个任务之间的距离。

禁止向量:预约表中每一行任意两个X之间距离的集合。下例中为(3,4,6),可以预见用禁止向量中的数作为下一个任务的启动距离会导致流水线的冲突。

在这里插入图片描述

冲突向量: C = ( C m C m − 1 . . . C 2 C 1 ) C=(C_mC_{m-1}...C_2C_1) C=(CmCm1...C2C1),其中 m m m是禁止向量中的最大值,如果 i i i在禁止向量中则 C i = 1 C_i=1 Ci=1,否则 C i = 0 C_i=0 Ci=0。因此,(3,4,6)对应冲突向量(101100)。

  1. 将冲突向量逻辑右移(模拟时间流动),若移出去的是1,则表示用相应启动距离向流水线输入新任务时会导致功能段冲突。

  2. 若移出去的是0,则表示不会产生功能段冲突。添加该任务,用移位之后的向量(前一个任务在流水线中的剩余部分)和初始的冲突向量按位或得到新的冲突向量。

  3. 对新的冲突向量做同样的操作。实际上每个冲突向量是一个状态。根据步骤2中的变换关系(移多少位添加新任务)可以构建出状态图,实际上就是有限状态自动机(DFA)。

在这里插入图片描述

对于上面的例子,一个任务执行7个时间片,因此启动距离为7时流水线已经排空,上一个任务已经结束。因此,所有状态均有一条7*的弧连向初始冲突向量。

定义简单循环为在状态图中各种冲突向量只经过一次的启动循环。下图为最小启动循环的(1,1,7)的预约表。

在这里插入图片描述

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

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

相关文章

[元带你学: eMMC协议详解 12] Speed Mode 选择

依JEDEC eMMC 5.1及经验辛苦整理,付费内容,禁止转载。 所在专栏 《元带你学: eMMC协议详解》 内容摘要 全文 2000字, 介绍了各种Speed Mode 选择的方法, 需要按照一定的步骤, 重点需要掌握HS400, High Speed 和 HS20…

python中的流程控制语句

文章目录 if-else语句代码演示: if-elif-else语句代码演示1:代码演示2: while 循环语句循环语句练习1.求100以内所有的奇数之和2.求100以内所有7的倍数之和,以及个数3.求1000内的水仙花数4.获取用户输入的任意数,判断是…

《Reinforcement Learning: An Introduction》第2章笔记

2. Multi-armed Bandits 评估性反馈(evaluative feedback) 完全取决于采取的动作,这是强化学习采用的方式。纯粹的评估性反馈表明要执行的动作有多好,但是不关注它是否是可能的最好或最坏的动作。指导性反馈(instruct…

迭代器Iterator和生成器funcion *

迭代器Iterator 迭代器 为各种不同的数据结果提供统一的访问机制,任何数据结构只要部署Iterator接口,就可以完成便利操作,主要提供for of 工作原理: 创建一个指针对象,指向当前数组的起始位置 第一次调用对象的next方…

JAVA之数组2

添加元素 从后往前进行迭代,最后在末尾插入元素 tip:为避免数字在覆盖过程中丢失,故从后往前覆盖 删除元素 从前往后迭代,最后将末尾赋值为0 tip: 以覆盖的数arr【i】为基准,构造循环 共同处Tip: 范围均为【index1&…

子串--子字符串 0528

210102 201012 A1A2…An An…A2A1 如何做, 翻转的是21,因为2>1; 翻转的是210,因为2>0; 翻转的是2101,因为2>1; 翻转的是21010,因为2>0; 翻转的是210102,因为22且1&…

JavaScript 进阶 (二)

目录 深入对象 创建对象三种方式 构造函数 实例成员&静态成员 内置构造函数 Object Array String Number 深入对象 创建对象三种方式 1. 利用对象字面量创建对象 const obj { name : abc} 2. 利用 new Object 创建对象 const obj new Object({ uname: 123 }…

如何评估一个好的物业系统开发方案?

在当前不断变化的物业管理市场中,物业系统已成为物业管理公司提高管理效率和降低成本的必然选择。因此,如何评估一个好的物业系统开发方案成为了每个物业管理决策者必须面对的重要问题。在本文中,我们将介绍如何从以下几个方面来评估一个好的…

文心一言 VS 讯飞星火 VS chatgpt (24)-- 算法导论4.2 6题

六、用Strassen 算法作为子进程来进行一个 knn 矩阵和一个nkn 矩阵相乘,最快需要花费多长时间?对两个输入矩阵规模互换的情况,回答相同的问题。 文心一言: Strassen 算法是一种用于矩阵乘法的分治算法,它将原始的矩阵分解为较小…

腾讯云产品首单特惠是什么意思?包括新用户老用户的解答

腾讯云最近推出的活动限制条件为产品首单特惠,但是有的用户购买不了,右上角提示“产品首单特惠”,那么什么是产品首单特惠?什么是新用户?什么是老用户?新手站长给大家: 腾讯云产品首单特惠是什…

【Linux】Pinctrl子系统简介

前言: 我们工作开发中非常常用的就是GPIO,在Linux开发中,是有必要去熟悉并理解的。在Linux内核中也有提供相应的子系统pinctrl子系统,本文从大的面上去了解它。 参考学习:Linux笔记老师课程(Pinctrl子系统&…

CentOS 7.6 (Linux)环境上离线安装 MySQL 8

1 下载安装包 访问https://dev.mysql.com将网页划到最下面,点击下载MySQL社区安装包 按照如下图片框选的进行下载 2 解压上传 下载完了之后使用WinRAR软件在Windows电脑上解压,选择如下包使用ftp工具上传至Linux机器最大目录下。 3 安装前检查 …

DCGAN-MNIST——使用TensorFlow 2 / Keras实现深度卷积DCGAN来生成时尚MNIST的灰度图像

DCGAN-MNIST——使用TensorFlow 2 / Keras实现深度卷积DCGAN来生成时尚MNIST的灰度图像 1. 效果图2. 原理2.1 结构指南2.2 模型结构及训练过程 3. 源码参考 这篇博客将介绍如何使用TensorFlow 2 / Keras中实现深度卷积GAN(DCGAN)来生成类似时尚MNIST的灰…

魔法反射--java反射进阶(实战篇)

👳我亲爱的各位大佬们好😘😘😘 ♨️本篇文章记录的为 魔法反射–java反射进阶(实战篇) 相关内容,适合在学Java的小白,帮助新手快速上手,也适合复习中,面试中的大佬🙉🙉🙉…

openpose原理及安装教程(姿态识别)

OpenPose是一个基于深度学习的人体姿态估计框架,可以实时地估计人体的关键点,包括身体和手部姿势。它是由卡内基梅隆大学的研究团队开发的,已经成为了人体姿态估计领域的一个重要项目。 OpenPose的原理是基于卷积神经网络(CNN),通过对图像进行深度学习处理,可以检测出…

如何在华为OD机试中获得满分?Java实现【寻找峰值】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

Aerial Vision-and-Dialog Navigation阅读报告

Aerial Vision-and-Dialog Navigation 本次报告,包含以下部分:1摘要,2数据集/模拟器,3AVDN任务,4模型,5实验结果。重点介绍第2/3部分相关主页:Aerial Vision-and-Dialog Navigation (google.com…

【章节2】husky + 自动检测是否有未解决的冲突 + 预检查debugger + 自动检查是否符合commit规范

在章节1中我们学习到了commit的规范、husky的安装和使用、lint-staged怎么安装以及怎么用来格式化代码。那么这篇文章我们来看看commit预处理中我们还能做哪些处理呢? 自然,我们还是要用到husky这个东西的,大致过程其实和章节1异曲同工&#…

不要再来问我小学、初中毕业想出去学习编程找到工作的问题了,你要做就去做,结果自己扛着就行了!

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&#x1…

探索Java面向对象编程的奇妙世界(五)

⭐ Object 类⭐ toString 方法⭐ 和 equals 方法⭐ super 关键字⭐ 继承树追溯⭐ 封装(encapsulation) ⭐ Object 类 Object 类基本特性 🐟 Object 类是所有类的父类,所有的 Java 对象都拥有 Object 类的属性和方法。 🐟 如果在类的声明中未…