मैं लोड करने के लिए क्या करता है यह समझने के लिए parLapplyLB()
फ़ंक्शन का परीक्षण कर रहा हूं। लेकिन मुझे कोई संतुलन नहीं दिख रहा है। के लिए सोने होगा: उदाहरण के लिए,parLapplyLB वास्तव में लोड संतुलन क्यों नहीं करता है?
cl <- parallel::makeCluster(2)
system.time(
parallel::parLapplyLB(cl, 1:4, function(y) {
if (y == 1) {
Sys.sleep(3)
} else {
Sys.sleep(0.5)
}}))
## user system elapsed
## 0.004 0.009 3.511
parallel::stopCluster(cl)
यदि यह सही मायने में लोड, पहली नौकरी (नौकरी 1) कि 3 सेकंड के लिए सोता संतुलन था प्रथम नोड और अन्य तीन नौकरियों (4 नौकरियों 2) पर होगा अन्य नोड पर कुल 1.5 सेकंड। कुल मिलाकर, सिस्टम का समय केवल 3 सेकंड होना चाहिए।
इसके बजाय, मुझे लगता है कि नौकरी 1 और 2 नोड 1 को दी जाती हैं और नौकरियां 3 और 4 नोड 2 को दी जाती हैं। परिणामस्वरूप कुल समय 3 + 0.5 = 3.5 सेकंड होता है। यदि हम parLapplyLB()
के बजाय parLapply()
के साथ एक ही कोड चलाते हैं, तो हमें लगभग 3.5 सेकंड का सिस्टम सिस्टम मिलता है।
मैं समझ नहीं रहा या गलत क्या कर रहा हूं?
मुझे लगता है कि आर स्वत: लोड संतुलन नहीं करता है। मुझे लगता है कि यह प्रत्येक कार्य को करने के लिए जितना समय लगता है, या जब प्रत्येक कार्य पूरा हो जाता है, तो यह * कार्यों * को कई कोरों में उपलब्ध कराता है। ऐसा नहीं है कि कार्यों की कतार है, और जब एक कार्यकर्ता समाप्त होता है तो वह अगले को पकड़ लेता है। प्रत्येक कोर को दो कार्य सौंपा गया था। इसलिए पहले कार्यकर्ता पर 3 + 0.5, और कुल 3.5। * गलत होने के लिए खुश होगा * – gregmacfarlane
हां वह 3.5 है जहां से आ रहा है। यह भार संतुलन नहीं है। लेकिन parLapplyLB संतुलन का दावा करता है। – josiekre