我在小型嵌入式系统上对图像数据使用5交叉中值滤波器,即
x
x x x
x
该算法非常简单:读取5个无符号整数值,获得最大的2个值,对这些值进行一些计算,然后写回无符号整数结果。
好的是5个整数输入值都在0-20的范围内。计算出的整数值也在0-20范围内!
通过分析,我发现获得最大的两个数字是瓶颈,因此我想加快这一步。什么是执行此选择最快的方法?
当前算法使用由5个数字指定的位置中的1位的32位掩码和HW支持的CLZ函数。
我应该说CPU是专有的,在我公司之外无法使用。我的编译器是GCC,但为此CPU量身定制。
我试图弄清楚是否可以使用查找表,但未能生成可以使用的密钥。
我有输入组合,但顺序并不重要,即与相同。[5,0,0,0,5]
[5,5,0,0,0]
碰巧下面的哈希函数会产生完美的哈希而不会发生冲突!
def hash(x):
h = 0
for i in x:
h = 33*h+i
return h
但是散列是巨大的,并且根本没有足够的内存来使用它。
我可以使用更好的算法吗?是否可以使用查找表并生成密钥来解决我的问题?
hash
已经执行了更多操作。对该方法的后续调用是否相关,例如中心是否x
逐行穿过矩阵?