CPU,减少晶体管翻转次数的编码

背景

以4比特为单位,共16个数。仔细思考状态转换过程中的晶体管翻转次数。

0000

0001,1

0010,2

0011,1

0100,3

0101,1

0110,2

0111,1

1000,4

1001,1

1010,2

1011,1

1100,3

1101,1

1110,2

1111,1

0000,4

分析,例如,从1111到0000,晶体管翻转4次。

总共的翻转次数是30,平均30/16=1.875次。

创新

以下编码,可以使得翻转次数降低,在顺序递增的过程中。

0000→0

0001→1

0011→2

0010→3

0110→4

0100→5

0101→6

0111→7

1111→8

1110→9

1100→10

1101→11

1001→12

1011→13

1010→14

1000→15

0000→0

以上编码,晶体管翻转次数降为16,平均1次。

若按照递增循环,可以把晶体管翻转次数降低,从30次到16次,降低(30-16)/30=46.7%

总结

降低晶体管翻转次数,可以省电。

上述方案,可以在数字递增循环过程中,将晶体管翻转次数降到最低。

查表法完成四则运算

使用查表法的目的,同样是为了省电。

查表法使用大量的ROM,既然X3D可以堆叠cache,我们也可以堆叠ROM,而且ROM比cache省电,可以堆叠更多层。

1比特cache需要6个晶体管,而同等容量的ROM只需要1个晶体管。

总之,堆叠ROM的容量可以很大,使得CPU能够一次处理很多笔四则运算。

规定float和double格式时,还不流行多核。实际上,可以用多核并行运算,计算decimal数字,不再受位数的限制。

所以,新的CPU拥有极大的ROM,可以通过查表法同时完成许多笔四则运算,这N个整数核,大约可以同时完成N/2笔浮点数运算。N的大小取决于ROM的大小,和表的大小。

程序

该程序输出8比特的晶体管编码:

复制代码
a=('00','01','11','10')

def f(x,y,z,t,i):
    print(a[x%4],a[y%4],a[z%4],a[t%4],'->',i)

x=0;y=0;z=0;t=0
for i in range(256):
    f(x,y,z,t,i)
    if i%4!=3:
        t=t+1
    if (i+1)%4==0:
        z=z+1
    if (i+1)%16==0:
        z=z-1
    if (i+1)%16==0:
        y=y+1
    if (i+1)%64==0:
        y=y-1
    if (i+1)%64==0:
        x=x+1
    if (i+1)%256==0:
        x=x-1
相关推荐
Decay__6 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
代码山河8 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
微订校园外卖平台9 小时前
校园外卖平台选模板还是定制:架构、数据流与验收清单
大数据·架构·外卖系统·本地生活·微订
ZhengEnCi11 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
Decay__12 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
华普微HOPERF14 小时前
Matter协议架构详解:数据模型与交互模型深度解析
microsoft·架构·交互
4SAPI16 小时前
多国产模型混合调度与企业级治理生产选型指南:4SAPI、硅基流动与 OpenRouter 的架构权衡
大数据·人工智能·架构·php
QAQmmttyyy17 小时前
FlyAgent 开发实录 ⑪|消息流即真相源
架构
FPGA小迷弟17 小时前
FPGA 与无人机:从飞控实时性到智能载荷的硬件加速实践
人工智能·ai·fpga开发·架构·无人机·ai编程
OCR_1337162127517 小时前
从 “外设“ 到 “算力节点“:护照阅读器的轻上位机架构,正在改写集成范式
架构