gpt4 book ai didi

arm - 优化不同阵列的 ARM 缓存使用

转载 作者:行者123 更新时间:2023-12-04 16:02:44 27 4
gpt4 key购买 nike

我想在 ARM Cortex A8 处理器上移植一小段代码。 L1 缓存和 L2 缓存都非常有限。我的程序中有 3 个数组。其中两个是顺序访问的(大小> 数组 A:6MB 和数组 B:3MB),第三个数组的访问模式(大小> 数组 C:3MB)是不可预测的。虽然计算不是很严格,但访问数组 C 存在巨大的缓存未命中。我认为的一种解决方案是为数组 C 分配更多的缓存 (L2) 空间,为数组 A 和 B 分配更少的空间。但我不能找到任何方法来实现这一目标。我浏览了 ARM 的预加载引擎,但找不到任何有用的东西。

最佳答案

拆分缓存并将每个数组分配到它的不同部分是一个好主意。

不幸的是,这是不可能的。 CortexA8 的缓存并不是那么灵活。旧的 StrongArm 有一个二级缓存,正是为了这个 split 目的,但它不再可用了。我们有 L1 和 L2 缓存代替(恕我直言,总体上是一个很好的变化。)

但是,您可以做一件事:

CortexA8 的 NEON SIMD 单元比通用处理单元落后大约 10 个处理器周期。通过巧妙的编程,您可以从通用单元发出缓存预取,但通过 NEON 进行访问。两个管道之间的延迟为缓存提供了一些时间来执行预取,因此您的平均缓存未命中时间会更低。

缺点是,如果您绝不能将计算结果从 NEON 移回 ARM 单元。由于 NEON 滞后,这将导致完整的 CPU 管道刷新。缓存未命中的成本几乎甚至更高。

性能差异可能很大。出乎意料的是,我预计速度会提高 20% 到 30%。

关于arm - 优化不同阵列的 ARM 缓存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2377222/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com