小さな組み込みシステムの画像データに5クロスメディアンフィルターのバリエーションを使用します。
x
x x x
x
アルゴリズムは本当にシンプルです。5つの符号なし整数値を読み取り、最高の2を取得し、それらについていくつかの計算を行い、符号なし整数の結果を書き戻します。
5つの整数入力値がすべて0〜20の範囲にあるのはすばらしいことです。計算された整数値も0〜20の範囲です。
プロファイリングを通じて、最大の2つの数値を取得することがボトルネックであることを理解したので、この部分を高速化したいと思います。この選択を実行する最も速い方法は何ですか?
現在のアルゴリズムは、5つの数値とHWがサポートするCLZ関数によって指定された位置に1を持つ32ビットマスクを使用します。
CPUは専有の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
ますか。たとえば、中央は行列を行ごとに移動しますか?