经典计算中的经典设计

Last Updated: 2024-01-21 14:55:31 Sunday

-- TOC --

所谓经典计算,是区别于量子计算而言的,即我们非常熟悉的采用二进制计算的电脑系统。经典计算经过半个多世纪的发展,个人感觉有一些底层的设计已经几乎固化了,看不到任何不一致的case。本文尝试简要总结这些设计,从程序员的角度出发。

二进制(binary)

经典计算是二进制计算。所有的CPU都是二进制计算,因为这是最简单直接并符合直觉的。

1个Byte等于8bits

据说8bits的由来,是为了在传输ASCII编码时,做奇偶校验。很多CPU的寻址单位是Byte,内存以Byte为单位,网络协议以Byte为单位长度设计协议报文....任何地方,一个Byte都等于8bits。

补码(two's complementary)

自1965年开始,几乎所有的计算机就都采用补码来表达负整数。原因是:

原码,反码,补码和移码

Stored-Program

程序的代码和数据,都要先调入内存,然后才能运行。多个程序可同时在内存中,由OS调度执行。我对这个设计没啥感觉,就像对阿拉伯数字系统也没啥感觉一样,但它们都是伟大的设计!

调用栈(Stack)

在编程的上古时期,程序员全都只用汇编的年代,调用栈就出现了。它支持了接口调用,而有了接口调用,就可以多人分工,不同的接口交给不同的人编写。现代程序员已经几乎脱离了汇编,都工作在high level,维护调用栈的工作,全都交给了编译器。在ISA层面,X86提供了直接操作调用栈的指令,而RISC-V很节省,但通过其提供的其它通用指令,也完全可以实现操作调用栈的功能。

调用栈有个有趣的细节,它是从高地址向下扩展,栈顶指针总是指向低地址。我认为这个设计是刻意而为之的,因为不管是大端还是小端平台,任何变量的地址,都是从低地址开始,栈顶指向低地址,可以轻松实现存取。

IEEE754浮点数标准

正如补码统一整数计算一样,IEEE754浮点数标准统一浮点数计算。

深度理解IEEE754浮点数

深度学习所采用BF16标准虽不在IEEE754标准体系中,但整体设计思想与IEEE754完全一样。

CPU中的Pipeline

现在已经几乎见不到没有采用pipeline技术的CPU了。这个技术充分调动了硬件功能,降低了CPI,提供了程序员无感知的ILP(Instruction Level Parallel),是个很优雅的设计。现代Superscaler体系,集成了多条精心打造的pipeline,pipeline就像ALU一样,是CPU内部的基础部件。

本文链接:https://cs.pynote.net/hd/202311291/

-- EOF --

-- MORE --