《计算机系统:系统架构与操作系统的高度集成》——2.5 高级数据抽象

简介:

本节书摘来自华章计算机《计算机系统:系统架构与操作系统的高度集成》一书中的第2章,第2.5节,作者:(美)拉姆阿堪德兰(Ramachandran, U.)(美)莱希(Leahy, W. D.)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.5 高级数据抽象

截至目前,我们已经讨论了高级语言中的简单变量,例如char、int和float。我们将这些变量称为标量。这些变量需要的存储空间都是先验的。编译器可选择将标量变量放在寄存器或者内存中。然而,对于高级语言通常支持的数据抽象,如数组和结构,编译器只能把它们分配在内存中,除此之外别无选择。回想一下,由于可寻址性的问题,处理器中寄存器的数量通常只有十来个。所以,这些数据结构庞大的体积排除了将它们分配在寄存器中的可能。

2.5.1 结构
高级语言中的结构数据类型可以通过基址加偏移量的寻址模式来提供支持。
考虑如下C语言结构:
image

如果这个结构的基地址在某个寄存器rb中,那么访问结构中的任意字段都可以通过提供一个相对于基址寄存器的偏移量来完成。编译器知道每个数据类型需要多少空间,也知道每个变量在内存中的对齐情况。
2.5.2 数组
考虑如下的声明:
image

这里的a所指的并非是单个变量,而是变量a[0],a[1]等组成的一个数组。由于这个原因,数组也常被称为向量。这种变量需求的空间在编译的时候可能知道也可能不知道,这取决于高级语言的语义。许多编程语言允许数组在运行时动态地决定大小而不是在编译的时候确定。这意味着,在编译期间编译器不知道数组所需要的存储空间。与之相反的是,标量在编译时是知道所需空间大小的。因此,编译器通常会使用内存来为这些向量变量分配空间。
编译器可能会将变量a在内存中按下图排布:
image

考虑下面这条操作数组的语句:
image

为了编译前面这条语句,假设指令集只允许ALU使用寄存器,那么首先我们需要将a[7]从内存中取出。显然这是可行的,使用我们已经介绍过的基址加偏移量寻址模式:
image

rb初始化为100时,上面这条指令就完成了将a[7]加载到r1中的工作。
一般来说,数组常在循环中使用。在这种情况下,可能有个循环计数器(设为j),它被用来索引数组。考虑下面的指令:
image

在上面的语句中,相对于基址寄存器的偏移量是不固定的。它由循环当前的索引值得到。尽管还可以生成代码来加载a[j],在能够计算出a[7]的有效地址之前还需要额外的指令。所以,一些计算机体系结构提供了一种寻址模式允许有效地址来自两个寄存器内容之和。这被称为基址加索引的寻址模式。
每条新指令和每种新寻址模式给实现增加了复杂性,因此需要非常小心地衡量其中的利弊。这通常由花费/性能分析来完成。例如,为了增加基址加索引寻址模式,我们需要问以下几个问题:
1)在程序的执行中,这种寻址模式有多常用?
2)从减少指令条数的角度来说,基址加索引寻址模式相对于基址加偏移量寻址模式有什么优势?
3)从执行时间的角度来说,使用基址加索引寻址模式的加载指令与使用基址加偏移量寻址模式相比需要付出什么代价?
4)为了支持基址加索引寻址模式,需要什么额外的硬件?
对上面四个问题的回答将给我们提供一个定量的标准来判断是否应该将基址加索引寻址模式包含进去。
我们在后面讨论处理器实现和性能影响时还会回头考虑如何评价向处理器中添加新指令和新寻址模式。

目录
打赏
0
0
0
0
1412
分享
相关文章
千万级数据秒级响应!碧桂园基于 EMR Serverless StarRocks 升级存算分离架构实践
碧桂园服务通过引入 EMR Serverless StarRocks 存算分离架构,解决了海量数据处理中的资源利用率低、并发能力不足等问题,显著降低了硬件和运维成本。实时查询性能提升8倍,查询出错率减少30倍,集群数据 SLA 达99.99%。此次技术升级不仅优化了用户体验,还结合AI打造了“一看”和“—问”智能场景助力精准决策与风险预测。
322 69
基于Transformer架构的时间序列数据去噪技术研究
本文介绍了一种基于Transformer架构的时间序列去噪模型。通过生成合成数据训练,模型在不同噪声条件下展现出强去噪能力。文章详细解析了Transformer的输入嵌入、位置编码、自注意力机制及前馈网络等关键组件,并分析实验结果与注意力权重分布。研究为特定任务的模型优化和专业去噪模型开发奠定了基础。
225 14
基于Transformer架构的时间序列数据去噪技术研究
十万订单每秒热点数据架构优化实践深度解析
【11月更文挑战第20天】随着互联网技术的飞速发展,电子商务平台在高峰时段需要处理海量订单,这对系统的性能、稳定性和扩展性提出了极高的要求。尤其是在“双十一”、“618”等大型促销活动中,每秒需要处理数万甚至数十万笔订单,这对系统的热点数据处理能力构成了严峻挑战。本文将深入探讨如何优化架构以应对每秒十万订单级别的热点数据处理,从历史背景、功能点、业务场景、底层原理以及使用Java模拟示例等多个维度进行剖析。
183 8
Spring AI 智能体通过 MCP 集成本地文件数据
MCP 作为一款开放协议,直接规范了应用程序如何向 LLM 提供上下文。MCP 就像是面向 AI 应用程序的 USB-C 端口,正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方式一样,MCP 提供了一个将 AI 模型连接到不同数据源和工具的标准化方法。
2752 66
新闻聚合项目:多源异构数据的采集与存储架构
本文探讨了新闻聚合项目中数据采集的技术挑战与解决方案,指出单纯依赖抓取技术存在局限性。通过代理IP、Cookie和User-Agent的精细设置,可有效提高采集策略;但多源异构数据的清洗与存储同样关键,需结合智能化算法处理语义差异。正反方围绕技术手段的有效性和局限性展开讨论,最终强调综合运用代理技术与智能数据处理的重要性。未来,随着机器学习和自然语言处理的发展,新闻聚合将实现更高效的热点捕捉与信息传播。附带的代码示例展示了如何从多个中文新闻网站抓取数据并统计热点关键词。
193 2
新闻聚合项目:多源异构数据的采集与存储架构
SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动
通过详细的步骤和示例代码,您可以在 SpringBoot 项目中成功集成 Flink CDC,并实时追踪 MySQL 数据库的变动。
1109 43
AllData数据中台架构全览:数据时代的智慧中枢
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
AllData数据中台架构全览:数据时代的智慧中枢

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问