Saya menggunakan variasi filter median 5-silang pada data gambar pada sistem tertanam kecil, yaitu
x
x x x
x
Algoritma ini sangat sederhana: baca 5 nilai integer tanpa tanda, dapatkan 2 tertinggi, lakukan beberapa perhitungan pada nilai tersebut dan tulis kembali hasil integer tanpa tanda.
Yang menyenangkan adalah bahwa nilai input 5 integer semuanya berada dalam kisaran 0-20. Nilai bilangan bulat yang dihitung juga berada dalam kisaran 0-20!
Melalui profiling, saya telah menemukan bahwa mendapatkan dua angka terbesar adalah hambatan sehingga saya ingin mempercepat bagian ini. Apa cara tercepat untuk melakukan seleksi ini?
Algoritma saat ini menggunakan topeng 32 bit dengan 1 di posisi yang diberikan oleh 5 angka dan fungsi CLZ yang didukung HW.
Saya harus mengatakan bahwa CPU itu adalah milik perusahaan, tidak tersedia di luar perusahaan saya. Kompiler saya adalah GCC tetapi dibuat khusus untuk CPU ini.
Saya telah mencoba mencari tahu apakah saya bisa menggunakan tabel pencarian tetapi saya gagal menghasilkan kunci yang bisa saya gunakan.
Saya memiliki kombinasi untuk input tetapi pesanan tidak penting, yaitu sama dengan .[5,0,0,0,5]
[5,5,0,0,0]
Kebetulan fungsi hash di bawah ini menghasilkan hash sempurna tanpa tabrakan!
def hash(x):
h = 0
for i in x:
h = 33*h+i
return h
Tapi hash sangat besar dan tidak ada cukup memori untuk menggunakannya.
Apakah ada algoritma yang lebih baik yang bisa saya gunakan? Apakah mungkin untuk menyelesaikan masalah saya menggunakan tabel pencarian dan menghasilkan kunci?
hash
sudah melakukan lebih banyak operasi. Apakah panggilan selanjutnya ke metode terkait, misalnya apakah pusatx
bergerak melalui matriks baris-demi-baris?