RISC-V

RISC-V and ARM

RISC-V是完全开源的,虽然现在编译器和IDE生态还不行,但是在各国的大力推动下,未来可期。

相比於Arm架構,RISC-V的指令集更小、可以模組化擴充、客製化設計自由度等優點,經過數年發展,漸成為Arm架構的有力挑戰者。

RISC-V现在在物联网的应用是很好的。

The RISC-V Instruction Set Manual

多种不同长度的ISA

RV32I base integer instruction set.

RV32I contains 40 unique instructions.

For RV32I, the 32 x registers are each 32 bits wide,

Base Instruction Formats:

最先是符号位的原因是,立即数是二进制补码表示,也就是有负数的,所以有addi指令但是没有subi指令

为什么跳转的时候,最低位为0。为了支持RVC

application binary interface(ABI)

RV32E Base Integer Instruction Set( draft)

reduced version of RV32I designed for embedded systems. The only change is to reduce the number
of integer registers
to 16.

RV64I Base Integer Instruction Set

builds upon the RV32I variant。需要注意的一点,是访问的寄存器和寄存里的地址变成64位了,指令长度还是32位。

register: RV64I widens the integer registers and supported user address space to 64 bits

如果想要在RV64I里运行32位的指令,在指令后加后缀W就行。比如ADDIW

Additional instruction variants are provided to manipulate 32-bit values in RV64I, indicated by a ‘W’ suffix to the opcode.These “*W” instructions ignore the upper 32 bits of their inputs and always produce 32-bit signed
values,

访存相关

The LD instruction loads a 64-bit value from memory into register rd for RV64I.

The LW instruction loads a 32-bit value from memory and sign-extends this to 64 bits before storing
it in register rd for RV64I. The LWU instruction, on the other hand, zero-extends the 32-bit value
from memory for RV64I. LH and LHU are defined analogously for 16-bit values, as are LB and
LBU for 8-bit values. The SD, SW, SH, and SB instructions store 64-bit, 32-bit, 16-bit, and 8-bit
values from the low bits of register rs2 to memory respectively.

RV128I Base Integer Instruction Set

寄存器位数和地址空间变成128位。

Standard Extension for

  1. Integer Multiplication and Division
    1. MULDIV
  2. Atomic Instructions
  3. CSR Instructions
  4. Single-Precision Floating-Point
  5. Double-Precision Floating-Point
  6. Quad-Precision Floating-Point
  7. Bit Manipulation
  8. Vector Operations(draft)

指令速查






RISC-V assembly syntax

1
2
3
beq rs1, rs2, Label #RISC-V
SW rs2, imm(rs1) # Mem[rs1+imm]=rs2 ,汇编将访存放在最后
add rd, rs1, rs2 # rd = rs1 + rs2

Registers

frame pointer = BP in X86

ra = Link register in ARM

Some RISC-V compilers use a frame pointer, fp, or register x8 to point to first double word of
frame.

指令设计

先用高维,预留低位来拓展

RVC (compressed)

32位时

minor 不包括func3 + opcode (去除固定2位)

major没func3

compiler explorer

编译器模拟器

https://godbolt.org/

array由于大小是一开始固定好的,分配在栈里。而vector是变的,分配在堆里?

RISC-V环境搭建

https://chivier.github.io/2022/02/04/2022/2202-QemuTest/

但是RVV向量化在git其他分支里,gcc7和8编译不会错

需要进一步的研究学习

Control and Status Registers (CSRs)

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

ISA & Micro-architecture

Instruction Set Architecture(ISA)

指令集架构(Instruction Set Architecture)是指一种类型CPU中用来计算和控制计算机系统的一套指令的集合。

指令集架构主要规定了指令格式、寻址访存(寻址范围、寻址模式、寻址粒度、访存方式、地址对齐等)、数据类型、寄存器。指令集通常包括三大类主要指令类型:运算指令、分支指令和访存指令。此外,还包括架构相关指令、复杂操作指令和其他特殊用途指令。因此,一种CPU执行的指令集架构不仅决定了CPU所要求的能力,而且也决定了指令的格式和CPU的结构。X86架构和ARMv8架构就是指令集架构的范畴。

