पहली चीज जिसे आपको समझने की आवश्यकता है वह वह हार्डवेयर है जिस पर आप चल रहे हैं। यह ब्रांचिंग को कैसे संभालती है? कैशिंग के बारे में क्या? क्या इसमें SIMD निर्देश सेट है? कितने प्रोसेसर का उपयोग कर सकते हैं? क्या इसे प्रोसेसर समय को किसी और चीज़ के साथ साझा करना है?
आप बहुत भिन्न तरीकों से एक ही समस्या को हल कर सकते हैं - यहां तक कि एल्गोरिथ्म की आपकी पसंद हार्डवेयर पर निर्भर होनी चाहिए। कुछ मामलों में O (N) O (NlogN) (कार्यान्वयन के आधार पर) की तुलना में धीमी गति से चल सकता है।
अनुकूलन के एक कच्चे अवलोकन के रूप में, पहली चीज जो मैं करता हूं वह यह है कि वास्तव में क्या समस्याएं हैं और आप किस डेटा को हल करने की कोशिश कर रहे हैं। फिर उसके लिए ऑप्टिमाइज़ करें। यदि आप चरम प्रदर्शन चाहते हैं, तो जेनेरिक समाधानों के बारे में भूल जाएं - आप उस विशेष मामले में सब कुछ कर सकते हैं जो आपके सबसे अधिक उपयोग किए गए मामले से मेल नहीं खाता है।
फिर प्रोफाइल। प्रोफ़ाइल, प्रोफ़ाइल, प्रोफ़ाइल। स्मृति उपयोग को देखें, शाखा दंड को देखें, फ़ंक्शन कॉल ओवरहेड को देखें, पाइपलाइन उपयोग को देखें। अपना कोड धीमा कर रहा है। यह शायद डेटा एक्सेस है (मैंने डेटा एक्सेस के ओवरहेड के बारे में "द लेटेंसी एलीफेंट" नामक एक लेख लिखा था - Google इसे। मैं यहां 2 लिंक पोस्ट नहीं कर सकता क्योंकि मेरे पास "प्रतिष्ठा" पर्याप्त नहीं है), इसलिए बारीकी से जांच करें। फिर अपने डेटा लेआउट का अनुकूलन करें ( अच्छा बड़ा समरूप सजातीय भयानक हैं ) और डेटा एक्सेस (जहां संभव हो वहां प्रीफ़ेट करें)।
एक बार जब आपने मेमोरी सबसिस्टम के ओवरहेड को कम कर दिया है, तो कोशिश करें और निर्धारित करें कि क्या निर्देश अब अड़चन हैं (उम्मीद है कि वे हैं), फिर अपने एल्गोरिथ्म के SIMD कार्यान्वयन को देखें - स्ट्रक्चर-ऑफ-अर्रेज़ (SoA) कार्यान्वयन बहुत डेटा हो सकता है और निर्देश कैश कुशल। यदि SIMD आपकी समस्या के लिए एक अच्छा मेल नहीं है, तो आंतरिक और कोडांतरक स्तर कोडिंग की आवश्यकता हो सकती है।
यदि आपको अभी भी अधिक गति की आवश्यकता है तो समानांतर चलें। यदि आपको PS3 पर चलने का लाभ है तो SPU आपके मित्र हैं। उनका उपयोग करो, उनसे प्रेम करो। यदि आप पहले से ही एक SIMD समाधान लिख चुके हैं, तो आपको SPU में जाने का एक बड़ा लाभ मिलेगा।
और फिर, प्रोफ़ाइल कुछ और। खेल परिदृश्यों में परीक्षण - क्या यह कोड अभी भी अड़चन है? क्या आप इस कोड का उपयोग उच्च स्तर पर इसके उपयोग को कम करने के लिए कर सकते हैं (वास्तव में, यह आपका पहला कदम होना चाहिए)? आप कई तख्ते पर गणना स्थगित कर सकते हैं?
आप जिस भी प्लेटफॉर्म पर हैं, हार्डवेयर और प्रोफाइलर्स के बारे में उतना ही सीख सकते हैं जितना आप उपलब्ध हैं। यह मत समझो कि आपको पता है कि अड़चन क्या है - इसे अपने प्रोफाइलर के साथ खोजें। और सुनिश्चित करें कि आपके पास यह निर्धारित करने के लिए एक अनुमानी है कि क्या आपने वास्तव में अपने खेल को तेजी से आगे बढ़ाया है।
और फिर इसे फिर से प्रोफाइल करें।