समानांतर परिमित तत्व संगणना में एक जाल के प्रबंधन के लिए सर्वोत्तम तरीके?


11

मैं वर्तमान में बिखरने की समस्या के समाधान के लिए एक डोमेन अपघटन विधि विकसित कर रहा हूं। मूल रूप से मैं Helmholtz BVPs की एक प्रणाली को हल कर रहा हूँ। मैं त्रिकोणीय या टेट्राहेड्रल मेषों पर परिमित तत्व विधि का उपयोग करके समीकरणों का विवेक करता हूं। मैं अपने Phd थीसिस की ओर कोड विकसित कर रहा हूं। मुझे कुछ मौजूदा परिमित तत्व पुस्तकालयों के बारे में पता है, जैसे कि deal.ii या DUNE और हालांकि मुझे लगता है कि वे महान हैं, प्रेरणादायक डिजाइन और एपीआई के साथ, सीखने के उद्देश्यों के लिए मैं खरोंच से अपना छोटा अनुप्रयोग विकसित करना चाहता था।

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

मैं उन डेवलपर्स से पूछना चाहता था जो उच्च प्रदर्शन कंप्यूटिंग वातावरण में समान अनुप्रयोगों पर काम करते हैं कि वे इस मुद्दे से कैसे निपटते हैं।

वितरित मेष प्रबंधन के लिए p4est पुस्तकालय है। मुझे एएमआर की आवश्यकता नहीं है, इसलिए यह एक ओवरकिल हो सकता है क्योंकि मुझे केवल समान मेश का उपयोग करने में दिलचस्पी है और मुझे यकीन नहीं है कि यह त्रिकोणीय मेश को परिष्कृत कर सकता है। मैं भी बस एक समान जाल बना सकता हूं, फिर इसे मेष विभाजनकर्ताओं में से एक में फ़ीड कर सकता हूं और आउटपुट के कुछ पोस्ट प्रोसेसिंग कर सकता हूं।

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

अन्य दृष्टिकोण क्या हैं? यदि आप में से कुछ साझा कर सकते हैं, तो इस मुद्दे को संभालने से संबंधित उद्योग, या सरकारी अनुसंधान संस्थानों में आमतौर पर इस्तेमाल की जाने वाली कार्यप्रणाली में से कुछ क्या हैं? मैं एक समानांतर परिमित तत्व सॉल्वर की प्रोग्रामिंग करने के लिए काफी नया हूं और मैं इस बात को महसूस करना चाहता था कि मैं इस समस्या के बारे में सही तरीके से सोच रहा हूं या नहीं और अन्य इसे कैसे संपर्क कर रहे हैं। प्रासंगिक अनुसंधान लेखों के लिए कोई सलाह या संकेत बहुत सराहना की जाएगी!

अग्रिम में धन्यवाद!


यदि आप मेष विभाजनकर्ता की तलाश कर रहे हैं - METIS अच्छा विकल्प होगा। ParMETIS को भी चेक करें। मेष का प्रबंधन अलग कहानी है, ITAPS iMesh आपके लिए समाधान हो सकता है। कृपया मेरे प्रश्न के उत्तर यहां भी देखें: scicomp.stackexchange.com/questions/4750/…
Krzysztof Bzowski

@KrzysztofBzowski: क्या आपने स्कॉच लाइब्रेरी का उपयोग शायद किया है? मैं सोच रहा था कि स्कॉच और मेटिस के बीच अंतर क्या है जब यह परिमित तत्वों की बात आती है। IMesh परियोजना बहुत दिलचस्प लगती है। मैं इसके बारे में अगले कुछ दिनों में और पढ़ूंगा। मैं Deal.II, और DUNE के बारे में जानता हूं। मुझे याद है कि मैं कुछ समय पहले ओपनमैश में देख रहा था, लेकिन लगा कि स्क्रैच से मुझे जो कार्यक्षमता चाहिए, उसे लागू करना आसान होगा। अनुक्रमिक मेषों के लिए, मूल रूप से मैंने इस पेपर लिंक में प्रस्तुत आधे किनारे / चेहरे की डेटा संरचना को अनुकूलित किया था धन्यवाद!
मिडुराद