所以不要说Nvidia是属于x86还是arm了,显卡应该是有自己的架构的。比如NV Tesla架构 、Fermi架构、Maxwell架构、Kepler架构、Turing架构。

而且X86具体到Intel,也有Skylake 架构 Ice lake 架构 Haswell架构等具体的实现

CISC与RISC的历史

复杂指令集(CISC,complex instruction set computer)

RISC:Reduced Instruction Set Computer

Three Performance Knobs

$$p(performance)=\frac{IPC*f}{Instruction\ Count}$$

在计算机发展初期,计算机的优化方向是通过设置一些功能复杂的指令,把一些原来由软件实现的、常用的功能改用硬件的指令系统实现(减少IC),以此来提高计算机的执行速度。也就是为了减少程序的设计时间,逐渐开发出单一指令,复杂操作的程序代码。设计师只需写下简单的指令,再交给CPU去执行。

但是后来有人发现,整个指令集中,只有约20%的指令常常会被使用到,大约占了整个程序的80%;剩余80%的指令,只占了整个程序的20%。(典型的二八原则)

于是有人提出RISC尽量简化计算机指令功能的想法,主张硬件应该专心加速常用的指令,较为复杂的指令则利用常用的指令去组合。功能简单、能在一个节拍内执行完成的指令被保留,而较复杂的功能用一段子程序来实现,这种计算机系统就被称为精简指令系统计算机。

简单来说,CISC任务处理能力强,适合桌面电脑和服务器。RISC通过精简CISC指令种类,格式,简化寻址方式,达到省电高效的效果,适合手机、平板、数码相机等便携式电子产品。

各种架构

X86架构

1978年6月8日,Intel 发布了新款16位微处理器 8086,也同时开创了一个新时代:X86架构诞生了。

X86指令集是美国Intel公司为其第一块16位CPU(i8086)专门开发的,美国IBM公司1981年推出的世界第一台PC机中的CPU–i8088(i8086简化版)使用的也是X86指令。

为了保证电脑能继续运行以往开发的各类应用程序以保护和继承丰富的软件资源,所以Intel公司所生产的所有CPU仍然继续使用X86指令集。

IA64

IA64,又称英特尔安腾架构(Intel Itanium architecture),使用在Itanium处理器家族上的64位指令集架构,由英特尔公司与惠普公司共同开发,2001年首次推出。

ARM

见 arm.md

MIPS

1981年出现,由MIPS科技公司开发并授权,它是基于一种固定长度的定期编码指令集,并采用 导入/存储(Load/Store)数据模型。

mips是一个学院派的cpu,授权门槛极低,因此很多厂家都做mips或者mips衍生架构。我们平时接触到的mips架构cpu主要用在嵌入式领域,比如路由器。

目前最活跃的mips是中国的龙芯,其loongisa架构其实是mips的扩展。

DEC Alpha

Alpha是DEC公司推出的RISC指令集系统,基于Alpha指令集的CPU也称为Alpha AXP架构,是64位的 RISC微处理器,最初由DEC公司制造,并被用于DEC自己的工作站和服务器中。作为VAX的后续被开发,支持VMS操作系统,如 Digital UNIX。

侧重超算,目前貌似最活跃是中国申威,神威太湖之光的cpu

RISC-V

2010年提出,受到大家的支持。USTC有团队研究。

Instruction Set Architecture(ISA)的发展展望

90年代,MIPS和Alpha作为知名RISC在与X86竞争计算机市场中失败,又在错过智能终端高速发展的机遇中走向衰弱。2010年发布的RISC-V作为从发明伊始即以开源为最大特色的RISC ISA受到全球学界、产业界的高度关注。全球顶级学府、科研机构、芯片巨头纷纷参与,各国政府出台政策支持RISC-V的发展和商业化。RISC-V有望成为X86和ARM之后ISA第三极。

微架构(Micro-architecture)

实现指令集架构的物理电路被称为处理器的微架构(Micro-architecture)

大多数情况下,一种处理器的微架构是针对一种特定指令集架构进行物理实现。少部分处理器架构设计为了更好的兼容性,会在电路设计上实现多个指令集架构。虽然,指令集架构可以授权给多家企业,但微架构的设计细节,也就是对指令的物理实现方式是各家厂商绝对保密的。

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

https://www.zhihu.com/question/423489755/answer/1622380842