跳转到内容

微处理器设计/代码密度

来自维基教科书,开放的书籍,开放的世界

在早期的计算机中,程序内存非常昂贵。程序员花费大量时间最小化程序的大小,以使其适应有限的可用内存。因此,执行特定任务所需的所有指令的组合大小,即代码密度,是任何指令集的重要特征。[1][2] 即使在今天,绝大多数执行的指令是否适合于 指令缓存 也会有很大区别,指令缓存比主内存小很多个数量级。

一些作者使用“字节效率”、“代码效率”、“操作长度缩减”等术语来指代与代码密度基本相同的概念。[3]

在 CPU 开发的早期几十年里,人们逐渐向指令集中添加越来越多的“强大”指令,从而减少了实现常见任务所需的指令总数,但增加了存储每个指令所需的平均 位数——在许多情况下,这会提高整体代码密度。在开发了片上指令缓存之后,RISC 革命是由那些牺牲代码密度并消除复杂、"强大"指令以简化和加速 CPU 实现并提高其他 CPU 性能指标的人领导的。最近,一些人一直在尝试使用最小指令集计算机 (MISC),使每个指令的位数更短,以尝试提高代码密度。

对于具有可变长度指令的处理器,如果常用指令很短,即使这迫使其他(很少使用)指令变长,也会有助于代码密度。

对于具有固定宽度指令的处理器,选择 16 位宽指令似乎比 8 位或 32 位宽指令提供略微更好的代码密度。[4]

人们普遍认为,32 位微控制器的代码大小(代码密度较差)远远大于 8 位微控制器。然而,在许多情况下,主要使用 16 位宽指令的 32 位微控制器的代码大小(代码密度更好)比主要使用 14 位宽指令的 8 位微控制器或主要使用 16 位宽指令的 16 位微控制器的代码大小更小。[5][6]


随着典型 RAM 大小的增加,以及在开发了足够大的单独指令缓存以容纳内部循环和常用子例程之后(因此代码密度对 CPU 性能指标 的影响很小),[2] 以及在发明了嵌套子例程、线程代码和其他与指令集无关的可执行压缩技术之后,[7] 代码密度已成为 指令集架构 中不太重要的部分。


Clipboard

待办
在这里简要介绍一下 ARM Thumb 指令



Clipboard

待办
在这里简要介绍一下 EEMBC CoreMark 代码大小基准



Clipboard

待办
在这里简要介绍一下 GCC 代码大小基准环境 (CsiBE)


许多指令集专门设计为具有高代码密度。[8][9][10][11][12][13][14][15]

参考文献

[编辑 | 编辑源代码]
  1. 维基百科:代码密度
  2. a b Margarita Esponda and Ra'ul Rojas. "RISC 概念 - 实现调查"。第 2 节:“围绕 RISC 概念的困惑”。
  3. Terry Ritter and Joel Boney. "BYTE 6809 文章(1979 年 1 月至 2 月)"
  4. "似乎 16 位 ISA 某种程度上达到了最佳代码密度的“最佳点”,也许是因为地址也是 16 位宽的,并且在单个指令中处理。相比之下,8 位机需要多条指令来处理 16 位地址。"——"计算机世界中的昆虫" 作者 Miro Samek 2009 年。
  5. Joseph Yiu, Andrew Frame. 草案 "32 位微控制器代码大小分析"
  6. "LCP11xx 的代码密度"
  7. 数据压缩/可执行压缩
  8. "用于高性能和低功耗 8 位处理的 AVR 微控制器"。引用:“... AVR 指令集和 CPU 设计针对代码大小最小化和执行速度最大化。这... ... 高代码密度... 和低功耗... 仍然引领行业。”
  9. 维基百科:AVR32。引用:“与 AVR 8 位微控制器架构一样,AVR32 旨在实现每时钟周期极高的代码密度和性能。”
  10. "AVR32 架构文档"。引用:“为了实现高代码密度,指令格式很灵活,既提供长度为 16 位的紧凑指令,也提供长度为 32 位的扩展指令。... 紧凑指令和扩展指令可以在指令流中自由混合。”
  11. "获得比 8/16 位 MCU 更好的代码密度:NXP LPC1100 Cortex M0"。(参见第 17 页)... 也提到了“CoreMark”代码大小基准。
  12. "680x0 系列和 ColdFire 之间的差异"。引用:“像 PowerPC 这样的标准 RISC 处理器以牺牲代码密度为代价来实现高性能,部分原因是所有指令的宽度都相同(通常为 4 字节),以及... ... ColdFire 架构——飞思卡尔半导体将其描述为“可变长度 RISC”——旨在分享 RISC 的许多速度优势,而不损失 680x0 系列的代码密度优势。与大多数现代处理器架构一样,它针对用 C 或 C++ 编写的代码进行了优化... 为了规范指令流,所有 ColdFire 指令的宽度均为 2、4 或 6 字节;... ”
  13. "全新的 32 位 RISC 内核:XAP3 ASIC 处理器通过极高的代码密度、低功耗和软件灵活性释放嵌入式系统行业" 引用:“XAP3... 实现了非凡的代码密度,剑桥咨询公司估计,这可能会节省高达 30% 的内存使用量。”
  14. "32 位 RISC 内核 - 具有免版税许可证"。引用:“XAP3... 实现了非凡的代码密度,剑桥咨询公司估计,这可能会节省高达 30% 的内存使用量。”
  15. "ChipX 推出具有业界领先代码密度的可综合 32 位 CPU,适用于嵌入式和消费类应用"。2008 年。
华夏公益教科书