Rzfly.Erubsh

Rzfly.Erubsh

19 posts published

📍 上海
http://www.rzfly.icu

香山访存和缓存一致性优化听课笔记

1、基本概念与区别 缓存一致性=cache cocherence 访存一致性=memory consistency 访存一致性是程序行为和硬件行为的比较结果,一般考虑多核场景下的访存一致性。即程序序列和内存序列(全局序)的执行结果是否一致。 最严格的访存一致性要求是SO,sequential order。本地load的结果是全局同地址的最近store结果。其他全局序要求也严格。 次严格的访存一致性要求是TSO。本地load的结果要么是全局同地址的最近store结果,要么是本地程序的同地址最近store结果。 TSO意味着程序员需要在软件上做出内存一致性保护措施,比如在多进程编程时检查自旋锁,否则就无法保护load的结果正确。 而TSO的硬件收益则很大,允许硬件把store请求以queue存储,无论是阻塞式的或是非阻塞式的queue(区别在于entry项数),总是能尽可能地消除访存引起的流水线阻塞,让后续的指令能够继续执行。 代价是,数据相关指令的发射和提交仍然要检查sq的相关性并阻塞,控制相关指令的提交可能会回滚sq。sq和后续访存流水本身具有深度,在执行store的时候也可以作一些适配cache延迟/总线延迟的优化。 sq不一定需要以fifo来实现。 riscv提出的内存一致性模型RVWMO更加宽松,只需要全局序存在且满足公理支撑的形式化定义即可。RVWMO允许更多的乱序,不仅仅局限于S-L关系的乱序。 这种做法使得sq可以合并写请求(降低写功耗和写延迟),这种优化也必然是建立在non-fifo的queue上的。load在bypass先前结果时,本来无法检查store结果的时效(因fifo结构),但是现在可以做到bypass多个结果其中之一。 同时,RVWMO对fence指令的实现和编程提出了更高要求。

关于如何重置ghost密码

Ghost管理员重置密码自己挖的坑自己埋,伤心啊。完美的胖达完美的胖达真是服了自己,每次都能忘记。 当然也亏是后台的密码安全等级太高,实在是记不住。特此保存一下重置密码的步骤——在服务器上直接改库。 mysql的使用略。 关键是密码加密的算法是Bcrypt(round = 10),一个在线工具如下在线Bcrypt密码生成工具-Bejson.com。 生成想要的密码以后,将数据库一行的password改为加密密码,status改为active,即可大功告成。

季度思想汇报

思想汇报是百分之五十的例行公事和百分之五十的感想。 出于控制字数的需要,我不得不先拟稿再誊写。 尊敬的党组织:    趁着这次自我鉴定的机会,我想向党组织汇报这几个月来的思想体会,恳请党组织予我以一些改进的建议。自从2022年6月被党组织批准成为预备党员以后,社会上发生了一系列大事,我也在求职之旅中扩展了视野,获得了新的启发。以下是我思考的问题——党员在工作中要如何表现? 我在外企实习期间,一位上司自称是学生时代入党,多年忘交党费,恐怕已经自动退党,而他并没有主动补充的想法。这个例子让我预见到社会经历对党员意志的弱化。与之相比的正面例子是,曾有民企老总到校内主持讲座,为自己的党员身份骄傲,明确定义了自身与企业的社会责任,提问时也要求学生党员积极回答。 通过这一组对比,我更加倾向于效仿后者的做法,考虑党员对社会的责任感而择业。一种好的做法是加入研究所或军工单位,支援落后地区建设和重点项目攻关,奉献青春,这也是就业指导教育所提倡的精神。毕竟在这个经济私有化的时代,卖力工作已经不能称为党员先进性的体现,其前提是为了公共事业而奋斗。然而,一些公开的信息暴露了体制内研发工作的种种特点,令我放弃这个想法。待遇不足,加班严重,保密要求严格,这些尚可接受。致命一击来源于研发的低效性,不利于学生成长。在这样的单位里,政治大于科学的风气令人望而生畏,官僚主义和形式主义对职员提出了更严峻的考验。学生急于成长,在政治上虽然是太浮躁了,但却是其立足社会的必需品。另外,

超标量处理器设计读书笔记-BP篇

