4

我正在尝试改进在 ARM cortex-a8 处理器上运行的图像处理项目。

我正在从内存中访问 8 位灰度图像数据。在我的函数中,现在我正在逐字节访问单个像素值。

我认为通过使用 NEON,我可以通过一次从内存中访问 128/8 = 16 个字节来改进这一点,然后在我的函数中使用它们。但是在运行更改后的版本时,我发现这实际上比逐字节访问要花费更多时间。我认为我使用 NEON 的获取正在成为一个瓶颈,花费的时间比我的计算时间还多。

ARM Cortex-A8 的数据总线大小是多少?在一次内存提取中从内存中访问了多少字节?

4

2 回答 2

3

来自 Cortex A8 TRM:

“您可以将处理器配置为连接到 64 位或 128 位 AXI 互连,从而为系统设计提供灵活性”

NEON 有必要吗,也许您正在将苹果与橙子进行比较?您可以使用 ldrd/strd 或 ldm/stm 代替 ldrb/strb 来获得 64 位传输。ARM/AXI 可以足够智能地向前看并将较小的传输分组为较大的传输,例如两个 32 位传输到一个 64 位。但我不会依赖这一点。我只提到它以防您发现通过更改为 ldr/str 或 ldrd/strd 您不会获得任何性能提升。

您是否隔离(无数据处理)读取或写入循环并尝试字节、字和双字?可能是从字中提取字节的代码压倒了总线上的节省。

这是什么类型的内存?这是片上还是片外之类的东西,这个内存相对于 AXI (ARM) 时钟速度是多少?

您是否为此区域启用了数据缓存?如果是这样,它可能是一个静音点,第一个字节读取将使用最佳数据总线大小进行缓存线填充,该缓存线中的后续读取将不会到达 AXI 总线,更不用说目标内存了。同样,写入应该只到达缓存,然后以更宽的总线优化大小​​到达目标。取决于缓存/写入缓冲区的配置方式。

于 2010-11-27T07:33:42.457 回答
0

可能是您遇到管道停顿。如果您想通过 Neon 读取数据,那么在您可以在 CPU 内核中使用该数据之前会有一些延迟。

于 2010-11-27T08:04:37.677 回答