मैंने एक बहुप्रचारित संस्करण में पेजरैंक का एक संस्करण लागू किया है। मैं इसे 4-कोर Q6600 पर चला रहा हूं। जब मैंने इसे 4 धागे बनाने के लिए सेट चलाने के लिए, मैं:कोरों की तुलना में अधिक थ्रेड क्यों है?
real 6.968s
user 26.020s
sys 0.050s
मैं जब मैं 128 धागे के साथ चलाएँ:
real 0.545s
user 1.330s
sys 0.040s
यह मेरे लिए कोई मतलब नहीं है। मूल एल्गोरिदम एक योग-कम है:
- सभी थ्रेड इनपुट का सबसेट है;
- सिंक्रनाइज़ करें;
- प्रत्येक धागा तब अन्य धागे से परिणामों का हिस्सा जमा करता है;
- मुख्य धागा सभी धागे से एक मध्यवर्ती मूल्य निर्धारित करता है और फिर निर्धारित करता है कि जारी रखना है या नहीं।
रूपरेखा नहीं मदद की है। मुझे यकीन नहीं है कि मेरे कोड को समझने के लिए कौन सा डेटा उपयोगी होगा - कृपया पूछें।
यह वास्तव में मुझे परेशान है।
इस मामले में इनपुट क्या है? कुछ आईओ-बाध्य? क्या आपके पास प्रत्येक व्यक्तिगत चरण के लिए माप है? –
क्या यह संभव है कि कई और धागे के साथ, प्रत्येक थ्रेड को एक बार टुकड़ा में पूरा करने के लिए एक छोटा सा हिस्सा मिल रहा है? कुछ शेड्यूलिंग सिस्टम थ्रेड के लिए पहले स्लाइस में थोड़ा अतिरिक्त समय देते हैं। यदि यह समय पर पूरा नहीं होता है, तो यह निर्धारित हो जाता है और सामान्य स्लाइस में भाग लेता है। यदि काम वास्तव में सरल स्तर तक टूटा जा रहा है, तो आप अपने आवेदन के लिए कई और स्लाइस प्राप्त करके और अन्य प्रक्रियाओं को लूटकर "सिस्टम गेमिंग" कर सकते हैं। आप उच्च प्राथमिकता में भी दौड़ने का प्रयास कर सकते हैं और देख सकते हैं कि आपको समान परिणाम मिलते हैं या नहीं। –
इनपुट सभी शुरुआत में पढ़ा जाता है, इसलिए आईओ बाध्य नहीं है। मैं बहु-थ्रेडिंग कोड का एक बड़ा हिस्सा पुनः लिखता हूं और झूठी साझाकरण का एक उदाहरण हटा देता हूं। झूठी-साझाकरण फिक्स ने गति को थोड़ा बढ़ा दिया। – laurencer