首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算机体系结构与缓存块大小的关系

计算机体系结构与缓存块大小的关系
EN

Stack Overflow用户
提问于 2021-08-25 07:05:11
回答 1查看 300关注 0票数 0

假设内存是字节可寻址的,而缓存块大小是4字节。因此,在一个缓存访问中,访问一个块。这是否意味着计算机架构是32位。我的问题是,如果给出了缓存块大小,您可以对计算机体系结构进行什么派生?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-25 13:31:14

不,缓存块大小通常是大于寄存器宽度的,以利用邻近的全寄存器宽度负载/存储之间的空间局部性,这是典型的。将缓存作为细粒度的4字节块与实际数据所需的存储量相比,要花费大量的开销(标记等)。例如,20位标签位,再加上每32位缓存行的“脏”和其他MESI状态,可能意味着32 kiB (可用空间)缓存更需要56 kiB的原始SRAM存储,而这没有考虑ECC或奇偶校验。

如果一个CPU有一个浮点单元,它通常可以完成64位负载/存储,即使整数寄存器宽度只有32位。(或者使用SIMD,或加载对/存储对指令的范围更广。)

在现代系统中,典型的实际缓存大小是64字节,而以前的CPU(如奔腾III )上是32字节。64字节是DDR SDRAM突发大小,因此它是片外存储器访问大小的一个很好的选择。(不过,最近使用AVX-512 SIMD的Intel系统可以用一条指令加载/存储整个64字节(512位)高速缓存线。SIMD矢量宽度已赶上缓存线的大小。但是整数访问仍然最多8字节宽。)

缓存块大小与体系结构比特性之间没有任何关系。您肯定希望块大小至少与正常的加载/存储一样宽,但是可以构建具有32位缓存块的64位计算机。这意味着64位负载需要两个缓存访问来完成,所以这将是一个非常糟糕的主意,除非您通常的工作负载包括在寄存器中使用64位地址来访问分散的32位值,并且您希望对此进行优化,而不考虑其他任何事情的效率。

大多数64位ISAs可以同样有效地处理32位或64位数据。有些,特别是x86-64,甚至没有你所称的“字号”。在x86-64上,没有一个本地访问大小是最有效的,指令是一个未对齐的字节流,不像带有对齐32位指令字的ISAs,比如RISC或AArch64。

因此,如果您知道缓存块大小为32位,那么很好地猜测寄存器宽度最多为32位,但可能是8位或16位。(或者4位,甚至可能是6位什么的?)在小于32位的情况下,对于历史CPU来说,它常常成为一个问题,即比特意味着什么: ALU、寄存器、总线、固定宽度指令?请注意,在答案的前面部分,我只是讨论了寄存器宽度,而不是“32位CPU”。)

如果这是一个真正的商业设计,而不是计算机科学的例子,8位的机器将是最有可能的;一台普通的32位机器将使用更大的缓存块,但你可以合理地想象一台一次只能加载一个字节的机器上更细的粒度。(当然,作为一台8位的机器并不意味着这一限制;您可以有一个负载对指令,或者FP寄存器,允许32位或64位的加载/存储。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68918291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档