您可以使用程序集直接访问缓存吗?

问题描述 投票:0回答:1

缓存是提高效率的核心。

我知道缓存通常是自动发生的。

但是,我想自己控制缓存的使用,因为我认为我可以比一些不知道确切程序的启发式方法做得更好。

因此,我需要汇编指令才能直接在高速缓存存储单元之间移动。

喜欢:

movL1 address content

我知道有一些指令可以给“缓存系统”提示,但是我不确定是否足够,因为这些提示可能会被忽略,或者它们可能不足以表达通过/从缓存顺序开始。

有没有允许完全缓存控制的汇编程序?

旁注:为什么我想改善缓存:

假设一个具有1个寄存器和一个包含2个单元的缓存的假想CPU。

请考虑以下两个程序:

((x,y,z,a是存储单元)

“ START”“将1移动到x”“将2移动到y”“将3移到z”“将4移动到a”“将z移到x”“将y移至x”“ END”

“ START”“将1移动到x”“将2移动到y”“将3移到z”“将4移动到a”“将a移动到x”“将y移至x”“ END”

在第一种情况下,您将使用寄存器和缓存来存储x,y,z(a仅写入一次)在第二种情况下,您将为a,x,y使用寄存器和缓存(z仅写入一次)

如果CPU进行缓存,它根本无法提前决定所面临的以上两种情况。

[必须确定每个存储单元x,y,z,a在知道执行的程序是1还是2之前是否应该缓存其内容,因为这两个程序都是相同的。

performance assembly caching cpu-architecture cpu-cache
1个回答
1
投票

对缓存sram的直接访问与指令集无关,如果您具有访问权限,则可以访问并且可以访问它,但是由芯片/系统设计者来实现。它可能像地址空间一样简单,也可能是一些间接的外围设备,例如访问,您在其中访问控制寄存器,然后逻辑为您访问高速缓存中的该项。

这并不意味着所有ARM处理器都可以以相同的方式访问其缓存。 (arm是一家IP公司,而不是一家芯片公司),但这可能意味着您不能在任何现有x86上做到这一点。我知道产品本身就是我可以参与的一部分,因为我们在那些SRAM上具有ECC,并且具有在启用监视器之前从软件初始化ram的访问方法。您可以通过常规访问来使用某些sram,但是例如,我们使用的臂是通过奇偶校验而不是ECC实现的,因此我们在SRAM上添加了ECC,并为init添加了侧门访问,因为尝试通过常规访问缓存访问并获得100%的覆盖率是PITA,并且最终没有正确的解决方案。

还研究了可将dram控制器高速缓存用作片上ram直接访问的产品,由软件决定如何将其用作L2缓存或片上ram。

所以它已经并且可以做到,这些都是孤立的示例。作为筛选零件的一部分,有运行的mbist测试,但是通常是通过jtag驱动的,并且不能直接用于处理器和/或ram nt,有时mbist可以由软件启动和检查,但ram cant,并且在某些实现中,设计人员做到了这一点,以便软件可以触摸所有内容,包括标签ram。

这导致您认为自己可以做得比硬件更好,并且想要移动东西,那么您也可能还需要访问标记ram,以便您可以在需要缓存行的地方跟踪/驱动,其状态等

基于此评论:

抱歉,我是组装的菜鸟,请您简单说明一下吗?什么是CPU“模式”?那HBM是什么?如何设置CPU模式?什么是NDA? – KGM

两件事,您不能做得比缓存更好,还有两件事您还没有准备好执行此任务。

即使有经验,您通常也不能比缓存做得更好,如果您要操纵缓存,您将使用与如何编写代码,将代码放置在内存中的位置以及使用数据的位置相同的知识。然后逻辑实现可以为您更好地工作。试图重新定位运行时的燃烧指令和周期不会有所帮助。通常,您需要以普通公众无法访问的级别访问设计。因此,一份NDA(非公开协议),即使在那时,您也极不可能获得所需的信息和/或获得的收益微乎其微,可能仅适用于一种实现方式,而不适用于整个产品系列,等等。

更有趣的是,您认为自己可以做得更好,怎么认为自己可以做得更好? (还要了解,我们许多人都可能使任何高速缓存实现失败,并且运行速度比那里没有的要慢,即使您创建了更好的更新缓存,根据定义,它也只能在某些情况下提高性能)。

© www.soinside.com 2019 - 2024. All rights reserved.