第四章 分支预测 4.1 概述 分支预测越靠前越好。快速解码电路放在cache当中。由L2-cache到L1-cache之前就解码。 4.2 方向预测 PHT=2bit饱和计数器。对某一种pattern的taken历史做记录。 BHR=分支历史寄存器,对2^n种pattern分别做记录,对每个地址都做记录,称为局部历史的方向预测。 GHR=全局历史寄存器,对2^n种pattern分别做记录,但是不对每个地址都做记录,而是只维护一个寄存器,称为全局历史的方向预测。 为了解决直接映射PC的情况下,不同分支指令的训练冲突的情况,可以先对PC和HR做拼接或异或,作为index来对PHT寻址。这种做法可能会降低冲突,可能也会提高冲突。 竞争的分支预测,暂时不提。 分支预测的更新有三个来源,取指,执行,提交阶段。另外,根据大佬提及,在中断处理程序当中可以更新。 其中,执行阶段的更新仅仅是推测,为了修复推测错误带来的损失,要么在执行阶段统一修复,代价比较大(尤其是修复load指令时),要么在执行阶段设置若干checkpoint,选择其中一个回复。

超标量处理器设计读书笔记-VM篇

第三章 虚拟存储器 3.1 概述 虚拟存储诞生的背景是,在现代处理器的场景下,操作系统每个进程需要更大的寻址空间以支持多进程应用。还可以实现子程序的保护和共享。 当物理内存不够用时,把不常用的页保存到下一级存储器当中,称为swap空间。实际内存大小为物理内存大小+swap空间大小。 3.2 地址转换 地址转换分为三种方式,线性页表,两级页表,多级页表。 3.2.1 当page不在物理内存中,就发生了page fault异常。为了减少异常发生的概率,应该尽可能使得常用的page留在物理内存当中。如果实现任意位置可以替换,相当于全相联的cache,但是代价昂贵,所以使用页表来存储VPN到PFN的转换关系。 指定程序的页表在物理内存中的位置的寄存器叫PTR。 线性页表的结构如下所示。 需要注意的是,entry内容除了PFN还有valid位。如果每个页表都保持对所有空间的映射,此时保存页表的空间十分巨大,因此需要进行多级映射。 在这个阶段,页表所在的物理内存地址是无需映射的,固定分配于内存。但是访存非常麻烦,要先访问页表得到物理地址,再按这个地址寻址,一共访问两次内存。现代处理器使用tlb和cache来加速这一过程。 3.2.

超标量处理器设计读书笔记-Cache篇

第一章 概览 超标量=superscalar 可变指令宽度=VLIW 第二章 Cache 2.1 Cache设计的三要素-组织方式,写策略,替换算法。 Cache的组织方式 包括直接映射、组相连、全相连映射,对应的查找算法为直接寻址、逐路比较、按内容寻址。 直接寻址容易发生冲突。组相连会把不同way的cacheline组成cache set。存在并行访问和串行访问两种方式,前者功耗消耗更大,关键路径更后者多花一个周期,但是周期时间更短。 全相连的缺失率是最低的。但是需要比较的内容太多,延迟也是最大的。注定不会有太大的容量。 Cache的写策略 主要有两种策略,写通和写回写分配。 写通适合访存性能较好的场合,写回写分配适合访存延迟较大的场合。 替换策略 1、LRU最近最少使用法 理想的实现方式是每个cacheline配一位age。每个way当中年龄最小的age被使用时,把另一个way的age清零。但是way数多了以后代价昂贵。 实际上会采用逐级编码比较的方式来实现LRU。对所有way进行分组,每一组使用1位年龄部分。最后定位到某一个way。 2、随机法 可以使用时钟算法实现

秋招复习边角料集锦

这篇文章的目的是为了整理一些复习中遇到的问题,性质约等于todo list。 完成一条就勾掉一条,然后整理为成体系的知识。 1、带有半满,半空标准的异步fifo写法,用途 (写法Done,任意数量气泡的写法有待商榷) (用途,模块之间紧耦合变为松耦合。具体表现为,后级同FIFO的握手信号可以考虑流水线的深度,由靠近后级的流水线产生的控制信号来参与握手,同时也能保证FIFO不空也不满,没有气泡产生。无论从速度还是功能上都做到了高性能) 2、基本cmos逻辑门的组成和电气特性。 见数字电子技术,与非门和反向器的特性。 3、低功耗设计方法 1)系统层面低功耗 系统层面的低功耗技术可以涉及板级硬件系统和芯片内的SoC系统,其原理基本一直。以SoC系统为例,常见的低功耗技术如下: (1)SoC系统中划分不同的电源域(Power domain),能够支持将SoC中的大部分硬件关闭电源,实现电源,门控(Power gating);或者工作在不同的电压下。 (2)SoC系统中划分不同的时钟域,能够支持小部分电路以低速低功耗的方式运行; (3)通过不同的电源域与时钟域的组合,划分不同的低功耗模式。SoC配备PMU控制进入或退出不同的低功耗模式; (4)软件可以通过使用PMU的功能,

