पुनरावृत्त स्टेंसिल लूप्स

पुनरावृत्त स्टेंसिल लूप्स (आईएसएल) संख्यात्मक डेटा प्रोसेसिंग हल का एक ऐसा वर्ग है जो किसी निश्चित पैटर्न के अनुसार सरणी अवयवों को अद्यतन करता है, जिसे स्टेंसिल कहा जाता है। वे सामान्यतः कंप्यूटर सिमुलेशन में पाए जाते हैं, इस प्रकार से उदाहरण के लिए वैज्ञानिक और इंजीनियरिंग अनुप्रयोगों के संदर्भ में कम्प्यूटेशनल तरल गतिशीलता के लिए है। अन्य उल्लेखनीय उदाहरणों में आंशिक अंतर समीकरण को हल करना, जैकोबी विधि कर्नेल, गॉस-सीडेल विधि, मूर्ति प्रोद्योगिकी और सेलुलर ऑटोमेटन सम्मिलित है। अतः सरणियों की नियमित संरचना स्टेंसिल तकनीकों को अन्य मॉडलिंग विधियों जैसे कि परिमित अवयव विधि से अलग करती है। नियमित ग्रिड पर कार्य करने वाली अधिकांश परिमित अंतर विधि को आईएसएल के रूप में तैयार किया जा सकता है।

परिभाषा
इस प्रकार से आईएसएल किसी दिए गए सरणी के माध्यम से स्वीप का क्रम (टाइमस्टेप कहा जाता है) निष्पादित करते हैं। सामान्यतः यह 2- या 3-आयामी नियमित ग्रिड होता है। सरणियों के अवयवों को अधिकांशतः सेलों के रूप में जाना जाता है। प्रत्येक टाइमस्टेप में, सभी सरणी अवयव अद्यतन किए जाते हैं। अतः निश्चित पैटर्न (स्टेंसिल) में निकटतम सरणी अवयवों का उपयोग करके, प्रत्येक सेल के नवीन मान की गणना की जाती है। अधिकांश स्थितियों में सीमा मानों को अपरिवर्तित छोड़ दिया जाता है, परन्तु कुछ स्थितियों में (इस प्रकार से उदाहरण के लिए लैटिस बोल्ट्ज़मैन विधियाँ) उन्हें गणना के समय भी समायोजित करने की आवश्यकता होती है। चूंकि प्रत्येक अवयव के लिए स्टेंसिल समान है, इसलिए डेटा एक्सेस का पैटर्न दोहराया जाता है।

इस प्रकार से अधिक औपचारिक रूप से, हम आईएसएल को निम्नलिखित अर्थ के साथ N-टुपल $$(I, S, S_0, s, T)$$ के रूप में परिभाषित कर सकते हैं:


 * $$I = \prod_{i=1}^k [0, \ldots, n_i]$$ सूचकांक समूह है। अतः यह सरणी की टोपोलॉजी को परिभाषित करता है।
 * $$S$$ अवस्था का (आवश्यक रूप से सीमित नहीं) समूह है, जिनमें से प्रत्येक सेल किसी भी समय चरण पर चल सकती है।
 * $$S_0\colon \Z^k \to S$$ समय 0 पर प्रणाली की प्रारंभिक स्थिति को परिभाषित करता है।
 * $$s \in \prod_{i=1}^l \Z^k$$ यह स्टेंसिल ही है और निकटवर्ती के वास्तविक आकार का वर्णन करता है। अतः स्टेंसिल में $$l$$ अवयव हैं।
 * $$T\colon S^l \to S$$ संक्रमण फलन है जिसका उपयोग किसी सेल की नवीन स्थिति को उसके निकटवर्तियों के आधार पर निर्धारित करने के लिए किया जाता है।

चूँकि I k-आयामी पूर्णांक अंतराल है, इसलिए सरणी में सदैव परिमित नियमित ग्रिड की टोपोलॉजी होगी। इस प्रकार से सरणी को सिमुलेशन समष्टि भी कहा जाता है और व्यक्तिगत सेलों की पहचान उनके सूचकांक $$c \in I$$ द्वारा की जाती है। स्टेंसिल $$l$$ सापेक्ष निर्देशांक का एक क्रमबद्ध समूह है। अतः अब हम प्रत्येक सेल $$c$$ के लिए प्राप्त उसके निकटतम सूचकांकों $$I_c$$
 * $$I_c = \{j \mid \exists x \in s: j = c + x\} \, $$ का टुपल प्राप्त कर सकते हैं।
 * इस प्रकार से उनकी अवस्था टुपल $$I_c$$ को अवस्था $$N_i(c)$$ के संगत टुपल में प्रतिचित्रित करके दिए गए हैं, जहाँ $$N_i\colon I \to S^l$$ को इस प्रकार परिभाषित किया गया है:



N_i(c) = (s_1, \ldots, s_l) \text{ with } s_j = S_i(I_c(j)) \, $$ अतः निम्नलिखित समय चरणों $$S_{i+1}\colon \Z^k \to S$$ के साथ $$i \in \N$$ के लिए प्रणाली की स्थिति को परिभाषित करने के लिए हमें मात्र इतना ही चाहिए:



S_{i+1}(c) = \begin{cases}T(N_i(c)), & c \in I\\ S_i(c),   & c \in \Z^k \setminus I  \end{cases} $$ ध्यान दें कि $$S_i$$ को $$\Z^k$$ पर परिभाषित किया गया है, न कि मात्र $$I$$ पर क्योंकि सीमा प्रतिबन्धों को भी निर्धारित करने की आवश्यकता है। अतः कभी-कभी $$I_c$$ के अवयव को टोराइडी टोपोलॉजी को साकार करने के लिए सिमुलेशन समष्टि के आयाम को सदिश योग मॉड्यूल द्वारा परिभाषित किया जा सकता है:



I_c = \{j \mid \exists x \in s: j = ((c + x) \mod(n_1, \ldots, n_k))\} $$
 * इस प्रकार से यह आवधिक सीमा प्रतिबन्धों को लागू करने के लिए उपयोगी हो सकता है, जो कुछ भौतिक मॉडलों को सरल बनाता है।

उदाहरण: 2डी जैकोबी पुनरावृत्ति
औपचारिक परिभाषा को स्पष्ट करने के लिए, हम देखेंगे कि दो आयामी जैकोबी विधि पुनरावृत्ति को कैसे परिभाषित किया जा सकता है। इस प्रकार से अद्यतन फलन सेल के चार निकटवर्तियों के अंकगणितीय माध्य की गणना करता है। इस स्थितियों में हम 0 के प्रारंभिक हल के साथ प्रारंभिक करते हैं। बाएँ और दाएँ सीमा 1 पर निर्धारित की जाती है, जबकि ऊपरी और निचली सीमाएँ 0 पर समूह की जाती हैं। इस प्रकार से पर्याप्त संख्या में पुनरावृत्तियों के पश्चात्, प्रणाली काठी-आकार में परिवर्तित हो जाता है।



\begin{align} I & = [0, \ldots, 99]^2 \\ S & = \R \\ S_0 &: \Z^2 \to \R \\ S_0((x, y)) & = \begin{cases} 1, & x < 0 \\ 0, & 0 \le x < 100 \\ 1, & x \ge 100 \end{cases}\\ s & = ((0, -1), (-1, 0), (1, 0), (0, 1)) \\ T &\colon \R^4 \to \R \\ T((x_1, x_2, x_3, x_4)) & = 0.25 \cdot (x_1 + x_2 + x_3 + x_4) \end{align} $$

स्टेंसिल
अतः अद्यतन के समय उपयोग किए जाने वाले निकटवर्ती का आकार एप्लिकेशन पर ही निर्भर करता है। सबसे सामान्य स्टेंसिल वॉन न्यूमैन निकटवर्ती और मूर निकटवर्ती के 2डी या 3डी संस्करण हैं। उपरोक्त उदाहरण 2डी वॉन न्यूमैन स्टैंसिल का उपयोग करता है जबकि एलबीएम कोड सामान्यतः इसके 3डी संस्करण का उपयोग करते हैं। इस प्रकार से कॉनवे का गेम ऑफ लाइफ 2डी मूर निकटवर्ती का उपयोग करता है।

अतः जैसा कि कहा गया है, भूकंपीय तरंग प्रसार के लिए 25-पॉइंट स्टेंसिल जैसे अन्य स्टेंसिल भी पाए जा सकते हैं।

कार्यान्वयन समस्या
इस प्रकार से कई सिमुलेशन कोड स्वाभाविक रूप से आईएसएल के रूप में तैयार किए जा सकते हैं। चूंकि कंप्यूटिंग समय और मेमोरी लागत सरणी अवयवों की संख्या के साथ रैखिक रूप से बढ़ती है, आईएसएल के समानांतर कार्यान्वयन अनुसंधान के लिए सबसे महत्वपूर्ण हैं। अतः यह आक्षेपपूर्ण है क्योंकि गणनाएं दृढ़ता से जुड़ी हुई हैं (निकटतम सेलों के आधार पर सेल अद्यतन के कारण) और अधिकांश आईएसएल मेमोरी बाउंड हैं (अर्थात गणना के लिए मेमोरी एक्सेस का अनुपात अधिक है)। इस प्रकार से आईएसएल को कुशलतापूर्वक निष्पादित करने के लिए वस्तुतः सभी वर्तमान समानांतर आर्किटेक्चर का पता लगाया गया है; फिलहाल जीपीजीपीयू सबसे कुशल सिद्ध हुए हैं।

