皋陶 发表于 2020-8-24 23:25:38

Design of the RISC-V Instruction Set Architecture笔记(chapter4)

本帖最后由 皋陶 于 2020-8-28 21:44 编辑

Design of the RISC-V Instruction Set Architecture笔记(chapter1-2)
Design of the RISC-V Instruction Set Architecture笔记(chapter3)
Design of the RISC-V Instruction Set Architecture笔记(chapter4)
Design of the RISC-V Instruction Set Architecture笔记(chapter5)

Design of the RISC-V Instruction Set Architecture笔记(chapter4)
[*]RISC-V M extension :定点乘法和除法。直接使用整数寄存器,不增加其他寄存器(减少硬件开销,指令数目,寄存器之间的拷贝延迟和线程的上下文,同时有利于编译调度)
[*]The instructions in the A extension realize the RCsc memory model with a memory ordering annotation(注释), which comprises two bits on the static instruction: aq and rl.
[*]针对于浮点扩展不重用定点寄存器的原因


[*]整数和浮点寄存器的自然宽度不一定相同
[*]我们希望能够采用内部重新编码格式以使得实现更加灵活,不在同一寄存器中表示整数和浮点数简化了这种设计。
[*]拆分寄存器文件组织增加了可从单个指令寻址的寄存器总数,因为操作码(浮点与整数)提供了隐式寄存器指定符位。
[*]A split organization provides a natural register file banking strategy, simplifying the provision of register file ports for superscalar implementations.
[*]通过将微体系结构管理的脏位添加到寄存器文件,可以减轻上下文切换成本

[*]单精度浮点扩展提供了5中舍入模式:最近舍入(采用取偶数的方式),向零舍入,向下舍入,向上舍入,最近舍入(采用远离0的舍入)。第五种IEEE并没有要求,但是发现在库代码中比较有用。同时在大多数编程语言中,预计将动态指定舍入方向。 因此,所有浮点指令都可以使用动态舍入模式,在浮点控制和状态寄存器的frm字段中设置。这些设定虽然会消耗编码空间,但是带来的效果也很明显。
[*]单精度浮点指令的异常处理


[*]五种异常:无效操作(根号负数),除零,上溢出,下溢(取为0),不精确(由于舍入带来的异常)
[*]在RISC-V中选择不将五种异常转化为陷阱,以促进浮点运算的非推测性乱序执行。

[*]非数的产生和传播


[*]对于RISC-V,我们选择了一个符号位清零的方案,除了静态位(尾数的第一位)之外的所有尾数都是清零的,原因为:


[*]它与至少一个其他ISA(ARM)的默认NaN相同,因此我们的选择不会加剧IEEE 754实现的碎片化
[*]它与Java编程语言的规范NaN相同。 (大多数其他编程语言没有定义)
[*]Our choice of canonical NaN is the only quiet NaN that cannot be generated by quieting a signaling NaN.
[*]Clearing most significand bits has lower hardware cost than setting most significand bits

[*]单精度浮点扩展指令中一个新颖的特点:符号注入指令(拷贝指数和尾数,但是使用一个新的符号位)。这种指令对于浮点库例程的手动编码很有用。
[*]浮点分类指令(floating-point classify instruction):根据浮点数的类型,将固定的结果写入寄存器。FCLASS对于库例程的手工编码非常有用,因为它们通常分支在不常见的输入上,如NaN。 将数字移动到整数寄存器文件并将其解构为其组成字段的替代方法需要更多指令。
[*]浮点乘加指令(FMA):accelerate the implementation of some floating-point library routines, and in general can improve the performance and accuracy of many algorithms.
[*]RISC-V将单精度浮点和双精度浮点分开的原因:在一些嵌入式邻域,单精度浮点已经足够了,同时实现双精度浮点太过昂贵。
[*]RISC-V的单精度浮点和双精度浮点不共用同一套寄存器,以此减少重命名实现的复杂性,同时增加寄存器的数量,提高可用性,减少指令数量





页: [1]
查看完整版本: Design of the RISC-V Instruction Set Architecture笔记(chapter4)