我试图改进我的图像处理项目运行在一个手臂皮质-A8处理器。
我正在从内存中访问8位灰度图像数据。在我的函数中,现在我正在访问单个像素值,逐字节。
我认为,通过使用NEON,我可以从内存中一次访问128/8 = 16字节,然后在我的函数中使用它们来改进这一点。但是,在运行修改后的版本时,我发现实际上比逐字节访问要花费更多的时间。我认为我使用霓虹灯的抓取正在成为一个瓶颈,比我的计算时间花费更多的时间。
ARM Cortex-A8的数据总线大小是多少?在一个内存提取中,从内存中访问多少字节?
发布于 2010-11-27 07:33:42
来自Cortex A8 TRM:
“您可以将处理器配置为连接到64位或128位AXI互连,为系统设计提供灵活性”
霓虹灯是必要的吗?也许你在把苹果比作橘子?您可以使用ldrd/strd或ldm/stm来获得64位传输,而不是ldrb/strb。ARM/AXI可以足够聪明地向前看,并将较小的传输分组为更大的传输,例如将两个32位传输转换为一个64位。但我不相信这一点。我只提到如果您发现通过更改为ldr/str或ldrd/strd,您将不会获得任何性能增益。
您是否隔离(没有数据处理)的读或写循环,并尝试字节与单词和双单词?可能是从单词中提取字节的代码压倒了总线上的节省。
这是什么类型的记忆?这是芯片上的还是片外的,类似的东西,这个内存相对于AXI (臂)时钟的速度是多少?
是否为此区域启用了数据缓存?如果是静音点,则第一个字节读取将使用最佳数据总线大小完成缓存行填充,该缓存线内的后续读取不会到达AXI总线,更不用说目标内存了。类似地,写入应该仅限于缓存,然后以更大的总线优化大小输出到目标。取决于缓存/写缓冲区的配置方式。
发布于 2010-11-27 08:04:37
这可能是因为你经历了管道阻塞。如果你想通过Neon阅读,在CPU核心中使用这些数据之前会有一些延迟。
https://stackoverflow.com/questions/4284408
复制相似问题