जवाबों:


7

यदि आप एएमआर का उपयोग नहीं कर रहे हैं और 1K-4K कोर से परे स्केल नहीं करना चाहते हैं तो बस ऐसा करें।

  1. रैंक 0 मेट और / स्कॉच आदि का उपयोग करके पूरे जाल और विभाजन को पढ़ता है (नोट: यह एक सीरियल ऑपरेशन है)।

  2. रैंक 0 अन्य सभी रैंकों के लिए तत्व / नोड विभाजन जानकारी को प्रसारित करता है और मेमोरी को मुक्त करता है (मेष को संग्रहीत करने के लिए उपयोग किया जाता है)

  3. सभी रैंकों ने एक ही इनपुट फ़ाइल से वे नोड्स / एलिमेंट्स (भूत नोड्स सहित) स्वयं पढ़े (नोट: 2000 रैंक एक ही इनपुट फ़ाइल तक पहुंचने में धीमी ध्वनि हो सकती है, लेकिन व्यवहार में नहीं है, हालांकि यह फ़ाइल सिस्टम के लिए बुरा हो सकता है, लेकिन तब हम केवल एक बार कर रहे हैं)।

  4. सभी रैंकों को बीसी के आवेदन के लिए ग्लोबल नोड / एलिमेंट / डॉफ मैपिंग के लिए लोकल बनाने की जरूरत है और मैट्रिसेस की असेंबलिंग और नोड्स को फिर से सेट करना होगा।

सब कुछ कहे जाने के बाद और किसी रैंक पर किया गया सारा डेटा स्थानीय होगा, इसलिए आपको अच्छी तरह से याद रखने में सक्षम होना चाहिए (मेमोरी वार)। मैं यह सब लगभग 100 लाइनों में करता हूं (देखें लाइनें 35-132 यहां ) मेरे एक छोटे से कोड में।

अब यदि आपका जाल बहुत बड़ा है (जैसे,> 100-250 मिलियन तत्व) कि आप इसे एक नोड पर METIS का उपयोग करके विभाजन नहीं कर सकते हैं और ParMETIS / PT-स्कॉच की आवश्यकता है, तो आपके पास सभी कोर / से पहले इसे समानांतर में विभाजित करने का अतिरिक्त कार्य है रैंक इसे पढ़ सकते हैं। ऐसे परिदृश्य में विभाजन के चरण को लॉजिस्टिक कारणों से मुख्य कोड से अलग रखना आसान हो सकता है।

Btw AMR का काम आमतौर पर न करते हैं। इसके अलावा PETSc अपने कोड के समानांतरण के लिए अच्छा विकल्प है।

संपादित करें: यहां और यहां देखें ।


अपना कोड साझा करने के लिए धन्यवाद! मैं सबसे अधिक संभावना है कि आपके द्वारा ऊपर उल्लिखित मार्ग लेगा। यह कम से कम जटिल लगता है और मुझे पहले से ही इस बारे में विचार है कि इसके बारे में कैसे जाना जाए। इसके अलावा यह MPI प्रोग्रामिंग में एक अच्छा व्यायाम होगा। आपने उल्लेख किया है कि एएमआर लिबास आमतौर पर टेट को संभालते नहीं हैं। क्या ऐसा इसलिए होगा क्योंकि त्रिकोणीय जालों के चतुष्कोणीय पेड़ खराब गुणवत्ता के जाल का कारण बन सकते हैं? रिफाइनिंग क्वैड्स आसान लगता है, लेकिन एक टीटी को चार में विभाजित करना मुश्किल लगता है अगर कोई गुणवत्ता को संरक्षित करना चाहता है। क्या पेट्सक के लिए सी ++ रैपर है शायद? मैं सी का उपयोग कर सकता हूं, लेकिन सी ++ बेहतर होगा।
मध्याह्न

