क्या कोई बिल्ड सिस्टम है जो अनुसूची में सापेक्ष अपेक्षित कार्य समय को शामिल करता है?


13

यहाँ मेरे प्रश्न का एक छोटा चित्रण है:

निर्माण कार्य मान लें जिसमें AD नाम के 4 स्वतंत्र कार्य शामिल हैं। D, AC योग की तुलना में अधिक समय लेता है।

एक निर्माण प्रणाली जो सापेक्ष कार्य समय को शामिल नहीं कर सकती है वह इस तरह के कार्यों को निर्धारित कर सकती है:

---------------------------------------
CPU1: A  |    C   |
---------------------------------------
CPU2: B    | D                        |
---------------------------------------

इसके विपरीत, यदि अनुसूचक को कार्य समय के अंतरों के बारे में पता है, तो यह बहुत कम समय के साथ आ सकता है:

---------------------------------------
CPU1: A  |  B    |   C   |
---------------------------------------
CPU2: D                        |
---------------------------------------

मेरे सवाल:

  1. क्या कोई बिल्ड सिस्टम है जो अनुसूची में सापेक्ष अपेक्षित कार्य समय को शामिल करता है?
  2. इस तरह के निर्माण प्रणालियों में क्या अकादमिक अनुसंधान मौजूद है?
  3. ये बिल्ड सिस्टम (यदि वे मौजूद हैं) कहां से समय की जानकारी लेते हैं? पिछले आधारों के दौरान एकत्रित आंकड़े, समय?
  4. यदि इस तरह की बिल्ड सिस्टम मौजूद नहीं है, तो क्यों? क्या कोई ऐसा गोत्र है जो उन्हें पहली नज़र में दिखाई देने से कम योग्य बना देगा?

3
थर्ड पार्टी रिसोर्सेस या टूल के अधिकांश प्रश्न "ऑफ-टॉपिक" के रूप में जल्दी बंद हो जाते हैं, लेकिन मुझे लगता है कि यह एक ऐसा एज केस हो सकता है जो इस साइट के दायरे में अच्छी तरह से फिट हो।
Doc Brown

1
मुझे लगता है कि यह गलत धारणा पर आधारित है कि "निर्माण" एक कार्य गैर-समानांतर है।
dagnelies

ज्यादातर मामलों में, एक कार्य का निर्माण वास्तव में गैर-समानांतर है, लेकिन हां, जैसे बहु-थ्रेडेड अनुप्रयोगों में इकाई परीक्षण वास्तव में समानांतर हो सकते हैं। दरअसल, एक प्रोजेक्ट में जहां मैं काम करता हूं, हमें यूनिट टेस्ट रन के लिए हमेशा "-j1" के साथ "मेक" करना पड़ता है, क्योंकि अन्यथा प्रदर्शन संबंधित मल्टीकोर यूनिट टेस्ट विफल हो जाते हैं।
जूही

@ जूहीवादी यदि आप एक अधिक अभिव्यंजक निर्माण प्रणाली में स्विच करने में रुचि रखते हैं, तो शेक के पास संसाधनों की एक अवधारणा है जहां आप उदाहरण के लिए यह परिभाषित कर सकते हैं कि आपके यूनिट परीक्षणों के लिए कितने सीपीयू कोर आरक्षित होने चाहिए।
sjakobi

जवाबों:


3

Microsoft Visual Studio टीम सिस्टम (पूर्व TFS) बिल्ड एक्शन समय और समानांतर बिल्ड पर विचार करता है; यह पिछले बिल्ड इतिहास से डेटा लेता है; और जब तक मुझे विश्वास नहीं होता कि आप उस व्यवहार को प्राप्त कर सकते हैं जिसे आप बॉक्स से बाहर चाहते हैं, आप इसे अनुकूलित करने में सक्षम हो सकते हैं।

प्रदर्शन को अनुकूलित करने के लिए कुछ कस्टम कार्यों का एक उदाहरण

https://veegens.wordpress.com/2013/03/26/tfs-2010-build-performance-report/


यदि मैं आपके उत्तर और आपके लिंक को सही ढंग से समझता हूं, तो बिल्ड एक्शन समय की रिपोर्ट की जाती है (जो कि सामान्य विशेषता है) लेकिन यह स्पष्ट नहीं है कि इन शेड्यूल का उपयोग बिल्ड शेड्यूल में सुधार के लिए किया जा सकता है या नहीं। यह वास्तव में मेरे मूल प्रश्न का उत्तर देने के लिए प्रतीत नहीं होता है, इसलिए मैं आपके उत्तर का इनाम नहीं दूंगा।
sjakobi

कोई समस्या नहीं है, जो आपने याद किया हो सकता है कि आप प्रोग्रामिंग के माध्यम से निर्माण कार्यों और निर्माण प्रक्रिया को अनुकूलित कर सकते हैं। नमूना रिपोर्टिंग कर रहा था, लेकिन जैसा कि कहा गया है, इतिहास स्वचालित अनुकूलन के लिए लिया जाता है। इसके अलावा, ध्यान दें कि आप समानांतर बिल्ड को कॉन्फ़िगर कर सकते हैं। लेकिन फिर यह सुनिश्चित करने के लिए कि वे आपके एल्गोरिदम के बाद समानांतर हैं, आपको कोड के साथ अनुकूलित करने की आवश्यकता हो सकती है। कुछ अतिरिक्त संदर्भ: dotnetcurry.com/visualstudio/1177/…
ब्रूनो गार्डिया