लाइब्रेरी
अतः कंप्यूटर सिमुलेशन के लिए आईएसएल के महत्व और उनकी उच्च कम्प्यूटेशनल आवश्यकताओं दोनों के कारण, ऐसे कई प्रयास हैं जिनका उद्देश्य स्टैंसिल-आधारित गणना करने में वैज्ञानिकों का समर्थन करने के लिए पुन: प्रयोज्य लाइब्रेरी बनाना है। इस प्रकार से लाइब्रेरी अधिकांशतः समानांतरीकरण से संबंधित हैं, परन्तु आईओ, कम्प्यूटेशनल स्टीयरिंग और आवेदन जांच चौकी जैसी अन्य आक्षेपों से भी निपट सकते हैं। उन्हें उनके एपीआई द्वारा वर्गीकृत किया जा सकता है।

पैच-आधारित लाइब्रेरी
यह पारंपरिक डिज़ाइन है. लाइब्रेरी एन-आयामी अदिश सरणियों के समूह का प्रबंधन करती है, जिसे उपयोगकर्ता प्रोग्राम अद्यतन करने के लिए एक्सेस कर सकता है। इस प्रकार से लाइब्रेरी सीमाओं के सिंक्रनाइज़ेशन (जिसे पूर्व क्षेत्र या हेलो कहा जाता है) को संभालती है। इस इंटरफ़ेस का लाभ यह है कि उपयोगकर्ता प्रोग्राम सरणियों पर लूप कर सकता है, जिससे विरासत कोड को एकीकृत करना सरल हो जाता है। अतः हानि यह है कि लाइब्रेरी कैश ब्लॉकिंग (क्योंकि यह लूप के भीतर किया जाना है ) या एक्सेलेरेटर के लिए एपीआई-कॉल की रैपिंग (इस प्रकार से उदाहरण के लिए सीयूडीए या ओपनसीएल के माध्यम से) को संभाल नहीं सकती है। कार्यान्वयन में कैक्टस, भौतिकी समस्या हल वातावरण, और waLBerla सम्मिलित हैं।

सेल-आधारित लाइब्रेरी
इस प्रकार से ये लाइब्रेरी इंटरफ़ेस को एकल सिमुलेशन सेल को अद्यतन करने के लिए ले जाती हैं: मात्र वर्तमान सेल और उसके निकटतम ही अनावृत्त होते हैं, इस प्रकार से उदाहरण के लिए गेट्टर/सेटर विधियों के माध्यम से है। इस दृष्टिकोण का लाभ यह है कि लाइब्रेरी स्पष्ट नियंत्रित कर सकती है कि कौन से सेल किस क्रम में अद्यतन किए जाते हैं, जो न मात्र कैश ब्लॉकिंग को लागू करने के लिए उपयोगी है, परन्तु मल्टी-कोर और जीपीयू पर भी समान कोड चलाने के लिए भी उपयोगी है। अतः इस दृष्टिकोण के लिए उपयोगकर्ता को लाइब्रेरी के साथ स्रोत कोड को फिर से संकलित करने की आवश्यकता होती है। अन्यथा प्रत्येक सेल अद्यतन के लिए फलन कॉल की आवश्यकता होगी, जो निष्पादन को गंभीर रूप से निकृष्ट कर देगा। यह मात्र टेम्प्लेट (प्रोग्रामिंग) या मेटाप्रोग्रामिंग जैसी तकनीकों के साथ संभव है, यही कारण है कि यह डिज़ाइन मात्र नवीन लाइब्रेरी में ही पाया जाता है। इस प्रकार से उदाहरण Physis और LibGeoDecomp हैं।

यह भी देखें

 * उन्नत सिमुलेशन लाइब्रेरी
 * परिमित अंतर विधि
 * कंप्यूटर सिमुलेशन
 * पांच-बिंदु स्टेंसिल
 * स्टेंसिल जंपिंग
 * स्टेंसिल (संख्यात्मक विश्लेषण)

बाहरी संबंध

 * Physis
 * LibGeoDecomp
 * waLBerla