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

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

परिभाषा
आईएसएल किसी दिए गए सरणी के माध्यम से स्वीप का एक क्रम (टाइमस्टेप कहा जाता है) निष्पादित करते हैं। आम तौर पर यह 2- या 3-आयामी नियमित ग्रिड होता है। सरणियों के तत्वों को अक्सर कोशिकाओं के रूप में जाना जाता है। प्रत्येक टाइमस्टेप में, सभी सरणी तत्व अद्यतन किए जाते हैं। एक निश्चित पैटर्न (स्टेंसिल) में पड़ोसी सरणी तत्वों का उपयोग करके, प्रत्येक सेल के नए मान की गणना की जाती है। अधिकांश मामलों में सीमा मानों को अपरिवर्तित छोड़ दिया जाता है, लेकिन कुछ मामलों में (उदाहरण के लिए लैटिस बोल्ट्ज़मैन विधियाँ) उन्हें गणना के दौरान भी समायोजित करने की आवश्यकता होती है। चूंकि प्रत्येक तत्व के लिए स्टेंसिल समान है, इसलिए डेटा एक्सेस का पैटर्न दोहराया जाता है। अधिक औपचारिक रूप से, हम ISL को N-tuple|5-tuple के रूप में परिभाषित कर सकते हैं $$(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