2
@BrunoGuardia: क्या आप बता सकते हैं कि आपके लिंक के उस लेख में कहाँ एक अनुकूलन विकल्प का उल्लेख किया गया है जो निर्माण कार्यों के अपेक्षित कार्य समय का उपयोग करने में मदद कर सकता है?
Doc Brown

0

यह गलत धारणा पर आधारित है कि "निर्माण" एक कार्य गैर-समानांतर है।

कई संकलक बहु-थ्रेडेड काम करते हैं, इसलिए एक एकल कार्य ए सभी सीपीयू का उपयोग करेगा। इसलिए, आदेश कोई फर्क नहीं पड़ता। I / O बाध्य कार्यों के लिए, विशेष रूप से नेटवर्किंग को शामिल करते हुए, उन सभी को शुरू से ही समान रूप से शुरू करें: अधिकांश समय उत्तर की प्रतीक्षा में व्यतीत होगा।

दूसरे शब्दों में, ऑर्डर देने से कोई फर्क नहीं पड़ता क्योंकि व्यक्तिगत कार्यों को आमतौर पर समानांतर किया जाता है (उदाहरण के लिए संकलन)


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

दरअसल, "टास्क ए ऑन सीपीयू 1" की यह अवधारणा भी त्रुटिपूर्ण है। यहां तक ​​कि एकल थ्रेडेड कार्यों के लिए, प्रक्रियाओं / थ्रेड्स का निर्धारण करने वाला ओएस प्रत्येक संदर्भ स्विच पर सीपीयू से सीपीयू तक की उम्मीद कर सकता है। मुझे लगता है कि ज्यादातर बिल्ड सिस्टम समानांतर में सभी कार्यों को चलाएंगे और ओएस को शेड्यूलिंग करने देंगे। लंबे कार्यों में अधिक समय लगेगा और इसके बारे में है।

मान लें कि आपके पास लंबे समय तक एकल थ्रेडेड कार्य है जो I / O बाध्य नहीं है , तो OS से संदर्भ स्विच को कम करने के लिए छोटे कार्यों में देरी करने का प्रयास करने के लिए बिल्ड सिस्टम के लिए इसे प्राथमिकता / महत्व प्रदान करना आसान होगा।

यहां तक ​​कि अगर आपके पास ऐसे अजीब कार्य हैं, जो व्यवहार में काफी दुर्लभ है, और एक फैंसी शेड्यूलिंग बिल्ड सिस्टम है जो पिछले रन (जानने का एकमात्र तरीका) के आधार पर अनुमानों पर काम करता है, तो इससे मिलने वाले लाभ आपको छोटे हो सकते हैं .. .कभी भी आपको बनाए रखने के लिए जोड़ा जटिलता का एक गुच्छा मिलता है।


"कार्य के भीतर" समानता एक दिलचस्प पहलू है और निश्चित रूप से अनुकूलन के लिए अतिरिक्त क्षमता प्रदान करता है, लेकिन मुझे नहीं लगता कि किसी भी दिए गए कार्य को सीपीयू की मनमानी संख्या के लिए कुशलता से स्केल किया जाएगा, यह मानने से बेहतर है कि प्रत्येक कार्य को चलाना चाहिए एक ही कोर।
sjakobi

@sjakobi: ठीक है, व्यवहार में यह काफी महत्वपूर्ण है कि संकलक कुशल हैं। क्या आप कल्पना कर सकते हैं कि आप अपने संकलन के लिए लंबे समय तक प्रतीक्षा करते हैं क्योंकि आपके 16 कोर में से केवल 1 का उपयोग किया जाता है? वह नो-गो है। सभी सिद्धांत के साथ आप वास्तविकता को नजरअंदाज करते हैं। निर्धारण एक बहुत ही रोचक और बहुत ही सार्थक विषय है। बिल्ड सिस्टम के संदर्भ में यह सिर्फ IMHO अपेक्षाकृत बेकार है। फिर, आजकल ज्यादातर कंपाइलर वैसे भी मल्टीथ्रेडेड होते हैं ... और यदि वे नहीं हैं, तो प्रयास को शेड्यूलिंग बिल्ड सिस्टम के बजाय इस पर अधिक ध्यान देना चाहिए।
dagnelies

2
C ++ या C या फोरट्रान या Ada के लिए सभी मुफ्त सॉफ्टवेयर कंपाइलर ( GCC & Clang ...) मोनो-थ्रेडेड हैं। बिल्ड सिस्टम ( make -j) समानांतर में कई संकलन प्रक्रियाओं को लॉन्च कर सकता है।
बेसिल स्टारीनेवविच

@BasileStarynkevitch: ... वास्तव में। मूल रूप से, हर कोई समझदार का उपयोग करता है -j <nb-cores>लेकिन दुख की बात है कि डिफ़ॉल्ट अभी भी "1" है ... मुझे आश्चर्य है कि यह अभी भी कभी नहीं बदला है।
dagnelies

@dagnelies: मेकफाइल्स की एक बड़ी संख्या है जो कुछ महत्वपूर्ण निर्भरता को याद करते हैं और इस प्रकार -NN के साथ काम नहीं करते (या काम नहीं कर सकते हैं) जहां N> 1।
14
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.