Xilinx 复位白皮书读后感

reset白皮书 1.从功能上来看,全局复位很香。 2.但是实际上,全局复位不一定work,这一点是由复位网络的传递延时决定的。 3.先不讨论同步复位,因为它可以被STA约束。全局异步复位,可能会导致不同的FF在解复位时工作在不同的状态或亚稳态。 4.但是异步复位还是需要的,毕竟同步复位消耗的性能也不少,而且同步复位没有办法有效地跨时钟域工作。在讨论怎么解决亚稳态问题以前,首先我们应该思考,设计到底要不要复位? 5.答案是,在FPGA上不需要,因为自带power on reset。如果子模块实在需要单独的外部复位,推荐使用高电平复位,可以在每个复位端口出口处节省一个反相器。之所以很多IP使用低电平复位,是因为要尽量避免毛刺对复位的影响,以及出于功耗的考虑。 6.那么什么样的设计需要复位呢?单纯流水线不需要每一级都复位,带反馈的流水线需要每一级都复位(截止到反馈那一级),这是最简洁的结论。 7.举个例子就是移位寄存独热编码的复位,如果出现亚稳态,可能导致热编码永久消失。 8.最后再来考虑如何对这样的流水线进行有效复位?答案是异步复位同步释放电路,而且是通过级联寄存器来实现可控复位时长的,也可以分析sta。 9.值得注意的是,SRL16E移位寄存器是没有复位的,

英伟达数字设计面经

面试岗位 ASIC intern / IP  Design & Verification Team 一面 90min(actual) / 180min(expected) 三位面试官 请你自我介绍一下?(中文)你能说一下你的cpu项目做了哪些task吗?(答:对照一生一芯流程,先做core,再加总线,乘除法,cache,跑通测试集)你说你的流水线是四级,为什么要拿掉访存,那你怎么访存呢?(答:为了减少资源,优化时序)你能说一下你是怎么实现Load/Store的吗,数据通路是怎样的,可以具体一点吗?答:(show 出结构图,在EX级实现访存,如何实现全速流水)你能说一下流水线之间有没有类似valid,ready的握手protocol呢?你能列举流水线的什么行为可以跟ready allow的各种组合对应呢?(答,介绍valid,ready_go,allow_in,不过面试官没有理解为什么要单独valid,

RISCV-CPU presentation

一、前言 我的时间不多了,特地开此一篇为我的CPU项目收尾,也方便在正式秋招的时候进行复习。然后安心投入到其他重要事务当中。 当前项目的完成情况如下所示: 1)采用verilog语言编写,在linux vivado平台上完成了仿真与验证。 2)采取四级流水线模型实现,四级流水线包括取指,译码,执行,写回。去除访存阶段以后,在执行阶段完成访存请求并提交给写回级。 3)在流水线之间实现了握手协议,支持插入气泡解决结构冒险和指令Hazard。 采取旁路机制避免数据冒险,减少流水线气泡。采用冲刷机制和静态分支预测抵消控制冒险。 4)完整支持RV32 IM指令集,已通过RISC-V官方compliance test验证。为验证cpu在测试集上的表现编写了一系列python自动化测试脚本,用到开源EDA iverilog + gtkwave 实现建模,仿真与功能验证。 5)实现了双周期乘法器和多周期除法器。支持连续同构乘除法指令融合,提高流水线运行效率。乘法器采用七层华莱士树+ 2位booth编码实现。除法采用迭代试商法实现。 6)集成了类AXI总线,支持MMIO方式挂载外设,现有外设包括MEMORY,GPIO,UART。 7)

他山之石——面经学习

你对数字后端怎么看,为什么要投数字前端?答:数字后端的任务是通过物理设计把芯片从模型落实到可以实际运行的状态,并且满足PPA的要求。相比前端设计来说,数字后端需要解决更多琐碎的问题,是生成GDSII交付厂家的最后一道关,是芯片生产当中最重要的一环。需要相当的耐心和责任心。 我选择数字前端的原因之一是其门槛相对数字后端低,适合入行。原因之二跟其他专业有结合点,有趣。 2. Tsu Thold概念,指出其位置 答:概念略。 器件的延时是由电流对晶体管的冲放电引起的。 补充,是否可以是负值?不可能。因为电流的流向是固定的。 setup优化方法如下。 1)优化组合逻辑,减少走线延迟和传播延迟,让到达慢的信号尽量靠近后级再参与逻辑,减小关键路径的长度;提高前一级的驱动能力(手动复制寄存器),也有助于(或者是干脆打断,多插入一拍) 2)优化器件,减少tcq。一种工艺层面的方法是,采用LVT器件。低电压阈值的器件具有比较好的转换时间,从而容易满足tsu和th。 标准元件库和mos管的关系? 3)调整时钟网络,在capture path上增加延时,不推荐 hold优化方法如下。

