【发布时间】:2014-06-18 16:23:18
【问题描述】:
我的任务是评估各种 ARM 处理器(基准测试),特别是片上系统 (SOC)。一些 SOC 有很多数据缓存,而另一些则很少。因此,我希望我的程序阻止数据缓存。
我编写了一个walking 1 测试,它访问核心之外的内存,但在SOC 上。我将在我们目前的处理器上运行它,它只有很少的数据缓存,并在具有大量数据缓存的 Cortex M3 处理器上运行。
我专注于在处理器外部获取内存的持续时间。如果我将 Walking 1 的内存大小设置为大于数据缓存的大小,则运行测试会及时“取幂”。例如,对于较小的内存,测试在几分钟内运行,对于较大的内存,测试需要数小时。
问题:有没有一种习语可以用来防止处理器将整个数组加载到处理器的数据缓存中?
(注意:这被标记为 C 和C++,因为我可以在两种语言之间进行选择。如果 C 没有成语,但 C++ 有,那么我会先尝试 C++。)
- 平台:各种嵌入式或片上系统(开发/ 评估板),无操作系统。
- 处理器:ARM Cortex 系列,芯片上有不同的外设 以及不同的数据缓存大小。
- 编译器:IAR Embedded Workbench、GNU C、GNU C++(用于 各种电路板供应商的背景)。
【问题讨论】:
-
如果您关注内存带宽,那么What is the fastest way to copy memory on a Cortex-A8? 可能会有所帮助。事实上,选择性地禁用缓存可能是不公平的。一些内存(DDR SDRAM)非常擅长写入大量数据(例如 8*16 位)。如果您强制使用较小的大小,则可能会使内存传输效率低下。即,某些内存类型与缓存一起工作得更好,因此禁用它们可能是不公平的。我至少会在禁用缓存的情况下测试不同大小的读/写。
-
您的“当前处理器”也是 M 级的,还是较旧的架构之一?请注意,M3 和朋友没有架构缓存,因此对外部缓存的任何控制都可能是特定于 SoC 的,并且通常与 A 类/传统架构有很大不同(例如,内存映射系统寄存器而不是 CP15)
-
我认为你需要重新阅读 arm 文档,了解 arch 有什么,其次,如果你不想使用数据缓存,那么就不要打开它......还要了解每个的性质您正在使用的芯片与您正在与之交谈的公羊的几何形状和速度有关
-
@artlessnoise:我试图在我们目前的 ARM7TDMI 和一些 Cortex 版本之间建立一个公平的基准。我想通过升级向管理层展示性能优势。
-
@Notlikethat:我们目前的处理器是 NXP79525,一个包含 ARM7TDMI 的 SOC。我们正在处理数据样本并需要更多带宽,因此需要与所有 Cortex 进行比较。也许数据缓存应该作为基准测试的一部分启用,仍然不确定。
标签: c++ c arm benchmarking cpu-cache