经年治世

西风烈,长空雁叫霜晨月

RISCV直接模式处理例外的实现问题与解决方案/PC的变化与SEPC的存储精确性问题/反相关代码导致的被迫按序执行的问题/内存别名问题

RISC-V

RISC-V世界的严格区分例外和中断 我们实现例外处理机制,使用的是RISC-V中的多个处理模式之一的直接模式. 就是所有的例外处理,都使用统一的例外处理入口地址,跳转到这个地址后,由这个地址里面的指令通过读取mcause寄存器的值,来选择跳转的不同的处理程序. 这是普遍例外的处理,中断也是一样的. 在RISC-V中,中断指处理器外部事件,例外指代所有事件 RISC-V直接模式处理例外的实现......

RISCV不同阶段前递问题/load-use冒险的停顿技术/优化控制冒险发生时浪费的时钟周期问题分析/ID计算加速的专用前递通路问题/PC清理-预测加速问题/流水线清理问题

RISC-V

load-use冒险的不同阶段前递问题 穷举了load指令后跟算术运算指令和存储指令的所有冒险类型. load指令后跟随算术指令,会发生load-use冒险中的EX冒险,即后指令在进行EX阶段就需要ld指令中RD存储的值.此时由于晚了一个周期,当后指令执行EX阶段时,ld指令还在执行MEM阶段.所以我们需要流水线停顿和前递 load指令后跟存储指令时分为两种情况: 1.当ld指令的rd和sd......

RISCV停顿与非停顿冒险/x0寄存器的数据冒险处理陷阱/寄存器同周期读写的解决方法/解决EX/MEM冒险

RISC-V

结构冒险的避免 这种硬件结构上的缺陷,导致流水线上的不同指令执行,对于数据通路单元的使用产生了矛盾. 加入处理器只有一种存储器,将指令存储器和数据存储器合并. 如果第一条指令的第4步骤是读数据,需要读存储器,第4条指令需要取指令,读存储器.这就是在硬件使用上的冲突. 所以在设计流水线时,从单周期处理器指令入手,避免在一条指令中使用重复的数据通路单元.避免不同指令的工序出现颠倒,如果出现工序减......

RISCV舍入问题和中间结果存储问题/浮点并行加速的不稳定性问题以及传统并行算法研究步骤

RISC-V

先前处理算术运算时舍入问题和中间结果存储的存储问题 IEEE 754标准提供多种舍入方法,这是因为在连续整数之间的小数,浮点数所能精确表示的个数是有限的,单精度浮点所能精确表达的小数的有效位必须小于23位,双精度则是53位(包含隐藏位) 为了得到所能有的寄存器位数能表示的位,采取了额外添加两个位数来存储中间计算结果,分别是保护位/舍入位 IEEE754标准有四种舍入模式:向上舍入/向下舍入/......

RISCV乘法硬件加速算法原理/单精度规格化与非规格化最小正数问题/F/D标准扩展与I问题

RISC-V

乘法算法的一般算法的演变和使用硬件加速算法原理分析 乘法算法与纸笔算法是一样的.二进制乘法,由于二进制的特殊型(只有1或0),当乘数的某一位是1时,就将被乘数复制到合适的位置,如果是0时,就将0复制到合适的位置,然后全部加起来.计算机的乘法算法与之同源. 一般算法就是上述算法,只不过在"复制到合适的位置"这里,就是将每一次的被乘数左移一位,使其扩大2的幂. 进制由什么定义......

RISCV减低边界检查的开销方法/硬连线为零的可能实现方式/大立即数的RISC-V编址和寻址问题/分支和跳转指令中立即数字段的PC相对偏移表示问题

RISC-V

使用最高有效位来减低边界检查的开销 我们可以至少保证对于数组的边界的值,一定是一个正确的合理的数y(指代y是一个有符号正数). 我们需要检查下标x是否满足0 <= x < y 则仅使用: 1bgeu x, y, error //伪代码 就可以完成两项检查. 这里利用了最高有效位的双重含义:在有符号整数中,最高有效位为1,表示一个负数,但是在无符号整数中,表示这是一个很大的数. c......

RISCV超12位立即数字段的跳转问题/解决数据竞争问题的底层支持/数组索引访问与指针访问/常见优化/x86的复杂性缺陷

RISC-V

关于超出条件分支的12位立即数字段的跳转问题 在少有的可能下,条件跳转会跳到很远的地址空间(超过12位地址表示的半字范围),我们不选择在硬件方面而是在汇编程序方面作出解答:在分支目标中插入无条件跳转指令,并将条件取反,以便条件分支决定是否跳过该无条件跳转. SB型条件分支指令的立即数字段是12位,UJ型无条件跳转指令的立即数字段是20位.支持正负2^19个半字范围的寻址. 关于逆向工程将机器......

RISCV基本设计理念

RISC-V

RISCV基本设计理念 并行性的重要性 未来程序员必须要成功切换到显式并行编程上面.所以我们应该要清晰的认识到并行编程的重要性.并行涉及到多个层面:指令级并行,数据级并行,线程级并行. 同时也分为硬件方面,编译方面,操作系统方面. 功耗:跟负载电容,电压平方,时钟频率有关 近30年每一次技术更新换代主要是通过减低电压,来减低功耗,同时提高时钟频率来增加性能. 由于目前功耗墙的限制,现在很难进......

x86汇编搁置的地方

x86

强调 在安装程序中,要注意安装的目标程序和目标地址的安全空间大小,使用movsb类似的指令时,要注意cx寄存器的存储大小和转移目标程序的大小 在编写中断例程中,要注意处理程序里面的jmp指令,必须全部是相对跳转指令,所有的标号,都要注意,其使用的时候,只有相对跳转指令里面使用标号才合法,其他的使用,都有漏洞 关于,调用别的处理程序的时候(中断例程),可以看情况,是否还需要将寄存器保留入栈,有......
x86

x86编程思考过程片段(3)关于编程技巧,注意事项,指令细节

x86

-每个任务都有4GB的虚拟内存空间(线性,平坦) -流水线技术-分解指令任务,同时差别执行(减少时钟周期个数) -静态存储器(SRAM)是用寄存器的材料做的内存(反馈原理制作的存储电路,使用触发器) 动态存储器(DRAM),因其电容需要定时刷新,故得名动态 高速缓存采用的程序的局部性原理 -乱序执行的本质不是胡乱取指令,而是在更微小层面上的流水线技术 将指令拆分成若干细小操作,在执行该指令中......
x86