Assembly ARM组件中缓存刷新的有效方法

Assembly ARM组件中缓存刷新的有效方法,assembly,arm,cpu-cache,Assembly,Arm,Cpu Cache,我必须用ARM汇编语言刷新4MB的缓存,我们有什么有效的方法 我想分配4MB内存,写一些随机数据,然后读回 我正在实现一个测试主内存的工具。为了确保我的工具只测试主内存,我必须刷新缓存内存 我正在使用Cortex A8处理器,我想刷新所有L1、L2、L3缓存从字面上看,刷新CPU缓存的最有效方法是使用set/way清除+无效-请参见示例,但请注意,要获得最大性能,尤其是如果缓存地址是非随机的 对于外部缓存,即L3,您需要自行决定,并且需要咨询TRM以了解您的任何实现 但是,由于您编写的是内存测试

我必须用ARM汇编语言刷新4MB的缓存,我们有什么有效的方法

我想分配4MB内存,写一些随机数据,然后读回

我正在实现一个测试主内存的工具。为了确保我的工具只测试主内存,我必须刷新缓存内存


我正在使用Cortex A8处理器,我想刷新所有L1、L2、L3缓存

从字面上看,刷新CPU缓存的最有效方法是使用set/way清除+无效-请参见示例,但请注意,要获得最大性能,尤其是如果缓存地址是非随机的

对于外部缓存,即L3,您需要自行决定,并且需要咨询TRM以了解您的任何实现


但是,由于您编写的是内存测试仪而不是操作系统,因此更明智的方法是首先关闭MMU和数据缓存,并完全避免问题。

我希望使用该方法。我以为是分配4MB内存,写一些随机数据,然后回读。我不知道你想达到什么目的。您是在程序中实现缓存还是在谈论CPU缓存?您正在“分配”什么内存?哪个缓存?哪种CPU型号?您的代码将以哪种模式运行?你看过CP15了吗?@tangrs我正在实现一个测试主内存的工具。为了确保我的工具只测试主内存,我必须刷新缓存内存。是的,如果你能得到物理地址空间,你可以线性覆盖,从一个基于最大缓存大小的对齐地址开始,并写入所有位置,它会将缓存中的任何内容推出。问题当然是您正在运行代码来执行此操作,而且如果您在一个操作系统上,它可能无法工作,那么无论如何,您都不应该在某个操作系统上运行时执行内存测试,在这种情况下,只需关闭缓存并执行内存测试。汇编与此任务完全无关,C或asm的答案都是一样的