前言
在前面的文章中我们介绍了NEON的基础,NEON技术的全景,指令及NEON intrinsic指令,相信大家能通过前面的学习写一些简单的NEON程序。但要想写好一个性能高的NEON程序,远不止你以为的那么简单,所以接下来我会给大家在NEON编程中一些优化技巧,助力程序性能起飞。
数据处理
最经典的处理图像的RGB数据,24-bit的RGB图画,像素在内存里的排列布局是R, G, B, R, G, B...,假如你想做一个简单的图像数据处理,比如把R和B通道交流,你该怎么高效的运用NEON协处理器呢?
首要从存储空间线性加载RGB数据到D寄存器,然后交流R和B数据。 可是这种线性加载的数据进行R和B通道的数据交流十分费事,需求首要掩码mask,然后移位并兼并掩码数据。这种杂乱的运算明显并不高效。线性加载RGB数据 ,如下图:
NEON本身已支持多种数据结构的加载和存储指令来处理这种状况,这些指令能把数据从存储区加载还能把这些值分隔存储到不同的寄存器中,你能够运用VLD3加载来把RGB数据分隔存储。运用结构化的加载指令加载RGB数据,如下图:
然后运用VLD3分隔加载的数据就能便利的运用指令(VSWP d0, d2)来进行R和B通道的交流了,然