मुझे अपनी आवश्यकताओं को तोड़ने की कोशिश करें:
- रख-रखाव
- पाठ डेटा पढ़ना / लिखना
- एलयू कारकों के लिए मजबूत इंटरफेस / क्षमता
- विरल लीनियर सॉल्वर्स
- बड़े डेटा के लिए प्रदर्शन और मापनीयता
इस सूची से, मैं निम्नलिखित भाषाओं पर विचार करूंगा:
सी, सी ++, फोरट्रान, पायथन, MATLAB, जावा
जूलिया एक आशाजनक नई भाषा है, लेकिन समुदाय अभी भी इसके चारों ओर बन रहा है और इसे किसी भी प्रमुख नए कोड में तैनात नहीं किया गया है।
पाठ डेटा पढ़ना / लिखना
यह किसी भी प्रोग्रामिंग भाषा में सही होना आसान है। सुनिश्चित करें कि आप उचित रूप से बफरिंग कर रहे हैं और आपके I / O एक्सेस को सहूलियत दे रहे हैं, और आप उन सभी भाषाओं से अच्छा प्रदर्शन प्राप्त करेंगे, जिन पर आप विचार करते हैं। C ++ में स्ट्रीम ऑब्जेक्ट्स से बचें जब तक कि आप उन्हें प्रदर्शन करने के तरीके का उपयोग करना नहीं जानते।
एलयू कारकों के लिए मजबूत इंटरफेस / क्षमता
यदि आप सघन LU फ़ैक्टर कर रहे हैं, तो आप समानांतर कार्यक्षमता के लिए LAPACK, या ScaLAPACK / Elemental का उपयोग करना चाहेंगे। LAPACK और ScaLAPACK को फोरट्रान में लिखा जाता है, तत्व C ++ में लिखा जाता है। सभी तीन पुस्तकालयों प्रदर्शन कर रहे हैं और अच्छी तरह से समर्थित और प्रलेखित। आप उन भाषाओं में से किसी पर भी विचार कर सकते हैं, जिस पर आपको विचार करना चाहिए।
विरल लीनियर सॉल्वर्स
प्रीमियर स्वतंत्र रूप से उपलब्ध विरल लीनियर सॉल्वर सी में लिखे PETSc के माध्यम से लगभग सभी उपलब्ध हैं , जो अच्छी तरह से प्रलेखित और समर्थित है। आप जिन भाषाओं पर विचार करना चाहते हैं, उनमें से पेट्सक में इंटरफ़ेस कर सकते हैं।
बड़े डेटा के लिए प्रदर्शन और मापनीयता
आपके द्वारा उल्लेखित एकमात्र समानांतर प्रोग्रामिंग प्रतिमान साझा की गई मेमोरी आधारित हैं, जिसका अर्थ है कि आप MPI- आधारित (संदेश-गुजरना), वितरित-मेमोरी कंप्यूटिंग दृष्टिकोण पर विचार नहीं कर रहे हैं। मेरे अनुभव में, कोड को लिखना बहुत आसान है जो एक वितरित स्मृति समाधान का उपयोग करके एक दर्जन कोर से परे अच्छी तरह से तराजू है। लगभग सभी विश्वविद्यालय "क्लस्टर" इन दिनों एमपीआई-आधारित हैं, बड़ी साझा-मेमोरी मशीनें महंगी हैं, और इसी तरह दुर्लभ हैं। आपको अपने दृष्टिकोण के लिए एमपीआई पर विचार करना चाहिए, लेकिन मेरी सलाह आपके द्वारा चुने गए प्रोग्रामिंग प्रतिमान की परवाह किए बिना लागू होगी।
ऑन-नोड प्रदर्शन के संबंध में, यदि आप स्वयं संख्यात्मक दिनचर्या लिख रहे हैं, तो फोरट्रान में अच्छा सीरियल प्रदर्शन प्राप्त करना आसान है। यदि आपके पास C, C ++, या Python का थोड़ा सा अनुभव है, तो आप बहुत तुलनीय प्रदर्शन प्राप्त कर सकते हैं (C और C ++ मृत हैं-यहां तक कि फोरट्रान, पायथन और MATLAB लगभग 25% समय के भीतर बिना किसी प्रयास के ओवरहेड में आते हैं)। MATLAB एक JIT संकलक और बहुत अच्छे रैखिक बीजगणित अभिव्यंजना के माध्यम से ऐसा करता है। आपको पायथन से दावा किए गए प्रदर्शन को प्राप्त करने के लिए साइथॉन, सुपीरियर, numexpr, या संख्यात्मक कर्नेल का उपयोग करने की संभावना होगी। मैं जावा के प्रदर्शन पर टिप्पणी नहीं कर सकता, क्योंकि मैं भाषा को बहुत अच्छी तरह से नहीं जानता, लेकिन मुझे संदेह है कि यह पायथन से दूर नहीं है यदि किसी विशेषज्ञ द्वारा लिखा गया है।
इंटरफेस पर एक नोट
मुझे आशा है कि मैंने आपको आश्वस्त किया है कि आप उन सभी प्रोग्रामिंग भाषाओं में जो आप चाहते हैं, उन सभी में आप कर सकते हैं। यदि आप जावा का उपयोग कर रहे हैं, तो सी इंटरफेस थोड़ा चुनौतीपूर्ण होगा। पायथन में ctypes, Cython और f2py के माध्यम से उत्कृष्ट C और फोरट्रान इंटरफ़ेस समर्थन है। LAPACK पहले से ही लपेटा हुआ है और स्कैपी के माध्यम से उपलब्ध है। MATLAB में आपके सभी मूल पुस्तकालयों में आवश्यक कार्यक्षमता है, लेकिन यह आसानी से स्केलेबल या विशेष रूप से क्लस्टर पर चलाने के लिए आसान नहीं है। जावा के साथ सी और फोरट्रान इंटरफेस का समर्थन कर सकते हैं JNI , लेकिन आमतौर पर समूहों पर और वैज्ञानिक कंप्यूटिंग के लिए समानांतर सॉफ्टवेयर में नहीं पाया जाता।
रख-रखाव
इसमें से बहुत कुछ व्यक्तिगत स्वाद में कमी आने वाला है, लेकिन स्थिरता पर आम सहमति यह है कि आप अपने सॉफ़्टवेयर में कोड की संख्या को कम करना चाहते हैं, अच्छी तरह से परिभाषित इंटरफेस के साथ मॉड्यूलर कोड लिखें, और कम्प्यूटेशनल सॉफ़्टवेयर के लिए प्रदान करें कार्यान्वयन की शुद्धता और कार्यक्षमता को सत्यापित करने वाले परीक्षण।
सिफ़ारिश करना
मुझे व्यक्तिगत रूप से पायथन के साथ बहुत कुछ मिला है और मैं इसे कई कम्प्यूटेशनल परियोजनाओं के लिए सलाह देता हूं। मुझे लगता है कि आपको अपनी परियोजना के लिए दृढ़ता से विचार करना चाहिए। पायथन और MATLAB संभवतः वैज्ञानिक कंप्यूटिंग के लिए उपलब्ध भाषाओं में से सबसे अधिक अभिव्यंजक हैं। आप पायथन को आसानी से किसी अन्य प्रोग्रामिंग भाषा में इंटरफ़ेस कर सकते हैं, आप अपने वर्तमान फोरट्रान कार्यान्वयन और टुकड़ा-दर-टुकड़ा फिर से लपेटने के लिए f2py का उपयोग कर सकते हैं, जो भी आप पायथन में काम करते हैं, वे यह सत्यापित करते हुए कि आप कार्यक्षमता बनाए रख रहे हैं। इस समय, मैं का एक संयोजन की सिफारिश करेंगे आधिकारिक अजगर 2.7 कार्यान्वयन के साथ scipy । आप बहुत आसानी से इस स्टैक के साथ स्वतंत्र रूप से उपलब्ध उत्साहित पायथन वितरण से शुरू कर सकते हैं ।
आप इसे C, C ++, या फोरट्रान में भी कर सकते हैं। C और C ++ बहुत अनुभव के साथ पेशेवर डेवलपर्स के लिए बहुत ही आकर्षक भाषाएं हैं, लेकिन अक्सर नए डेवलपर्स की यात्रा करते हैं और इस अर्थ में शायद अधिक अकादमिक कोड के लिए एक महान विचार नहीं है। फोरट्रान और MATLAB शैक्षणिक संगणना में लोकप्रिय हैं, लेकिन उन्नत डेटा संरचनाओं और अभिव्यक्तिशीलता पायथन प्रस्तावों (उदाहरण के लिए, पायथन की तानाशाह वस्तु के बारे में सोच) पर कमजोर हैं।
संबंधित सवाल: