मैं यहां अनाज के खिलाफ जा रहा हूं और कहूंगा, आशावाद के बारे में सीखना बहुत जल्दी नहीं है , विशेष रूप से विधानसभा अनुकूलन और अधिक महत्वपूर्ण बात, विधानसभा में डिबगिंग। मुझे विश्वास है कि यदि आप एक छात्र हैं (क्योंकि तब आपके पास खोने का बहुत कम समय है [अर्थात समय / धन वार]) और सब कुछ हासिल करने के लिए आप इसका अधिकतम लाभ प्राप्त करेंगे।
यदि आप उद्योग में हैं और विधानसभा में इधर-उधर छेड़छाड़ करने का काम नहीं करते हैं, तो न करें। अन्यथा, यदि आप एक छात्र हैं या आपके पास सामान्य रूप से समय है, तो मुझे कार्यक्रमों को अलग करने के लिए सीखने का समय मिलेगा और देखूंगा कि क्या मैं संकलक की तुलना में बेहतर समाधान के साथ आ सकता हूं। अगर मैं नहीं कर सकता, कौन परवाह करता है! मैंने अभी सीखा कि कैसे कंपाइलर लिखना है और यह एक बहुत बड़ा प्लस है जब आपको रिलीज़ कोड में बग के साथ सामना करना पड़ता है (बिना डिबग प्रतीकों के साथ) और डिससैम्ड को घूर रहा है क्योंकि यह एकमात्र ऐसी चीज है जिसे आप देख सकते हैं।
उत्तर
यह एक सबसे अच्छा संसाधन है जो मैंने अनुकूलन के बारे में सीखने के लिए पाया है।
http://www.agner.org/optimize/
शेख़ीवाला
यदि आप प्रमुख डेवलपर्स द्वारा कुछ लेख पढ़ते हैं (उदाहरण के लिए, ईएएसटीएल बनाने के पीछे तर्क और कोड का करीबी निरीक्षण आपको इस तरह की टिप्पणियों की ओर ले जाएगा, क्योंकि जीसीसी इस पर बहुत बुरा है यदि यह कथन आपको बताएगा, जो कि अधिकांश है लोग आपको विश्वास दिलाते हैं कि कंपाइलर हमेशा सही नहीं होता है, ESPECIALLY खेल विकास में) और फिर उद्योग में पैर सेट करें आप पाएंगे कि अनुकूलन एक रोजमर्रा की चीज है और यह जानना कि विधानसभा आउटपुट का मतलब बड़ा प्लस है। इसके अलावा, लोगों को (विशेष रूप से स्टैकओवरफ़्लो पर) का एहसास नहीं होता है कि प्रोफाइलिंग खेल बहुत कठिन है और हमेशा सटीक नहीं होता है।
हालांकि एक चेतावनी है। आप किसी चीज़ को अनुकूलित करने में समय व्यतीत कर सकते हैं और बाद में महसूस करते हैं कि समय बर्बाद हो गया है। लेकिन आपने क्या सीखा? आपने ऐसी ही परिस्थिति में उस गलती को दोहराना नहीं सीखा।
अब एसओ ले रहा है मेरी राय में बयान के लिए एक धार्मिक रुख है, जब तक आप प्रोफ़ाइल नहीं करते हैं और चिंता न करें, संकलक आपसे बेहतर जानता है । यह सीखने में बाधा डालता है। मुझे पता है कि उद्योग के विशेषज्ञ जिन्हें बहुत अच्छे पैसे दिए जाते हैं (और मेरा मतलब बहुत अच्छा पैसा है) खेल को ऑप्टिमाइज़ करने के लिए असेंबली में इधर-उधर फैंकते हैं और इसे डिबग करते हैं क्योंकि कंपाइलर इसमें खराब है या बस आपकी मदद नहीं कर सकता है, क्योंकि, ठीक है, यह नहीं कर सकता (GPU संबंधित क्रैश, क्रैश जहां डेटा शामिल करना डिबगर आदि में पढ़ना असंभव है)!
क्या होगा अगर कोई ऐसा करने से प्यार करता है, जो अभी तक पूरी तरह से महसूस नहीं किया है, यहाँ सवाल पूछते हैं और कई उत्तरों द्वारा दूर / बंद कर दिया जाता है, जो आपसे बेहतर जानता है! और कभी भी उन अत्यधिक भुगतान किए गए प्रोग्रामरों में से एक नहीं बन जाता है?
एक अंतिम विचार। यदि आप इसे जल्दी करना शुरू करते हैं, तो आप पाएंगे कि जल्द ही आप कोड लिखना शुरू कर देंगे जो कि सबसे खराब है, इसमें कोई प्रदर्शन सुधार नहीं है क्योंकि कंपाइलर ने इसे उसी तरह से अनुकूलित किया है या सबसे अच्छा है, कुछ प्रदर्शन में सुधार हुआ है क्योंकि अब कंपाइलर इसे अनुकूलित कर सकते हैं । किसी भी मामले में, यह आदत बन गई है, और आप इस तरह से कोड लिखने में धीमे नहीं हैं, जैसा आपने पहले किया था। कुछ उदाहरण हैं (और भी कई):
- जब तक आप वास्तव में पोस्ट-इन्क्रीमेंट नहीं चाहते तब तक पूर्व-वृद्धि
- लूप के भीतर कंटेनर पर कॉलिंग आकार () के बजाय एक निरंतर स्थानीय आकार चर का उपयोग करते हुए कंटेनरों के लिए लूप लिखना।
EDIT: उद्योग में 8 और वर्षों के बाद अपडेट। विधानसभा जानें। जानें कि कैसे ऑप्टिमाइज़र काम करते हैं और जो विधानसभा वे उत्पन्न करते हैं (CompilerExplorer उसके लिए एक महान उपकरण है)। मैं टेस्ट बिल्ड्स (आंतरिक परीक्षण के लिए अनुकूलित बिल्ड) में अनगिनत क्रैश पर चला गया हूं, जहां आप डीबग प्रतीकों के साथ भी डिबगर पर भरोसा नहीं कर सकते। कंपाइलर ने बहुत सी चीजों को अनुकूलित किया है और क्रैश डंप से बग को खोजने के लिए असेंबली आपके बहुमूल्य जानकारी का एकमात्र स्रोत है। यदि आप भाग्यशाली हैं और पहली बार बिल्ड कतार में हैं तो प्रत्येक बिल्ड में 30-40 मिनट लगते हैं - इसलिए आप बग को अलग करने के लिए कुछ पारंपरिक तकनीकों पर भरोसा नहीं कर सकते। मल्टीप्लेयर चीजों को बदतर बनाता है। असेंबली को जानना और ऑप्टिमाइज़्ड असेंबली को कैसे पढ़ना है, यह आपको बेहतर और अंततः टीम के लिए अधिक मूल्यवान बना देगा।