मैंने एक पुनरावृत्त एल्गोरिदम लागू किया है, जहां प्रत्येक पुनरावृत्ति में प्री-ऑर्डर पेड़ ट्रैवर्सल (कभी-कभी नीचे संचय कहा जाता है) के बाद एक पोस्ट ऑर्डर पेड़ ट्रैवर्सल (ऊपर संचय) होता है। प्रत्येक नोड के प्रत्येक विज़िट में अगली विज़िट के लिए उपयोग की जाने वाली जानकारी की गणना और भंडारण शामिल होता है (या तो बाद के पोस्ट-ऑर्डर ट्रैवर्सल या बाद के पुनरावृत्ति में)।समानांतर में पेड़ ट्रैवर्सिंग एल्गोरिदम लागू करने की रणनीति?
प्री-ऑर्डर ट्रेवर्सल के दौरान, प्रत्येक नोड स्वतंत्र रूप से जब तक यह और रूट के बीच सभी नोड्स पहले से ही संसाधित किया गया है संसाधित किया जा सकता। प्रसंस्करण के बाद, प्रत्येक नोड को अपने प्रत्येक बच्चे को एक ट्यूपल (विशेष रूप से, दो फ्लोट) पास करने की आवश्यकता होती है। पोस्ट-ऑर्डर ट्रैवर्सल पर, प्रत्येक नोड को स्वतंत्र रूप से तब तक संसाधित किया जा सकता है जब तक कि इसके सभी सबट्री (यदि कोई हों) पहले ही संसाधित हो चुके हैं। प्रसंस्करण के बाद, प्रत्येक नोड को अपने माता-पिता को एक ही फ्लोट पास करने की आवश्यकता होती है।
पेड़ों की संरचना स्थिर और अपरिवर्तित एल्गोरिथ्म दौरान होता है। हालांकि, नीचे की तरफ के दौरान, यदि दो फ्लोट दोनों पारित हो जाते हैं, तो इस नोड के नीचे पूरे उप-प्रक्रिया को संसाधित करने की आवश्यकता नहीं होती है, और इस नोड के ऊपर की ओर बढ़ने वाला प्रारंभ हो सकता है। (उपट्री को संरक्षित किया जाना चाहिए, क्योंकि बाद के पुनरावृत्तियों पर उत्तीर्ण फ्लोट इस नोड पर गैर-शून्य हो सकता है और ट्रैवर्सल फिर से शुरू हो जाएंगे)।
प्रत्येक नोड पर गणना की तीव्रता पेड़ में समान है। प्रत्येक नोड पर गणना छोटी है: नोड्स पर बच्चों की संख्या के बराबर लंबाई के साथ संख्याओं की एक सूची पर बस कुछ रकम और गुणा/विभाजित होते हैं।
पेड़ कार्रवाई की जा रही असंतुलित कर रहे हैं: एक ठेठ नोड 2 पत्ते प्लस 0-6 अतिरिक्त बच्चे नोड्स होगा। इसलिए, पेड़ को अपेक्षाकृत संतुलित उपट्री के सेट में विभाजित करना गैर-स्पष्ट (मेरे लिए) है। इसके अलावा, पेड़ों को सभी उपलब्ध रैम का उपभोग करने के लिए डिज़ाइन किया गया है: बड़ा पेड़ जिसे मैं संसाधित कर सकता हूं, बेहतर।
मेरे धारावाहिक कार्यान्वयन प्रति सिर्फ मेरी छोटी परीक्षण पेड़ों पर सेकंड 1000 पुनरावृत्तियों के आदेश पर उपलब्ध हो जाता है; "असली" पेड़ के साथ, मुझे उम्मीद है कि यह परिमाण (या अधिक?) के क्रम से धीमा हो सकता है। यह देखते हुए कि एक स्वीकार्य परिणाम तक पहुंचने के लिए एल्गोरिदम को कम से कम 100 मिलियन पुनरावृत्तियों (संभवतः एक बिलियन तक) की आवश्यकता होती है, मैं एकाधिक कोर का लाभ उठाने के लिए एल्गोरिदम को समानांतर करना चाहता हूं। मुझे समांतर प्रोग्रामिंग के साथ शून्य अनुभव है।
क्या बनता है के लिए सिफारिश की पद्धति मेरे एल्गोरिथ्म की प्रकृति दिया जाता है?
पहला कदम यह निर्धारित करने के लिए आपके एल्गोरिदम का विश्लेषण कर रहा है कि क्या, यदि कोई है, तो भागों एक दूसरे से स्वतंत्र हैं। इसकी शायद आवश्यकता होगी कि आप अपने एल्गोरिदम को निम्न स्तर पर निम्न स्तर पर मानें। –
बिल्कुल किस तरह के पेड़ आप प्रसंस्करण कर रहे हैं, और आपको किस प्रकार के संचालन का समर्थन करने की आवश्यकता है? इससे पहले कि आप समानांतर पेड़ ट्रैवर्सल पर विचार करें, अपने आप से पूछें कि क्या आप बेहतर डेटा संरचना का उपयोग करके अपने पेड़ों को फिर से लिख सकते हैं या ओ (एन) ऑपरेशन को इसके बजाय ओ (लॉग एन) में सुधार सकते हैं। – Juliet
क्या पेड़ के नोड्स के बीच कोई साझा डेटा है, या वे तर्कसंगत रूप से अलग हैं? मैं कुछ सभ्य सुझाव दे सकता हूं, लेकिन अधिक जानकारी से यह आसान हो जाएगा। – Novelocrat