在sparc架构中,有一个ASI(地址空间指示符)被传递给加载、存储指令,因此如果ASI为0x20,则像IO访问一样绕过缓存。即使内存范围在页表中设置为可缓存,缓存也会被绕过。这有时非常方便,例如使用变量在核心之间同步时等。
aarch64架构中有类似的东西吗?我查看了指令内容,但在加载/存储指令列表中找不到任何内容。
ARMv8没有这样的指令。加载/存储指令访问内存取决于映射属性。
提及LDNP
and STNP
指令无意绕过缓存。
加载/存储非时间对指令提供提示向内存系统表明访问是非临时的或流式的,并且在不久的将来不太可能重复。这意味着不需要数据缓存。但是,根据内存类型,指令可能允许预加载内存读取和内存写入
被聚集以加速批量内存传输。 (Arm架构参考手册)
所以仍然可能涉及缓存。
例如,在 Cortex-A53 TRM 之上,明确指出将涉及缓存。
非时间载荷
由非临时加载指令 (LDNP) 发出的缓存请求是分配给L2缓存仅有的。分配政策使得该线路有可能比其他线路更早更换。
对于核心同步,您可以查看 ARMv8 手册以了解锁实现(又名原子)和自旋锁。
作为旁注,请检查您的芯片文档。许多现代芯片都具有特殊的硬件功能,可以提供基于硬件的缓存一致性接口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)