मैं थोड़ी देर के लिए बसपा पेड़ों के साथ झुका रहा हूं और धागे के साथ भी खेल रहा हूं। बीएसपी पेड़ में एक त्रिकोण जोड़ते समय, समानांतर में डेटा प्रोसेसिंग के प्रयोजनों के लिए एक नया धागा बनाने का अवसर उत्पन्न होता है।क्या मुझे थ्रेडिंग और रिकर्सन का एक साथ उपयोग करना चाहिए?
insert(triangle, bspnode) { .... else if(triangle spans bspnode) { (frontpiece, backpiece) = plane_split(triangle, bspnode) insert(frontpiece, bspnode.front) insert(backpiece, bspnode.back) } .... }
दो डालने संचालन ऊपर दो धागे द्वारा निष्पादित किया जा सकता है, और के बाद से वे एक ही डेटा को संशोधित नहीं है, सस्ते तुल्यकालन इस्तेमाल किया जा सकता।
insert(triangle, bspnode) { .... else if(triangle spans bspnode) { (frontpiece, backpiece) = split(triangle, bspnode) handle = beginthread(insert(backpiece, bspnode.front)) insert(frontpiece, bspnode.back) if(handle) { waitforthread(handle) } else { insert(backpiece, bspnode.front) } } .... }
इस नई विधि समानांतर में इस कार्य को पूरा करने के लिए एक धागा बनाने का प्रयास करता है, लेकिन धागा नहीं बनाया जा सकता है, तो असफल नहीं होना चाहिए (यह केवल मूल एल्गोरिथ्म पर लौट जाएगा)।
क्या यह एक ध्वनि प्रोग्रामिंग अभ्यास है, या क्या मैं अनुचित रूप से धागे का उपयोग कर रहा हूं? मैं इस तकनीक पर कोई साहित्य नहीं ढूंढ पा रहा हूं। मुझे यह पसंद है कि यह मेरे सीपीयू को अपने पूर्ण (2 कोर) तक उपयोग करने का प्रयास करता है, और सैद्धांतिक रूप से उपलब्ध प्रोसेसर की किसी भी संख्या में स्केल करेगा। मुझे यह पसंद नहीं है कि यह सीपीयू और मेमोरी पर बेहद अपमानजनक हो सकता है।
ओह और वह RHYMES! :) हहा नाइस! – Kiril
अनुभवजन्य रूप से, मुझे लगता है कि उपलब्ध कोरों की संख्या के बराबर कई धागे का उपयोग करके + 1 थोड़ा बेहतर प्रदर्शन होता है। लेकिन जैसा कि आप कहते हैं, इसे समझने का सबसे अच्छा तरीका यह है कि उत्पादन वातावरण पर इसका परीक्षण करें और देखें कि यह क्या परिणाम प्रदान करता है। – corsiKa