2016-08-07 5 views
10

शीर्षक कहता है, कम से कम समानता के विभिन्न रूपों का ओवरहेड क्या है, कम से कम जूलिया के वर्तमान कार्यान्वयन में (v0.5, यदि कार्यान्वयन भविष्य में भारी रूप से बदलता है)? मैं कुछ "व्यावहारिक उपायों" की तलाश में हूं, कुछ सामान्य हेरिस्टिक्स या बॉलपार्क्स मेरे सिर में रखने के लिए जब यह उपयोगी हो सकता है। उदाहरण के लिए, यह है कि बहु आप की तरह एक पाश में लाभ नहीं देंगे बहुत स्पष्ट है:जूलिया v0.5 में समांतरता के विभिन्न रूपों का उपर क्या है?

addprocs(4) 
@parallel (+) for i=1:4 
    rand() 
end 

क्योंकि प्रत्येक प्रक्रिया केवल एक यादृच्छिक संख्या ले जा रहा है आप निष्पादन लाभ नहीं देता है, लेकिन वहाँ जानने के लिए सामान्य अनुमानी है जब यह सार्थक होगा? इसके अलावा, थ्रेडिंग के लिए एक ह्युरिस्टिक के बारे में क्या। यह निश्चित रूप से बहु की तुलना में कम भूमि के ऊपर है, लेकिन उदाहरण के लिए, 4 सूत्र, क्या एन यह multithread लिए एक अच्छा विचार है के लिए के साथ:

A = rand(4) 
[email protected] (+) for i = 1:N 
    A[i%4+1] 
end 

(मैं जानता हूँ कि वहाँ एक पिरोया कमी अभी नहीं है, लेकिन चलो अधिनियम जैसा कि एक बेहतर उदाहरण के साथ है, या संपादित करें)। निश्चित रूप से, मैं हर उदाहरण को बेंचमार्क कर सकता हूं, लेकिन कुछ अच्छे नियमों को ध्यान में रखना एक लंबा रास्ता तय करेगा।

अधिक ठोस शब्दों में: अंगूठे के कुछ अच्छे नियम क्या हैं?

  • थ्रेडिंग प्रदर्शन प्रदर्शन बढ़ाने से पहले, या मल्टीप्रोसेसिंग प्रदर्शन संवर्द्धन देने से पहले आपको कितनी संख्या जोड़ने/गुणा करने की आवश्यकता है?
  • जूलिया के वर्तमान कार्यान्वयन पर निर्भर करता है?
  • यह धागे/प्रक्रियाओं की संख्या पर कितना निर्भर करता है?
  • आर्किटेक्चर पर निर्भर करता है? क्या किसी विशेष प्रणाली पर थ्रेसहोल्ड उच्च/निम्न होना चाहिए, यह जानने के लिए अच्छे नियम हैं?
  • किस प्रकार के अनुप्रयोग इन हेरिस्टिक्स का उल्लंघन करते हैं?

फिर से, मैं कठिन नियमों की तलाश नहीं कर रहा हूं, केवल विकास के मार्गदर्शन के लिए सामान्य दिशानिर्देश।

+0

आपको इसे अपेक्षाकृत आसानी से मापने में सक्षम होना चाहिए। विवरण ओपी को छोड़ दिया गया। –

उत्तर

3

कुछ चेतावनी: 1. मैं संस्करण 0.4.6, (और पूर्व) के साथ अनुभव से बात कर रहा हूं, अभी तक 0.5 के साथ नहीं खेला है (लेकिन, जैसा कि मुझे उम्मीद है कि मेरा उत्तर नीचे दिखाता है, मुझे नहीं लगता यह मुझे आवश्यक प्रतिक्रिया के साथ जरूरी है)। 2. यह एक पूरी तरह से व्यापक जवाब नहीं है।

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

इस प्रकार, मैं कम से कम राय का मानना ​​है कि यद्यपि जूलिया डेवलपर्स ओवरहेड पर कटौती करने के लिए और भी अधिक अद्भुत चीजें कर सकते हैं, इस बिंदु पर, जूलिया से संबंधित कुछ भी नहीं जा रहा है समानांतरता के गणना पहलुओं के संदर्भ में कम से कम अपने सीमित कारक, होने के लिए। मुझे लगता है कि समांतर डेटा आंदोलन की आसानी और दक्षता दोनों को बढ़ाने के संदर्भ में अभी भी सुधार किए जा रहे हैं (मुझे वह पैकेज पसंद है जिसे आपने उस विषय पर एक अच्छे कदम के रूप में शुरू किया है। आप और मैं शायद दोनों सहमत होंगे अभी भी जाने के लिए एक और तरीके हैं)। लेकिन, बड़े सीमित कारक होंगे:

  1. प्रक्रियाओं के बीच आपको कितने डेटा को स्थानांतरित करने की आवश्यकता है?
  2. आपकी यादों के दौरान आपको अपनी मेमोरी को कितना पढ़ना/लिखना है? (उदाहरण के लिए प्रति पढ़ने/लिखने के लिए फ्लॉप)

पहलू 1. कभी-कभी समांतरता का उपयोग करने के खिलाफ दुबला हो सकता है। पहलू 2. इसका मतलब यह है कि आपको इससे इतना फायदा नहीं मिलेगा। और, कम से कम मैं "ओवरहेड" की व्याख्या करता हूं, इनमें से कोई भी वास्तव में उस विशिष्ट विचार में इतनी सीधे गिरता नहीं है। और, ये दोनों हैं, मेरा मानना ​​है कि, जूलिया की तुलना में आपके सिस्टम हार्डवेयर द्वारा कहीं अधिक दृढ़ता से निर्धारित किया जा रहा है।

+0

यह मल्टीप्रोसेसिंग के लिए अच्छा है, लेकिन थ्रेडिंग के बारे में क्या है? –

+0

@ChrisRackauckas मुझे सच में यकीन नहीं है, मैंने अभी तक जूलिया में धागे के साथ नहीं खेला है, क्योंकि वे अभी ऑनलाइन आ रहे हैं। आम तौर पर, धागे प्रक्रियाओं से भी हल्के होते हैं, लेकिन मैं उन लोगों को दूंगा जो जूलिया संदर्भ में उनके साथ अधिक परिचित हैं और अधिक जानकारी भरें। –

+0

क्या आपके पास इसका बैक अप लेने के लिए कोई अच्छा उदाहरण है? ऐसा लगता है कि समानांतर कमी (+) लाभ प्राप्त होने के बाद एक संख्या दे रही है, सबूत? (कभी-कभी ऐसा करना मुश्किल होता है क्योंकि संकलक आसान उदाहरणों को अनुकूलित करता है ...)। SharedArrays का उपयोग करते समय, यह ब्रेक-इशारा जमीन कहां पर जाता है? (बीटीडब्ल्यू, मैं इसे बेंचमार्किंग पर कुछ भी काम कर रहा हूं, बस यह जानने की कोशिश कर रहा हूं कि दूसरों को क्या मिल रहा है) –

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