2009-05-28 20 views
10

क्या एमएस विजुअल स्टूडियो सी ++ (2005) में लिंकिंग समय को अनुकूलित करने के लिए कोई तरीका है? हम संकलन गति के लिए Xoreax Incredibuild का उपयोग कर रहे हैं, लेकिन लिंक के लिए कुछ नहीं।सी ++ लिंकिंग समय को कैसे बढ़ाएं

वर्तमान में प्रत्येक लिंकिंग में लगभग 30 सेकंड हैं। जब मैं वृद्धिशील लिंकिंग चालू करता हूं, तो 35-40 सेकेंड लगते हैं। (कोई फर्क नहीं पड़ता कि मैं अविश्वसनीय के साथ या बिना परियोजना संकलित करता हूं)

क्या कोई तरीका है, लिंकर को कैसे प्रोफाइल करें और देखें कि कितना समय लगता है? या पैराल लिंक जोड़ने के लिए कोई उपकरण? या लिंकर को तेज़ करने के लिए कोड अनुकूलन के लिए कोई सुझाव?

उत्तर के लिए धन्यवाद LUDEK Vodicka


संपादित करें:

पहले उत्तर के लिए धन्यवाद, और अतिरिक्त जानकारी:

  • पूरे कार्यक्रम अनुकूलन और लिंक-बार कोड पीढ़ी पहले से ही बंद है ।
  • पीआईएमपीएल मुहावरे पहले से ही उपयोग किया जा सकता है जब
  • अन्य स्थैतिक पुस्तकालयों को पहले ही #pragma टिप्पणी (lib, "pathToLib") के माध्यम से शामिल किया गया है। (यह भी वजह से आसान रखरखाव]
  • HW: क्वाड-कोर Q6600, 8GB राम, 3x WD रैप्टर छापे 0. Windows Vista 64 बिट
+0

30 सेकंड मुझे इतना नहीं लगता है। यदि आप समझदार विकास करते हैं तो आप कितनी बार संकलन/लिंक चक्र निष्पादित करते हैं? यदि आप तेज़ हैं तो शायद हर 10-30 मिनट। क्या आपको वाकई कोई फर्क पड़ता है कि आपको 30 सेकंड इंतजार करना है? – lothar

+0

समांतर संकलन चरण कितना समय लगता है? आप आमतौर पर कितने लक्ष्य बनाते हैं? यदि संकलन चरण में 10 सेकंड लगते हैं और आप केवल एक लक्ष्य बनाते हैं, तो मुझे आपकी स्थिति के लिए पूरी तरह से सहानुभूति नहीं है। :) – bk1e

+0

