OpenMP जैसे साझा मेमोरी मोड में MPI-3.0 कैसे चलाएं


14

मैं 5 आयामी जनसंख्या संतुलन मॉडल को संख्यात्मक रूप से हल करने के लिए कोड को समानांतर कर रहा हूं। वर्तमान में मेरे पास FORTRAN में एक बहुत अच्छा MPICH2 समानांतर कोड है लेकिन जब हम पैरामीटर मान बढ़ाते हैं तो वितरित मेमोरी मोड में चलाने के लिए सरणियाँ बहुत बड़ी हो जाती हैं।

मेरे पास 15 नोड्स वाले एक क्लस्टर तक पहुंच है, जहां प्रत्येक नोड में दो 8 कोर सीपीयू और 128 जीबी रैम हैं। मैं साझा मेमोरी मोड में MPI-3.0 के साथ एक प्रोग्राम चलाना लिखना चाहता हूं ताकि प्रत्येक प्रक्रिया प्रत्येक सरणी की अपनी प्रति उत्पन्न न करे।

इससे पहले कि मैं क्लस्टर पर कुछ भी चला सकूं मुझे उबंटू चलाने वाले डेस्कटॉप पर इसका परीक्षण करना होगा। यह मूल रूप से क्लस्टर का एक ब्लेड है, जिसमें दो 8 कोर सीपीयू और 128 जीबी रैम हैं। मैं उस पर अपना कोड लिखूंगा और उसका परीक्षण करूंगा, इसलिए कृपया उबंटू कंप्यूटर पर प्रोग्राम चलाने की दिशा में अपनी प्रतिक्रिया दें।

मैंने पढ़ा है कि अपने डिफॉल्ट डिस्ट्रिब्यूटेड मेमोरी मोड के बजाय ओपनएमपी जैसी साझा मेमोरी मोड में एमपीआई-3.0 को चलाने का एक तरीका है।

प्रशन:

  1. मुझे अपना कोड कैसे बदलना होगा? क्या मुझे अन्य MPI फ़ंक्शन जैसे कॉल में जोड़ने की आवश्यकता है MPI_WIN_ALLOCATE?

  2. साझा मेमोरी मोड में MPI-3.0 को चलाने के लिए मैं अपना कोड कैसे संकलित करूं? यदि यह कई नोड्स से अधिक है तो क्या यह अलग होगा?

यदि आप कर सकते हैं तो कृपया नमूना संकलन स्क्रिप्ट दें। मेरे पास केवल जीएनयू कंपाइलर भी हैं। मैं जिस क्लस्टर का उपयोग करता हूं वह इंटेल कंपाइलरों का समर्थन नहीं करता है।


1
हाँ, आपको साझा मेमोरी सिस्टम पर MPI चलाने में सक्षम होना चाहिए। हालांकि, जिस तरह से यह वास्तव में क्रमादेशित है, वह समान होगा। साझा और वितरित मेमोरी सिस्टम दोनों के लिए आपका कोड समान होना चाहिए। इसे कैसे चलाया जाता है यह एकमात्र अंतर है।
NoseKnowsAll

इसके अलावा, हालांकि मैंने इसका परीक्षण नहीं किया है, मेरा मानना ​​है कि आपको mpiexec -n 8 /path/to/applicationअपने कंप्यूटर को नकली बनाने के लिए अपने कोड को चलाने में सक्षम होना चाहिए, यह सोचकर कि इसमें 8 अलग-अलग नोड्स हैं।
NoseKnowsAll

मैं इसे पहले ही एक साझा मेमोरी सिस्टम पर चला चुका हूं, लेकिन मैं चाहता हूं कि कंप्यूटिंग कोर को ओपनएमपी की तरह रैम साझा किया जाए। मेरी कुछ सरणियाँ 6 जीबी हैं इसलिए मुझे प्रत्येक नोड पर सभी मेमोरी को साझा मेमोरी मोड में संचालित करने की आवश्यकता है।
फ्रैंकलिन बेटेन

