मैं एक छोटे एम्बेडेड सिस्टम पर छवि डेटा पर 5-क्रॉस माध्य फ़िल्टर की भिन्नता का उपयोग करता हूं, अर्थात
x
x x x
x
एल्गोरिथ्म वास्तव में सरल है: 5 अहस्ताक्षरित पूर्णांक मान पढ़ें, उच्चतम 2 प्राप्त करें, उन पर कुछ गणना करें और अहस्ताक्षरित पूर्णांक परिणाम लिखें।
क्या अच्छा है कि 5 पूर्णांक इनपुट मान सभी 0-20 की सीमा में हैं। परिकलित पूर्णांक मान 0-20 श्रेणी में भी हैं!
प्रोफाइलिंग के माध्यम से, मुझे पता चला है कि सबसे बड़ी दो संख्याओं को प्राप्त करना अड़चन है, इसलिए मैं इस भाग को गति देना चाहता हूं। इस चयन को करने का सबसे तेज़ तरीका क्या है?
वर्तमान एल्गोरिथ्म 5 संख्याओं और एक HW- समर्थित CLZ फ़ंक्शन द्वारा दी गई स्थिति में 1 के साथ 32 बिट मास्क का उपयोग करता है।
मुझे कहना चाहिए कि सीपीयू एक मालिकाना है, मेरी कंपनी के बाहर उपलब्ध नहीं है। मेरा संकलक 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
मैट्रिक्स पंक्ति-दर-पंक्ति के माध्यम से चलता है?