क्या फास्टकॉल कॉलिंग सम्मेलन अन्य कॉलिंग सम्मेलनों, जैसे कि सीडीईसीएल की तुलना में वास्तव में तेज़ है? क्या वहां कोई बेंचमार्क है जो दिखाता है कि सम्मेलन को कॉल करके प्रदर्शन कैसे प्रभावित होता है?फास्टकॉल वास्तव में तेज़ है?
उत्तर
यह मंच पर निर्भर करता है। ज़ेनॉन पावरपीसी के लिए, उदाहरण के लिए, यह स्टैक पर डेटा पास करने के साथ लोड-हिट-स्टोर समस्या के कारण परिमाण अंतर का क्रम हो सकता है। मैंने अनुभव किया कि cdecl
फ़ंक्शन के ओवरहेड को लगभग 45 चक्रों पर ~ fastcall
के लिए ~ 4 की तुलना में कार्य किया गया।
आउट-ऑफ-ऑर्डर x86 (इंटेल और एएमडी) के लिए, प्रभाव बहुत कम हो सकता है, क्योंकि रजिस्ट्रार सभी छायांकित होते हैं और फिर भी नाम बदलते हैं।
उत्तर वास्तव में यह है कि आपको अपने पसंदीदा प्लेटफ़ॉर्म पर इसे स्वयं बेंचमार्क करने की आवश्यकता है।
क्या फास्टकॉल कॉलिंग कन्वेंशन जैसे अन्य कॉलिंग सम्मेलनों की तुलना में वास्तव में तेजी से कॉलिंग है?
मेरा मानना है कि 86 और 64 पर fastcall
के माइक्रोसॉफ्ट के कार्यान्वयन रजिस्टरों में के बजाय ढेर पर पहले दो पैरामीटर प्रदान करने के शामिल है कि।
चूंकि यह आमतौर पर कम से कम चार मेमोरी एक्सेस बचाता है, हां यह आमतौर पर तेज़ होता है। हालांकि, यदि शामिल फ़ंक्शन पंजीकृत-भूखा है और इस प्रकार उन्हें स्टैक पर स्थानीय लोगों को लिखने की संभावना है, तो भी कोई महत्वपूर्ण वृद्धि होने की संभावना नहीं है।
x64 में केवल एक कॉलिंग सम्मेलन है –
कॉलिंग सम्मेलन (कम से कम x86 पर) वास्तव में गति में बहुत अंतर नहीं करता है। विंडोज़ में, _stdcall
को डिफ़ॉल्ट बनाया गया था क्योंकि यह _cdecl
की तुलना में सामान्य रूप से छोटे कोड आकार में परिणामस्वरूप नॉनट्रिविअल प्रोग्राम के लिए ठोस परिणाम उत्पन्न करता है। _fastcall
डिफ़ॉल्ट मान नहीं है क्योंकि यह जो अंतर बनाता है वह बहुत कम मूर्त है। आप रजिस्ट्रार के माध्यम से गुजरने वाले तर्क में क्या करते हैं, आप कम कुशल फ़ंक्शन निकायों में खो देते हैं (जैसा कि पहले एनन द्वारा उल्लिखित किया गया था)। रजिस्टरों में गुजरने से आपको कुछ भी हासिल नहीं होता है अगर बुलाए गए फ़ंक्शन को तुरंत अपनी गणना के लिए स्मृति में सब कुछ फैलाने की आवश्यकता होती है।
हालांकि, हम पूरे दिन सैद्धांतिक विचारों को स्पॉट कर सकते हैं - सही उत्तर के लिए अपने कोड को बेंचमार्क करें। कुछ मामलों में _fastcall
तेज होगा, और दूसरों में धीमा होगा।
आधुनिक x86 पर - नहीं। एल 1 कैश और इन-लाइनिंग के बीच फास्टकॉल के लिए कोई जगह नहीं है।
यदि कोई फ़ंक्शन इनलाइन है तो यह न तो है fastcall और न ही cdecl और न ही किसी अन्य कॉलिंग सम्मेलन। – Crashworks
बिल्कुल। एल 1 से प्राप्त करना रजिस्टर पर 1 चक्र है - ज्यादातर मामलों में यह शोर स्तर से नीचे है, इसे विश्वसनीय रूप से बेंचमार्क करना भी मुश्किल है। और ऐसे कार्यों जहां कॉल पर कुछ चक्र महत्वपूर्ण अंतर हैं, वैसे भी रेखांकित किया जाना चाहिए। – ima
मुझे इसके साथ सहमत होना है - किसी भी फ़ंक्शन जो फास्टकॉल से लाभ लेने के लिए पर्याप्त सरल है, उसे और भी इनलाइन करने से लाभ होगा। –
- 1. फास्टकॉल जीसीसी उदाहरण
- 2. शून्य असाइनमेंट बनाम xor, दूसरा वास्तव में तेज़ है?
- 3. एसआईएफटी बनाम एसआईएफटी, एसयूआरएफ वास्तव में तेज़ है?
- 4. सी क्या यह शाखा रहित हैक वास्तव में तेज़ है?
- 5. PHP में PATH_INFO वास्तव में क्या है?
- 6. RestSharp में मेरा प्रारंभिक कॉल वास्तव में धीमा क्यों है? लेकिन बाद में बहुत तेज़
- 7. सबसे तेज़ जावास्क्रिप्ट इंजन कौन सा है, और क्या इससे वास्तव में कोई फर्क पड़ता है?
- 8. 'म्यूटेक्स लॉक' वास्तव में क्या करता है?
- 9. रुबी 1.9.1 वास्तव में एक नई रेल तैनाती के लिए तैयार और तेज़ है?
- 10. गैर-अवरुद्ध I/O बहु-थ्रेडेड अवरोध I/O से वास्तव में तेज़ है? कैसे?
- 11. ओआरएम (लिंक, हाइबरनेट ...) वास्तव में उपयोगी है?
- 12. हास्केल समेकन - वास्तव में nondeterministic फोर्कियो है?
- 13. Magento वास्तव में opensource है?
- 14. रेक वास्तव में क्या है?
- 15. # वास्तव में क्या शामिल है?
- 16. वास्तव में PLINQ क्या है?
- 17. playframework वास्तव में असीमित है?
- 18. वास्तव में @ चयनकर्ता क्या है?
- 19. रॉम वास्तव में क्या है?
- 20. वास्तव में $ RPM_BUILD_ROOT क्या है?
- 21. sun.jnu.encoding वास्तव में क्या है?
- 22. AngularJS वास्तव में एमवीसी है?
- 23. हैश वास्तव में क्या है?
- 24. प्रतिबिंब वास्तव में धीमा है?
- 25. JSON वास्तव में क्या है?
- 26. डब्ल्यूपीएफ वास्तव में क्या है?
- 27. मेटाप्रोग्रामिंग वास्तव में क्या है?
- 28. क्या जागरूक वास्तव में है?
- 29. LINQ वास्तव में क्या है?
- 30. नोएसक्यूएल वास्तव में क्या है?
"सम्मेलन बुलाकर प्रदर्शन कैसे प्रभावित होता है?" मामूली रूप से। – avakar
जब यह बड़े पैमाने पर प्रभावित होता है। – Crashworks
यह भी देखें http://bcbjournal.org/articles/vol4/0004/When_to_use___fastcall.htm?PHPSESSID=7ea0b77df8671b0af9001fbca735c1bc – bluish