चल बिंदु चर का एक बड़ा (~ 100 000) सरणी है, और वहाँ एक सीमा (भी बिंदु चल) है।कुशल चल बिन्दु तुलना (Cortex-ए 8)
समस्या यह है कि मुझे प्रत्येक एक चर को सरणी से सरणी से तुलना करना है, लेकिन नीयन झंडे स्थानांतरण वास्तव में एक लंबा समय लेता है (~ 20 चक्र एक प्रोफाइलर के अनुसार)।
क्या इन मूल्यों की तुलना करने का कोई प्रभावी तरीका है?
नोट: के रूप में पूर्णांकन त्रुटि कोई फर्क नहीं पड़ता, मैं निम्नलिखित की कोशिश की:
float arr[10000];
float threshold;
....
int a = arr[20]; // e.g.
int t = threshold;
if (t > a) {....}
लेकिन इस मामले में मैं निम्नलिखित प्रोसेसर आदेश अनुक्रम हो रही: रूपांतरण होता है
vldr.32 s0, [r0]
vcvt.s32.f32 s0, s0
vmov r0, s0 <--- takes 20 cycles as `vmrs APSR_nzcv, fpscr` in case of
cmp r0, r1 floating point comparison
नीयन में, कोई फर्क नहीं पड़ता कि मैं पूर्णांक की तुलना करता हूं, वर्णित तरीके या फ्लोट द्वारा।
codereview.stackexchange.com पर लोगों को भी कुछ कहना पड़ सकता है। – PlasmaHH
आपका कोड आपकी समस्या कथन के साथ असंगत है - डेटा फ़्लोट है लेकिन आप थ्रेसहोल्ड को int के रूप में दिखाते हैं - आपने प्रत्येक फ्लोट डेटा वैल्यू को int में क्यों डाला - क्यों? यदि आप डेटा फ्लोट करते हैं तो थ्रेसहोल्ड फ्लोट होना चाहिए और आपको फ्लोट तुलना करना चाहिए (यानी कोई अंतर-फ्लोट रूपांतरण नहीं)। साथ ही, आप उन मानों के साथ क्या करने की योजना बना रहे हैं जो थ्रेसहोल्ड से अधिक (या उससे कम) हैं (यह निर्धारित करेगा कि नीयन उचित है या नहीं)? –
कई लोग एआरएम से धीमे होने के लिए एनईओएन को कुचलने के बिना जानते हैं कि क्या बचाना है और सिम को सही ढंग से प्रोग्राम कैसे करें। आप जो चाहते हैं उसके आधार पर, यह या तो शुरू करने के लिए सिम संभव नहीं है, या आप नहीं जानते कि कैसे एनईओएन के साथ-साथ संभालना है। –