乐鑫数字设计面经

一面 同学,请你自我介绍一下?我看到你做了一个cpu,你能介绍一下RV有哪些指令吗?(寄存器类,立即数类,csr类,fence类,漏答了一个访存类)你在实现访存指令的时候,需要几个周期完成?(个人设计是5个)你的四级流水线模型是哪四级?(取指,译码,执行,写回)你是从执行级发起访存请求的,那你访存到写回寄存器一共要几拍呢?(2拍)你对低功耗设计有了解吗?能说一下低功耗设计的技术吗?(设计时,减少寄存器反转。门控时钟。低功耗模式)你能说一下工艺层面如何实现低功耗设计吗?比如说,你可以比较一下LVT,HVT,SVT的优缺点?(没答上来)你对SRAM有了解吗?SRAM一般有哪些端口?(时钟,地址,数据,写掩码,使能,复位)(面试官:什么,还有复位?答:在Xilinx的ip里,对最后一级缓存输出寄存器有个复位。)前面提到了门控时钟,你知道如何进行时钟控制来实现SRAM的低功耗吗?(觉得理所当然,

xilinx ram ip 总结

在写rv cpu的过程中碰到ram选型的问题,因此起了这篇文章对网上的资料进行总结,顺便能解释之前fpga项目中例化bram时的怪相。 fpga中的ram分为两种,dram(lutram)和bram。 dram是指distributed ram,是利用fpga中的lut资源实现的ram。特点是,可以整合多个资源块中用剩下的lut,形成一整块逻辑上的ram,物理上不一定连续。 bram指block ram,是利用fpga中ram资源实现的ram。特点是,它是物理上连续的ram,一旦声明了一块bram,即使它占用的空间小于物理ram的最小容量,物理ram也会被完全占用,无法将多余的容量移作他用。因此bram十分消耗fpga的资源。 关于ram的分类,还需要注意的是,fpga中的这些ram都是指sram = Static Random-Access Memory,不同于dram = Dynamic Random Access Memory。sram的特点是,一旦读取数据,便会保持在输出端口,直到被更新。dram的特点是,读取数据以后,若不即时刷新便无法保持。 sdram,即通常我们所说的ddr, 下面将详细介绍lutram和bram的特性与区别。 一、distributed ram ip

《手把手教你设计CPU——RISC-V处理器篇》读书笔记(四)

四、蜂鸟E203 CPU的硬件结构E203的单元结构 一共有三种冒险,数据冒险(正确值还没写入寄存器就会被读取),结构冒险(哈佛结构令存储和数据分离,解决了这个冒险),控制冒险(下一条指令还没决定就继续)。流水线的数据冲突。 XAY相关性的结果是,如果X比Y早,则Y或者操作失败。 前两者可以寄存器重命名来解决,即替换同一寄存器为对两个不同的寄存器操作,消除相关性。 后者因为必须对同一数据进行操作,所以不可以寄存器重命名来解决问题。一旦相关,必须使得流水线停顿。 相关性问题引发的后果是,后一指令的操作源(寄存器)与前一指令的操作对象(寄存器)相同,所以必须等到操作源更新才能解除RAW相关性引起的数据冒险。 流水线前递 作为一种替代方案,可以通过前递或称旁路来解决相关性问题,即令操作源提前更新,提前被读取(尽量靠前,最早由ALU引出旁路)与被写入(尽量靠后,将旁路接到ALU的输入端)到ALU计算单元中。 前推的路径有两种,由访存输出引出旁路或者由ALU输出引出旁路。由ALU引出旁路的情况,是前后两条指令有相关性的情况。由访存输出引出旁路的情况,是前后三条指令有相关性的情况,此时最前一条指令的写回尚未执行,因此还是得进行前递,可以提前一个周期得到更新后的操作源。 超过三条指令的操作数,

《手把手教你设计CPU——RISC-V处理器篇》读书笔记(三)

三、RISC指令解读Risc-v指令 I型指令  = 带常数的算术指令和加载指令。 R型指令  = 其他算术指令和存储指令 U型指令 特指lui指令 用于制造大常数 SB型指令 分支指令 不能编码奇数地址 若编码奇数地址,则是按半字数寻址。 半字=16bit,字节=8bit,字=32bit UJ型指令 jal       不能编码奇数地址 输入立即数的最低位默认置0 Addi rd rs1 imm12 寄存器rs1和12位立即数相加。12位立即数进行符号位扩展。结果溢出则舍弃,仅保留低32位结果。 slti rd rs1 imm12 寄存器rs1和12位立即数相比较,  rs1小则输出1。 sltiu rd rs1 imm12 无符号数比较。符号位扩展不影响比较结果。 (无符号整数 )是否比1小?=是否是0? andi rd rs1

《手把手教你设计CPU——RISC-V处理器篇》读书笔记(二)

二、RISC寄存器RV32 IMAFDC?IMAFD=G 又E子集是只有16个通用寄存器的子集。 寄存器组包括通用寄存器和控制与状态寄存器(CSR)。通用寄存器别名如下图所示。 X0是预留的0。 X1是返回地址。 X2是栈指针。 X3是全局指针。 X4是线程指针。 X5是临时链接寄存器。 X6-7是临时寄存器。 X8是保存寄存器0或框架指针。 X9是保存寄存器1。 X10-11是函数参数或者返回值。 X12-17是函数参数。 X18-27是保存寄存器。 X28-31是临时寄存器。 可见,实现非嵌入式指令集需要的寄存器种类和嵌入式指令集需要的寄存器种类一致。 PC = Instruction Program Counter CSR寄存器用以配置和记录一些运行的状态。E203只支持机器模式相关的CSR寄存器。 Misa指令集架构寄存器,最高两位用于指示处理器支持的架构位数。低26位分别表示对ISA模块化子集的支持。本来是可读可写,能够动态配置,E203中只读。 Mvendorid只读,反应供应商编号。0表示不是商业处理器。 Marchid只读,反应微架构编号。0表示未实现。 Mstatus寄存器是机器模式下的状态寄存器。 4.mstatus的XS域 XS域和FS域的作用类似,维护或反应用户自定义的扩展指令单元状态。 Mtvec配置异常的入口地址。 Mepc 保存进入异常之前的PC值,

《手把手教你设计CPU——RISC-V处理器篇》读书笔记(一)

前言这篇文档,是书籍《手把手教你设计CPU——RISC-V处理器篇》的读书笔记,同时也是设计risc-v cpu软核的工作文档,记录了一些项目关键信息,知识框架和分析,服务于项目迭代需求,也对将来求职有帮助,算是个可讲的东西。 文档首先是回顾部分,这一部分将要提出关于riscv处理器的一些基本问题,并作出相应的解释回答,用于指导项目计划和进度。 一、回顾1. risc-v 是什么? 是一种指令集(ISA)。指令集分为RISC和CISC。 不同CPU的架构就是对指令集的不同实现,是指令集架构,也成为微架构(Microarchitecture)。如x86和MIPS、ARM。 处理器一般指完整的Soc。处理器核(Core)是指CPU当中最核心的部分,即CPU架构的物理实现。 指令集架构是计算机硬件与软件的接口。 risc-v是一种risc指令集。 2. risc-v具有什么特点? 开源免费,理念先进,定义了许多有助于突破业界产品性能瓶颈的特性。 3.为什么要学习risc-v? 对于嵌入式软件工程师,汇编级别的优化和对CPU架构的理解是必须的,这样才能提高调试能力,尽可能地利用好硬件的性能。目前,采取risc-v的mcu出货量巨大,不容忽视。

计算机网络学习散记

计算机网络——自洽(无主从关系),互联(通信链路)的计算机集合。 计算机网络=硬件+网络协议(数据交换的规则)。 网络协议三要素——语法,语义,时序。 协议标准,RFC(Request for comments),IEFE(Internet Engineer Task Force) Internet,全球最大的互联网=ISP(互联网网络提供商)网络之网络。 分组交换——经由路由器和交换机转发数据包。 交换方式,存储-转发,数据暂存在转发节点。 报文转发的延时=节点传输延时*节点传输个数 (缓存空间=一个报文) 分组转发的延时=节点传输延时*节点传输个数+节点传输延时*分组个数(并行交换) (缓存空间=一个分组) 分组会增加数据冗余(分组头);分组交换允许多用户复用电路(

Hello world,again
Getting Started

Hello world,again

大家好,这里是Erubsh。 阿里云的服务器续满了三年,也没有做出什么东西,于是转战腾讯云。 本来使用springboot框架写了一个网站,但是管理起来发现有太多东西要自己动手很烦。于是乎弃了(顺便算是弃了javaweb吧)。 写博客做重要的事情是产出回顾,而不是搭建博客的过程,折磨自己没有什么意思——只要达到目的,手段并不重要。目的也是越少越好。 在这无人问津的小站,希望也有延绵不绝生生不息的历史。