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

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

परिभाषा
आईएसएल किसी दिए गए सरणी के माध्यम से स्वीप का क्रम (टाइमस्टेप कहा जाता है) निष्पादित करते हैं। सामान्यतः यह 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-पॉइंट स्टेंसिल भी पाया जा सकता है.

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

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

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

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

यह भी देखें

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

बाहरी संबंध

 * Physis
 * LibGeoDecomp
 * waLBerla