【发布时间】:2014-03-07 19:45:56
【问题描述】:
我正在 NEON 中编写一个用于进行颜色交换的图像处理子程序,即,我从一个数组中顺序加载 R、G、B 通道,并根据某些配置,置换其中的一些通道。
最多有 6 个排列
(RGB) -> { (RGB),(RBG),(GRB),(GBR),(BRG),(BGR) }
最有效的方法是为每种情况使用一个单独的子程序和相应的 VSWP 指令。由于子程序会做其他几件事,我宁愿把所有东西都放在一个子程序中,即使效率不高,
还阅读了条件执行和分支是不可取的。所以,如果我想把它放在一个带有无分支代码的块中,我唯一想到的是
New_R = a(0)*R+a(1)*G+a(2)*B
New_G = a(3)*R+a(4)*G+a(5)*B
New_B = a(6)*R+a(7)*G+a(8)*B
每行和每列中只有一个a(i)每次=1,其余为=0
问题:有什么更聪明的方法吗?考虑到它必须被编码为 NEON?
【问题讨论】:
标签: performance optimization assembly arm neon