यदि आप वास्तव में प्रदर्शन-महत्वपूर्ण क्षेत्रों में काम कर रहे हैं, तो आप बाद में दक्षता को रोक नहीं सकते। यह उन मामलों में जल्दी से डिजाइन करने के तरीके के बारे में सोचने के लिए सबसे महत्वपूर्ण चीजों में से एक है और अंतिम परिणाम की स्थिरता से संबंधित है।
आप एक बड़े पैमाने के सर्वर को डिज़ाइन और कार्यान्वित नहीं कर सकते हैं और बस आसान, अच्छी तरह से प्रलेखित कोड लिखना शुरू कर सकते हैं, जो कि एक वैश्विक थ्रेड लॉक के साथ हर चीज के लिए अवरुद्ध कार्यों का उपयोग करता है जो किसी भी व्यक्ति को डालते समय प्रत्येक व्यक्तिगत क्लाइंट अनुरोध को संसाधित करने के लिए पूरे सिस्टम को लॉक करता है। साझा स्थिति, धागा विवाद और अतुल्यकालिकता में जो भी सोचा। यह आपदा के लिए एक नुस्खा है और आपके द्वारा लिखे गए अच्छी तरह से प्रलेखित कोड के थोक को फिर से डिज़ाइन करने और फिर से लिखने की आवश्यकता है, जो सबसे कठिन-से-बनाए रखने वाले कोडबेस को कल्पना करने योग्य बना सकता है, जो दौड़ की परिस्थितियों से ग्रस्त है और कोशिश करने के परिणामस्वरूप मृत हो गए हैं जैसा कि कुशल, सरल, काम करने वाले डिजाइनों के बारे में सोचा होने के विपरीत, हाइटसाइट में आवश्यक दक्षता प्राप्त करना।
एक गेम डेवलपमेंट टीम 8 महीने के लिए एक इंजन के साथ उत्पादन करती है जो केवल 32 फ्रेम के साथ अपने बीफ़िएस्ट हार्डवेयर पर 2 फ्रेम प्रति सेकंड जाता है, जबकि हर बार 15 सेकंड के लिए स्टाल करने की प्रवृत्ति होती है जब स्क्रीन व्यस्त हो जाती है, तो बस तुरंत एक उपयोगी उत्पाद प्राप्त करने की संभावना नहीं होती है। एक छोटे से स्थानीय हॉटस्पॉट को ठीक करना। संभावना है कि उनका डिजाइन उन तरीकों से FUBAR है जो ड्रॉइंग बोर्ड के एक पुन: डिजाइन और डिजाइन में परिवर्तन के एक महाकाव्य को फिर से जीवंत करता है जो कोडबेस के हर कोने में कैस्केड कर सकता है।
जॉन कार्मैक के साथ, उन्होंने एक बार बात की कि कैसे एक तकनीकी डेमो को कम से कम सैकड़ों से हजारों फ्रेम प्रति सेकंड के हिसाब से चलाना होता है ताकि इसे उत्पादन में एकीकृत किया जा सके। यह दक्षता के साथ एक अस्वास्थ्यकर जुनून नहीं है। वह जानता है कि ग्राहकों को स्वीकार्य होने के लिए 30+ एफपीएस पर, उनकी संपूर्णता में खेल चलाने की आवश्यकता है। नतीजतन एक नरम छाया प्रणाली की तरह एक छोटा सा पहलू 30 एफपीएस पर नहीं चल सकता है, या फिर एक पूरे के रूप में खेल संभवत: आवश्यक रियलटाइम प्रतिक्रिया प्रदान करने के लिए पर्याप्त तेज़ नहीं हो सकता है। यह तब तक अनुपयोगी है जब तक यह आवश्यक दक्षता हासिल नहीं कर लेता। ऐसे प्रदर्शन-महत्वपूर्ण क्षेत्रों में जहां दक्षता के लिए एक मूलभूत आवश्यकता होती है, एक समाधान जो पर्याप्त गति प्राप्त करने में विफल रहता है, वास्तव में एक से बेहतर नहीं है जो सभी के लिए काम नहीं करता है,। और आप एक कुशल सॉफ्ट शैडो सिस्टम को डिज़ाइन नहीं कर सकते हैं जो एक रीयलटाइम गेम इंजन के लिए आवश्यक सैकड़ों से हजारों फ्रेम प्रति सेकंड तक चलता है जब तक कि आप इसकी दक्षता के रूप में विचारशील अग्रवर्ती राशि नहीं डालते। वास्तव में, ऐसे मामलों में, 90 +% कार्य दक्षता के आसपास उन्मुख होते हैं क्योंकि यह एक नरम छाया प्रणाली के साथ आने के लिए तुच्छ है जो पथ अनुरेखण का उपयोग करके प्रति फ्रेम 2 घंटे में ठीक काम करता है, लेकिन आप इसे ट्यून करने की उम्मीद नहीं कर सकते हैं दृष्टिकोण में एक पूरी तरह से अलग परिवर्तन के बिना प्रति सेकंड सैकड़ों फ्रेम पर चलने के लिए।
जब दक्षता किसी एप्लिकेशन के डिज़ाइन का एक मूलभूत हिस्सा है, तो आप इसे अनदेखा करके सहेजे गए समय की तुलना में नाटकीय रूप से अधिक समय गंवाए बिना दक्षता प्राप्त करने की उम्मीद नहीं कर सकते हैं, क्योंकि आप hindsight में एक कार्यशील डिज़ाइन प्राप्त करने की उम्मीद नहीं कर सकते हैं। कोई नहीं कहता है, "मुझे बाद तक डिज़ाइन के बारे में सोचने से रोकने के लिए ठीक है। बस अपने कोड को अच्छी तरह से दस्तावेज करें और आप बाद में एक उचित डिजाइन के साथ आ सकते हैं ।" लेकिन प्रदर्शन-महत्वपूर्ण आर्किटेक्चर में, यह वही है जो आप प्रभावी ढंग से कर रहे हैं यदि आप बहुत अधिक देखभाल नहीं करते हैं और कुशल डिजाइनों के बारे में सोचते हैं।
अब इसका मतलब यह नहीं है कि आपको अपने क्रियान्वयन को बल्ले से माइक्रो-ट्यून करना होगा। कार्यान्वयन के विवरण के लिए, माप के बाद तेजी से समाधान की ओर बढ़ने के लिए बहुत जगह है, बशर्ते कि डिजाइन को बदलने की आवश्यकता नहीं होगी, और अक्सर इसके बारे में जाने के लिए सबसे अधिक उत्पादक तरीका है। लेकिन डिजाइन स्तर पर, इसका मतलब है कि आपको यह पर्याप्त विचार करना होगा कि डिजाइन और वास्तुकला शुरू से ही दक्षता से कैसे संबंधित होंगे।
यहां मुख्य अंतर डिजाइन का है। डिजाइन में निर्भरता में बड़े बदलाव करना आसान नहीं है क्योंकि डिजाइन निर्भरता बढ़ाते हैं, और डिजाइन में बदलाव होने पर निर्भरता टूट जाएगी। और अगर किसी डिजाइन में यथोचित रूप से कुशल होने की आवश्यकता होती है या, कुछ मामलों में, कि इसकी गुणवत्ता काफी हद तक इसकी दक्षता से मापी जाती है, तो आपको उम्मीद के मुताबिक एक उचित डिजाइन प्राप्त करने में सक्षम होने की उम्मीद नहीं करनी चाहिए। किसी भी प्रतिस्पर्धी उत्पादों के साथ जहां दक्षता गुणवत्ता का एक बड़ा पहलू है चाहे वह ऑपरेटिंग सिस्टम या कंपाइलर या वीडियो प्रोसेसर या रेट्राइटर या गेम इंजन या भौतिकी इंजन हो, दक्षता और डेटा अभ्यावेदन के बारे में विचार बहुत शुरुआत से ही सोचा गया था। और उन मामलों में यह दक्षता में अग्रिम में इतना सोचा डाल करने के लिए समय से पहले अनुकूलन नहीं है। यह ऐसा करने के लिए सबसे अधिक उत्पादक समय पर ऐसा विचार कर रहा था,