मैं कॉर्टेक्स-एम आधारित microcontroller पर -127 और 127 के बीच एक मूल्य को क्लैंप करने का प्रयास कर रहा हूं।सी क्या यह शाखा रहित हैक वास्तव में तेज़ है?
मेरे पास दो प्रतिस्पर्धी कार्य हैं, एक सशर्त उपयोग करता है, दूसरा एक शाखा रहित हैक का उपयोग करता है जिसे मैंने here पाया।
// Using conditional statements
int clamp(int val) { return ((val > 127) ? 127 : (val < -127) ? -127 : val); }
// Using branchless hacks
int clamp(int val) {
val -= -127;
val &= (~val) >> 31;
val += -127;
val -= 127;
val &= val >> 31;
val += 127;
return val;
}
अब मैं कुछ मामलों इन तरीकों में से एक अन्य की तुलना में तेजी से हो सकता में जानते हैं, और शिकंजा प्रतिकूल लेकिन सामान्य रूप में इसके लायक है यह रूप में यह वास्तव में मेरे लिए कोई फर्क नहीं पड़ता देखकर शाखा तकनीक का उपयोग करने के लिए जो मैं उपयोग करता हूं, वे दोनों मेरे मामले में ठीक काम करेंगे?
माइक्रोकंट्रोलर पर एक छोटी सी पृष्ठभूमि, यह एक एआरएम आधारित माइक्रोकंट्रोलर है जो 3 एमआईपीएस पर 3 चरण पाइपलाइन, fetch, decode और execute के साथ चल रहा है और ऐसा लगता है कि कुछ प्रकार की शाखा भविष्यवाणी है लेकिन मैं विवरण खोद नहीं पा रहा था।
क्या आपने इसे बेंचमार्क किया था? –
ऐसा लगता है कि कोड संकलित होने पर ऑप्टिमाइज़ेशन बंद थे। –
आप एआरएम पर प्रदर्शन के बारे में परवाह करते हैं, लेकिन आप x86 के लिए जेनरेट एएसएम देख रहे हैं। यह आपको कहीं भी नहीं जा रहा है। – hobbs