नई सुविधाओं को विकसित करते समय, हम आपके द्वारा बताए गए हर 10-20 मिनटों को संकलित कर रहे हैं, लेकिन जब खोज और बग फिक्सिंग करते हैं, तो यह हर मिनट हो सकता है ;-( पूरे प्रोजेक्ट संकलन में लगभग 2 मिनट लगते हैं और एक लक्ष्य बनाते हैं। केवल एक ही बदली गई फ़ाइल, फ़ाइल संकलन में लगभग 3 सेकंड लगते हैं और लगभग 35 सेकंड लिंक होते हैं ;-( –

उत्तर

8

मुझे किसी भी समानांतर लिंकिंग टूल से अवगत नहीं है; मुझे पता है कि Incredibuild इसे अनुमति नहीं देता है।

लिंक समय से बचने के लिए आपके टूलबॉक्स में सबसे बड़ा टूल अमूर्तता का उचित स्तर है। यदि आपके लिंक का समय लंबा है, तो ऐसा इसलिए हो सकता है क्योंकि वस्तुओं को अन्य वस्तुओं के बारे में बहुत कुछ पता है। उन्हें decoupling तब कुंजी है - अमूर्त इंटरफेस के माध्यम से (शायद पीआईएमपीएल प्रतिमान का उपयोग कर), या हालांकि घटनाओं जैसे गुजरने के अन्य तरीकों।

परियोजना निर्भरताओं के माध्यम से परियोजनाओं को जोड़ने के लिए ओवरहेड भी काफी अधिक है।यदि आपका लक्ष्य प्लेटफ़ॉर्म केवल Win32 है, या मुख्य रूप से, आप #pragma टिप्पणी (lib, "pathToLib") के माध्यम से अपने आश्रित पुस्तकालयों को लिंक करने के लिए हेडर का उपयोग करने पर विचार कर सकते हैं।

+0

सेट करना प्रोजेक्ट प्रॉपर्टीज के माध्यम से निर्भरता | लिंकर | इनपुट या प्रज्ञा टिप्पणियों के माध्यम से एक ही है। प्रोजेक्ट निर्भरता सेट करना स्वचालित रूप से लिन नहीं होता है के खिलाफ (मुझे लगता है कि यह पुराने संस्करणों में उपयोग किया जाता है), इसे केवल दूसरे के पहले पहले निर्माण की आवश्यकता होती है। –

7

आप, अनुकूलन के बिना जीना लिंक-बार कोड पीढ़ी को बंद कर सकते हैं (/ जीएल स्विच या गुणों में सी/सी ++ -> अनुकूलन -> पूरे कार्यक्रम अनुकूलन को हटाएं। लिंकर को हटाने/ltcg के लिए या लिंक टाइम कोड जेनरेशन सेटिंग का उपयोग करें)। यह संकलक धीमा कर देगा हालांकि कोड कोड अब होता है संकलन समय।

मैंने उन परियोजनाओं को देखा है जो/जीएल +/एलटीसीजी के साथ बनाने के लिए घंटों लगते हैं, केवल सेकंड के बिना (उदाहरण के लिए: http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/750ed2b0-0d51-48a3-bd9a-e8f4b544ded8)

+0

हां। जो लिंकिंग समय को गति देता है, लेकिन संकलन समय धीमा कर देता है। –

1

क्या आपने हार्डवेयर में सुधार करने पर विचार किया है?
क्या आप निर्माण के लिए एक अलग भौतिक हार्ड ड्राइव का उपयोग करते हैं? आप किस तरह के ड्राइव का उपयोग करते हैं?

एक सामान्य सुझाव के रूप में: कुछ मेमोरी में फेंक दें, Velociraptor प्राप्त करें, केवल स्रोत डालें और वहां निर्देशिका बनाएं, फिर से मापें। यदि यह मदद करता है, तो RAID 0 पर विचार करें।

मैंने सुना है कि एक एक्सपी कोर से W2K3 कोर में अपग्रेड करना बेहतर बिल्डिंग समय में उल्लेखनीय रूप से बेहतर स्मृति प्रबंधन और कैशिंग के कारण होता है।

अपना कोड बदलने के लिए एक सुझाव के रूप में, आप कुछ कार्यक्षमता को डीएलएल में ले जा सकते हैं, और समानांतर में लिंक कर सकते हैं। लेकिन मैं निर्माण के समय में सुधार करने के लिए बस इतना बदलाव नहीं करूंगा।

0

आप स्थिर libs जहाँ आप उन्हें वितरित नहीं करेगा को लिंक करने को छोड़ IncrediLink

का उपयोग कर सकते हैं हमने पाया है कि एक पर हस्ताक्षर करने के बाद निर्माण कदम के अलावा IncrediBuild बंद कर देंगे Improving link time with IncrediBuild

पर कुछ सामान्य सेटिंग सुझाव हैं निम्नलिखित परियोजनाओं पर काम कर, निर्माण पोस्ट करने के लिए एक टिप्पणी जोड़ने से मदद करने के लिए

rem IncrediBuild_AllowOverlap 

IncrediBuild_AllowOverlap doc

देखें चाहिए था
संबंधित मुद्दे