@midurad यदि आप C ++ पर C पसंद करते हैं, तो आपको Trilinos पर विचार करना चाहिए, जो कि PETS के लिए C ++ लाइब्रेरी के बराबर है। इसके अलावा, Trilinos में एक पैकेज (Zoltan) है जिसे आप मेष विभाजन के प्रदर्शन के लिए उपयोग कर सकते हैं।
Dr_Sam

अगर आप PETSc का उपयोग करते हैं तो @midurad आपको केवल कुछ ही MPI कॉल की आवश्यकता है। रिफाइनिंग टेट्स को आसान होना चाहिए लेकिन संबंधित गतिशील डेटा संरचनाओं के साथ (कुशलतापूर्वक) व्यवहार करना कुछ विचार और काम की आवश्यकता हो सकती है। आपको C ++ के साथ PETSc का उपयोग करने में सक्षम होना चाहिए, लेकिन आपकी आवश्यकताओं को देखते हुए libmesh एक व्यवहार्य विकल्प हो सकता है (मुझे लगता है कि यह AMR और tets का समर्थन करता है)।
stali

सूचना के लिए आप को धन्यवाद। यह बहुत मददगार था।
मिडुराद

2

यह आपके लिए दिए गए आश्चर्य के रूप में नहीं आ सकता है कि मैं Deal.II विकसित करता हूं, लेकिन यहां मेरा दृष्टिकोण है: जब मैं छात्रों से बात करता हूं, तो मैं आमतौर पर उन्हें शुरुआत में अपना स्वयं का प्रोटोटाइप विकसित करने के लिए कहता हूं ताकि वे देख सकें कि यह कैसे किया जाता है। लेकिन फिर, एक बार जब उन्हें कुछ छोटा सा चल रहा होता है, तो मैं उन्हें एक पुस्तकालय का उपयोग करने देता हूं जो उन्हें बहुत आगे जाने की अनुमति देता है क्योंकि उन्हें मूल रूप से प्रत्येक कदम के साथ पहिया को सुदृढ़ करना नहीं है।

आपके मामले में, आप पहले ही देख चुके हैं कि एक साधारण हेल्महोल्त्ज़ सॉल्वर कैसे लागू किया जाए। लेकिन आपको अगले 6 महीने खर्च करने होंगे, कोड को समानांतर में करने के लिए आवश्यक है, यदि आप अधिक जटिल ज्यामिति का उपयोग करना चाहते हैं तो आप एक और 3 महीने खर्च करेंगे। यदि आप एक कुशल सॉल्वर चाहते हैं तो आप 6 और महीने बिताएंगे। और इस समय के सभी आप ऐसा कोड लिख रहे हैं जो पहले से ही किसी और द्वारा लिखा गया है और जो एक अर्थ में, आपको आपके पीएचडी के लिए वास्तव में क्या करने की आवश्यकता है, उसके करीब नहीं जाता है: कुछ नया विकसित करें जो कि नहीं हुआ है पहले किया। यदि आप इस सड़क के नीचे जाते हैं, तो आप अपने पीएचडी के 2-3 साल का समय बिताएंगे, जो दूसरों ने किया है, और शायद 1 साल कुछ नया करने में।

विकल्प यह है कि अब आप मौजूदा पुस्तकालयों में से एक सीखने में 6 महीने बिताते हैं, लेकिन इसके बाद आपके पास 2-3 साल होंगे जहां आप वास्तव में नया सामान बनाते हैं, ऐसी चीजें जहां हर दूसरे सप्ताह आप अपने सलाहकार के कार्यालय में जा सकते हैं और उसे दिखा सकते हैं / उसका कुछ ऐसा जो वास्तव में नया है, जो बड़े पैमाने पर चलता है, या अन्य मामलों में बहुत अच्छा है। मुझे लगता है कि आप शायद देखते हैं कि मैं अब तक कहां जा रहा हूं।


