मैंने हाल ही में इनमें से कुछ उत्तरों को शुरुआती बिंदु के रूप में उपयोग करते हुए इस समस्या से निपटा। ध्यान रखने योग्य सबसे उपयोगी बात यह है कि बॉयलर एक प्रकार का सरल एन-बॉडी सिमुलेशन है: प्रत्येक बोइड एक कण है जो अपने पड़ोसियों पर एक बल लगाता है।
मुझे लिंडे का पेपर पढ़ने में मुश्किल लगा; मैं इसके बजाय एसजे प्लाम्पटन के "शॉर्ट-रेंज आणविक गतिशीलता के लिए फास्ट समानांतर एल्गोरिदम" को देखने का सुझाव देता हूं। , जिसे लिंडे ने संदर्भित किया था। प्लिम्पटन का पेपर बेहतर आंकड़ों के साथ कहीं अधिक पठनीय और विस्तृत है:
संक्षेप में, परमाणु-विघटन विधियाँ प्रत्येक प्रोसेसर के लिए स्थायी रूप से परमाणुओं का एक उपसमूह निर्दिष्ट करती हैं, बल-अपघटन विधियाँ प्रत्येक खरीद के लिए जोड़-तोड़ बल संगणनाओं का एक उपसमुच्चय प्रदान करती हैं, और स्थानिक-अपघटन विधियाँ प्रत्येक खरीद के लिए सिमुलेशन बॉक्स के एक उप-क्षेत्र को असाइन करती हैं। ।
मैं आपको AD की कोशिश करने की सलाह देता हूं। इसे समझना और लागू करना सबसे आसान है। एफडी बहुत समान है। यहाँ एफवी का उपयोग करके CVA के साथ nVidia का एन-बॉडी सिमुलेशन है, जो आपको एक मोटा विचार देना चाहिए कि कैसे टाइलिंग और कटौती धारावाहिक प्रदर्शन को काफी हद तक पार करने में मदद कर सकती है।
एसडी कार्यान्वयन आमतौर पर तकनीकों का अनुकूलन कर रहे हैं, और लागू करने के लिए कोरियोग्राफी की कुछ डिग्री की आवश्यकता होती है। वे लगभग हमेशा तेज और बेहतर पैमाने पर हैं।
ऐसा इसलिए है क्योंकि AD / FD को प्रत्येक फोड़े के लिए "पड़ोसी सूची" बनाने की आवश्यकता होती है। यदि प्रत्येक नाव को अपने पड़ोसियों की स्थिति जानने की आवश्यकता है, तो उनके बीच संचार O ( n ²) है। आप प्रत्येक बोइल चेक के क्षेत्र के आकार को कम करने के लिए वेरलेट पड़ोसी सूचियों का उपयोग कर सकते हैं, जो आपको हर चरण के बजाय हर कुछ टाइमस्टेप्स की सूची को फिर से बनाने की अनुमति देता है, लेकिन यह अभी भी ओ ( एन ²) है। एसडी में, प्रत्येक सेल एक पड़ोसी सूची रखता है, जबकि ईडी / एफडी में प्रत्येक बोद की पड़ोसी सूची होती है। इसलिए एक-दूसरे के साथ संवाद करने वाले हर उब के बजाय, हर कोशिका एक-दूसरे के साथ संचार करती है। संचार में यह कमी है कि गति में वृद्धि कहां से होती है।
दुर्भाग्य से boids समस्या SD को थोड़ा तोड़ देती है। प्रत्येक प्रोसेसर का एक सेल पर नज़र रखना सबसे अधिक फायदेमंद है जब पूरे क्षेत्र में कुछ हद तक समान रूप से वितरित होते हैं। लेकिन आप एक साथ क्लस्टर करना चाहते हैं! यदि आपका झुंड ठीक से व्यवहार कर रहा है, तो आपके प्रोसेसर का अधिकांश हिस्सा दूर टिक जाएगा, एक दूसरे के साथ खाली सूचियों का आदान-प्रदान होगा, और कोशिकाओं का एक छोटा समूह एक ही गणना एडी या एफडी का प्रदर्शन करेगा।
इससे निपटने के लिए, आप या तो गणितीय रूप से कोशिकाओं के आकार (जो स्थिर है) को किसी भी समय खाली कोशिकाओं की संख्या को कम कर सकते हैं, या क्वाड-पेड़ों के लिए बार्न्स-हट एल्गोरिथ्म का उपयोग कर सकते हैं। बीएच एल्गोरिथ्म अविश्वसनीय रूप से शक्तिशाली है। विरोधाभासी रूप से, समानांतर आर्किटेक्चर पर लागू करना बेहद मुश्किल है। ऐसा इसलिए है क्योंकि BH पेड़ अनियमित है, इसलिए समानांतर धागे इसे बेतहाशा अलग-अलग गति से पार करेंगे, जिसके परिणामस्वरूप धागा विचलन होगा। सैल्मन और डबिन्स्की ने ऑर्थोगोनल पुनरावर्ती द्विध्रुव एल्गोरिदम को प्रोसेसर के बीच समान रूप से वितरित करने के लिए प्रस्तुत किया है, जिसे अधिकांश समानांतर आर्किटेक्चरों के लिए पुनरावृत्त होना चाहिए।
जैसा कि आप देख सकते हैं, हम इस बिंदु पर स्पष्ट रूप से अनुकूलन और काले जादू के दायरे में हैं। फिर से, प्लिम्प्टन के पेपर को पढ़ने की कोशिश करें और देखें कि क्या इसका कोई मतलब है।