【发布时间】:2013-12-18 16:06:25
【问题描述】:
我编写了这个非常简单的 NEON 实现来从 RGBA 转换为 RGB。它可以工作,但我想知道是否还有其他方法可以进一步提高性能。
我尝试使用预取大小并进一步展开循环,但性能并没有太大变化。顺便说一句,在预取维度方面是否有任何经验法则?我在网上找不到任何有用的东西。此外,在“ARMv8 指令集概述”中,我看到还有一个用于存储的预取,这有什么用?
目前我在 iPhone5s 上转换 1280x720 图像大约需要 1.7 毫秒。
// unsigned int * rgba2rgb_neon(unsigned int * pDst, unsigned int * pSrc, unsigned int count);
_rgba2rgb_neon:
cmp w2, #0x7
b.gt loop
mov w0, #0
ret
loop:
prfm pldl1strm, [w1, #64]
ld4.8b {v0, v1, v2, v3}, [w1], #32
ld4.8b {v4, v5, v6, v7}, [w1], #32
prfm pldl1strm, [w1, #64]
st3.8b {v0, v1, v2}, [w0], #24
st3.8b {v4, v5, v6}, [w0], #24
subs w2, w2, #16
b.gt loop
done:
ret
【问题讨论】:
标签: iphone assembly arm neon arm64