3
ईमानदार सवाल चूंकि आप इस पर स्पष्ट रूप से एक अधिकार हैं: जो अगली पीढ़ी के फ्रेमवर्क को डील की तरह लिखने जा रहा है। अगर पीएचडी छात्रों की वर्तमान फसल में कोई भी इस तरह की समस्याओं से नहीं निपटता है? हम पहले से ही आने वाले पीएचडी छात्रों की एक समस्याग्रस्त प्रवृत्ति देख रहे हैं जिन्होंने कभी भी एक कार्यक्रम संकलित नहीं किया है। यह मेरे लिए थोड़ा परेशान करने वाला है कि औसत कोड देव कौशल कम्प्यूटेशनल वैज्ञानिकों में लगातार गिरावट पर लगता है।
औरेलियस

1
यह एक उचित सवाल है। आपको अस्थि-पंजर और जिद्दी के रूप में स्नातक छात्रों की आवश्यकता है जैसा कि मैं :-) था, लेकिन मेरा जवाब है कि सिर्फ इसलिए कि हमें शायद कुछ ऐसे लोगों की ज़रूरत है जो इसका मतलब है, इसका मतलब यह नहीं है कि हमें हर किसी को अपने जीवन के वर्षों को दोहराने के लिए प्रोत्साहित करना चाहिए। दूसरों ने पहले ही लागू कर दिया है।
वोल्फगैंग बंगर्थ

2
हाँ, काफी उचित है। IMO, जो पिछले 20 वर्षों से CFD अनुसंधान की दुनिया में एक सबसे बड़ी चीज है, सॉफ्टवेयर इंजीनियरिंग प्रतिभा की कमी है और ग्रेबर्ड्स द्वारा आधुनिक सॉफ्टवेयर प्रथाओं की अस्वीकृति है। फ्रेमवर्क एक तरफ, इतने सारे पीएचडी छात्रों को खराब विरासत कोड द्वारा वापस आयोजित किया जाता है और आधुनिक हार्डवेयर पर आधुनिक संख्यात्मक तरीकों के लिए आवश्यक सॉफ़्टवेयर के जटिल टुकड़ों का निर्माण करने में असमर्थता होती है।
औरेलियस

मैं ग्रेबर्ड्स के बारे में बयान से असहमत नहीं हूं (हालांकि मेरा इन दिनों ग्रे रंग बदल रहा है ...)। लेकिन वे यह भी देखते हैं कि जब आप एक नया ग्रेड छात्र होते हैं, तो आपको crufty विरासत कोड के बीच चयन करना होगा या पहिया को फिर से मजबूत करना होगा। बहुत कम लोगों को उनके द्वारा लिखे गए सॉफ़्टवेयर के साथ सफलता प्राप्त करने का आनंद मिलता है (वर्तमान लेखक समझ में नहीं आता है), और आप उस सड़क के नीचे एक होनहार ग्रेड छात्र को नहीं भेजना चाहते हैं यदि आप नहीं जानते कि वे इसका करियर बना सकते हैं।
वोल्फगैंग बैंगर्थ

0

यह पूर्ण उत्तर नहीं है।

समानांतर डोमेन अपघटन विधियों के कार्यान्वयन के लिए, मुझे कुछ जटिलताओं का सामना करना पड़ा। सबसे पहले, एक एक उपडोमेन के लिए कई प्रोसेसर का उपयोग कर सकता है या कई उपडोमेन के साथ एक प्रोसेसर खिला सकता है और एक दोनों प्रतिमानों को लागू करना चाह सकता है। डोमेन अपघटन विधियों के दूसरे, अविकसित रूप को उप-डोमेन (तत्व का नहीं) चेहरे, किनारों, कोने को अलग करने की आवश्यकता होती है। मुझे नहीं लगता कि इन जटिलताओं को समानांतर जाल प्रबंधन में आसानी से शामिल किया गया है। यदि आप एक उपडोमेन के लिए एक प्रोसेसर और ओवरलैपिंग आरएएस / आरएएसएचओ विधि का उपयोग करते हैं, तो स्थिति सरल हो जाती है। इस मामले में भी, आप अपने समानांतर लेआउट का बेहतर प्रबंधन खुद करेंगे,

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.