2012-03-28 8 views
10

जब मैं एक कर्नेल से निकाल प्रदर्शन के अंतिम बिट निचोड़ करने के लिए नीचे हूँ, मैं आम तौर पर लगता है कि बिटवाइज़ ऑपरेटर्स (& और |) के साथ तार्किक ऑपरेटरों (&& और ||) की जगह गिरी बनाता है एक छोटा सा तेजी । यह CUDA विजुअल प्रोफाइलर में कर्नेल समय सारणी को देखकर देखा गया था।CUDA: लॉजिकल ऑपरेटरों की तुलना में कभी-कभी बिटवाई ऑपरेटर क्यों तेज होते हैं?

तो, सीयूडीए में तार्किक ऑपरेटरों की तुलना में बिटवाई ऑपरेटरों तेज क्यों हैं? मुझे यह स्वीकार करना होगा कि वे हमेशा तेज नहीं हैं, लेकिन कई बार वे हैं। मुझे आश्चर्य है कि जादू इस गति को क्या दे सकता है।

अस्वीकरण: मुझे पता है कि लॉजिकल ऑपरेटर शॉर्ट-सर्किट और बिटवाई ऑपरेटर नहीं करते हैं। मुझे अच्छी तरह पता है कि इन ऑपरेटरों का दुरुपयोग कैसे किया जा सकता है जिसके परिणामस्वरूप गलत कोड होता है। मैं इस प्रतिस्थापन का केवल तभी देखभाल करता हूं जब परिणामस्वरूप तर्क समान रहता है, वहां एक गति है और इस प्रकार गतिशीलता ने मुझे मामलों को प्राप्त किया :-)

+0

एक महान अनुकूलन युक्ति के लिए धन्यवाद! –

+0

रोजर: मदद करने में खुशी हुई! मुझे आश्चर्य हुआ जब मैंने यह भी खोजा :-) –

उत्तर

11

लॉजिकल ऑपरेटर अक्सर शाखाओं में परिणाम देंगे, खासकर जब शॉर्ट सर्किट मूल्यांकन के नियमों को देखा जाना चाहिए। सामान्य सीपीयू के लिए इसका अर्थ शाखा गलतफहमी और सीयूडीए के लिए हो सकता है इसका मतलब वार्प विचलन हो सकता है। बिटवाई ऑपरेशंस को शॉर्ट सर्किट मूल्यांकन की आवश्यकता नहीं होती है, इसलिए कोड प्रवाह रैखिक होता है (यानी शाखा रहित)।

+1

इसके अलावा, लॉजिकल ऑपरेटर के लिए, एक गैर-शून्य परिणाम 1 –

+1

@Roger पर सेट होना चाहिए: सत्य, लेकिन अक्सर इसे अनुकूलित किया जा सकता है, उदा। अगर अभिव्यक्ति का उपयोग केवल सशर्त के हिस्से के रूप में किया जा रहा है - परिणाम केवल एक चर पर असाइन किए जाने पर वास्तव में 1 पर सेट करने की आवश्यकता है। –

1

हार्डवेयर स्तर पर रजिस्ट्रारों में बिटवाईर ऑपरेशंस किए जा सकते हैं। रजिस्टर ऑपरेशंस सबसे तेज़ हैं, यह विशेष रूप से सच है जब डेटा रजिस्टर में फिट हो सकता है। तार्किक परिचालन में अभिव्यक्ति मूल्यांकन शामिल होता है जो कि रजिस्टर बाध्य नहीं हो सकता है। आम तौर पर &, |, ^, >> ... कुछ सबसे तेज़ संचालन हैं और उच्च प्रदर्शन तर्क में व्यापक रूप से उपयोग किए जाते हैं।

6

एक & & बी:

if (!A) { 
    return 0; 
} 
if (!B) { 
    return 0; 
} 
return 1; 

एक & बी:

return A & B; 

इन पर विचार ए और बी के मूल्यांकन के दुष्प्रभाव हो सकते हैं कि अर्थ विज्ञान हैं (वे कार्यों कि स्थिति में परिवर्तन हो सकता है मूल्यांकन के दौरान सिस्टम का)।

ए और बी और संदर्भ के प्रकारों के आधार पर संकलक A && B मामले को अनुकूलित कर सकता है।