2
वैसे यह एक रिसर्च प्रोजेक्ट के लिए है। इसलिए मुझे समस्या का आकार बढ़ाने की आवश्यकता है। मेरे पास पहले से ही वर्किंग कोड है इसलिए स्केल को रोकने वाली एकमात्र चीज़ मेमोरी की आवश्यकता है। मैं MPI सम्मेलनों के कुछ दस्तावेज़ों और पावरपॉइंट्स पर आया हूं जो सुझाव देते हैं कि MPI-3.0 नए कॉल फ़ंतासियों के साथ मेमोरी साझा कर सकता है जो एकतरफा संचार कैटागरी के तहत जोड़े गए हैं। MPI_WIN_ALLOCATE_SHARE
फ्रेंकलिन

2
www.eurompi2014.org/tutorials/hoefler-advanced-mpi-eurompi14.pdf cs.utexas.edu/users/flame/BLISRetreat2014/slides/...
फ्रेंकलिन Betten

जवाबों:


0

मुझे यह लिंक स्टैक ओवरफ्लो पर भी मिला। मैं शपथ लेता हूं कि मैंने हमेशा के लिए अपने जैसे सवालों की तलाश की, लेकिन स्टैक ओवरफ्लो पर एक प्रश्न खोजने का सबसे अच्छा तरीका यह है कि एक प्रश्न बनाना शुरू किया जाए और यह इसी तरह के पदों का सुझाव देगा।

वैसे भी यहाँ लिंक है जो वास्तव में कहता है कि आप ओपन मेमोरी जैसे साझा मेमोरी मोड में MPI3.0 + चला सकते हैं। ऐसे अन्य स्रोत हैं जो मुझे मिले हैं और कुछ सुझाव भी देते हैं जो आप कर सकते हैं लेकिन यह समझाने के लिए कि कैसे या कैसे संसाधन दें।

/programming/24797298/mpi-fortran-code-how-to-share-data-on-node-via-openmp

इस कड़ी में यहाँ दी गई सलाह का पालन करने के बाद, मैं अपने कोड के शीर्ष पर USE 'mpi_f08' डालने के मुद्दों में भाग गया। मैं gfortran-4.8 का उपयोग कर रहा हूं, जो वर्तमान में USE mpi_f08 का पर्याप्त FORTRAN2008 समर्थन नहीं करता है। इस कड़ी में व्यक्ति शायद इंटेल फोरट्रान 2008 संकलक का उपयोग कर रहा था। आप USE mpi का उपयोग कर सकते हैं जो Fortran2003 तक अच्छी तरह से कवर है। हालाँकि मुझे नहीं लगता कि Fortran 2003 के प्रकार () फ़ंक्शन हैं, जिन्हें दूरस्थ मेमोरी एक्सेस फ़ंक्शन, जैसे MPI_WIN_ALLOCATE_SHARED, का उपयोग करने की आवश्यकता है, इसलिए आप उन्हें FORTRAN2008 के बिना उपयोग नहीं कर सकते। लेकिन मेरे पास निश्चित रूप से यह कहने के लिए पर्याप्त संसाधन नहीं हैं कि एक तथ्य के लिए, लेकिन जो मैंने पाया है वह सुझाव देता है।


1
आप तीनों फोरट्रान इंटरफेस के साथ MPI_Win_allocate_sared का उपयोग कर सकते हैं। इसके अलावा, आप फोरट्रान 2003 ISO_C_BINDING और C इंटरफ़ेस के साथ अपना स्वयं का लिख ​​सकते हैं।
जेफ

कृपया मुझे बताएं कि फोरमैन से आरएमए का उपयोग करने के लिए किसी को टाइप () की आवश्यकता क्यों है? मुझे ऐसी कोई सीमा नहीं है। RMA का उपयोग F77 के साथ कई वर्षों से किया जा रहा है।
जेफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.