2011-04-10 15 views
6

का उपयोग कर किसी समस्या पर काम करना जिसके लिए GA की आवश्यकता होती है। मेरे पास यह सब काम कर रहा है और संकलक अनुकूलन का उपयोग करने से पहले वसा को कम करने और कोड को अनुकूलित करने में काफी समय बिताया है। चूंकि जीए उपयोगकर्ता इनपुट के परिणामस्वरूप चलता है, इसे उचित समय के भीतर समाधान ढूंढना पड़ता है, अन्यथा यूआई स्टालों और यह बिल्कुल ठीक नहीं खेलेंगे। मुझे यह द्विआधारी जीए आईफोन 3 जीएस पर लगभग 0.1s में एक 27 परिवर्तनीय समस्या को हल कर रहा है।जेनेटिक एल्गोरिदम ऑप्टिमाइज़ेशन - -O3 ध्वज

प्रदर्शन के इस स्तर को प्राप्त करने के लिए पूरे जीए को सी में कोडित किया गया था, उद्देश्य-सी नहीं।

रन टाइम की और कमी के लिए खोज में मैं केवल सॉल्वर मॉड्यूल के लिए "-ओ 3" ऑप्टिमाइज़ेशन स्विच का उपयोग करने के विचार पर विचार कर रहा था। मैंने कोशिश की और यह लगभग आधे भाग में कटौती काट दिया।

क्या मुझे "-ओ 3" पर अनुकूलन सेट करके किसी भी गॉचा के बारे में चिंतित होना चाहिए? ध्यान रखें कि मैं इसे फ़ाइल स्तर पर कर रहा हूं, न कि पूरे प्रोजेक्ट के लिए।

+0

-O3 तब भी आमतौर पर अपेक्षाकृत सुरक्षित है जब तक आपके द्वारा लिखा गया कोड "मानक" है और कोई भी विशिष्ट चाल नहीं करता है। फिर भी, चूंकि आईफोन के कंपाइलर को केवल कुछ छोटे प्रणालियों के लिए कामकाजी कोड उत्पन्न करना है, तो यह ठीक रहेगा। –

+0

बस जोड़ने के लिए, यदि आप यूआई स्टॉलिंग के बारे में चिंतित हैं, तो आप एक समवर्ती धागे पर गणना करने पर विचार करना चाहेंगे। – David

+0

मैंने एक समवर्ती धागा जोड़ने के बारे में सोचा। समस्या यह है कि जिस तरह से कोड लिखा गया है, मेरे पास GA शुरू करने के लिए डेटा नहीं है जब तक उपयोगकर्ता यूआई के साथ इंटरैक्ट नहीं करता। एक अलग थ्रेड लॉन्च करने के लिए मुझे मुख्य स्थिति मशीन का विस्तार करना होगा ताकि कुछ आगे बढ़ने वाले काम कर सकें और अनुमान लगाया जा सके कि जीए की क्या आवश्यकता होगी। असंभव नहीं है, लेकिन यदि मैं GA को तेजी से चलाकर इसे टाल सकता हूं तो मैं अधिक दबाव वाले मुद्दों पर आगे बढ़ूंगा। मुझे यह जोड़ना चाहिए कि जीए का आउटपुट निर्धारित करता है कि अगला यूआई अपडेट कैसा दिखता है। –

उत्तर

5

-O3 ध्वज कोड को पहले से ही (केवल तेज़) जैसा ही काम करेगा, जब तक कि आप किसी भी मुश्किल चीज को असुरक्षित न करें या अन्यथा यह निर्भर करता है कि संकलक क्या करता है।

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


ट्रिकी सामान

अनुकूलन अप्रत्याशित परिणाम देगा अगर आप कहीं और सीधे ढेर पर सामान का उपयोग, या स्थानांतरित करने के लिए ढेर सूचक प्रयास करें, या आप कुछ स्वाभाविक अवैध, की तरह करते हैं एक चर शुरू करने के लिए भूल जाओ (कुछ कंपाइलर्स (MinGW) उन्हें 0 पर सेट करेगा)।

उदा।

int main() { 
    int array[10]; 
    array[-2] = 13; // some negative value might get the return address 
} 

कुछ अन्य मुश्किल सामानों में ऑप्टिमाइज़र स्वयं को भरना शामिल है। यहां example है जब -O3 पूरी तरह से कोड को तोड़ देता है।

+0

मैंने आपका जवाब स्वीकार कर लिया है। हालांकि, अगर आप किसी और ने सुझाए गए "मुश्किल सामान" को कवर कर सकते हैं तो यह अच्छा होगा। –

+0

देरी के बारे में खेद है, कोई इंटरनेट नहीं था। कुछ चीजें जो असफल हो जाएंगी – evgeny

संबंधित मुद्दे