सीएफडी पुस्तकालय के विकास के लिए सी ++ या पायथन


13

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

1) सी ++:

  • जेनेरिक प्रोग्रामिंग, वर्चुअल फ़ंक्शंस, ओवरलोडिंग, स्पीड ...: जो भी आप चाहते हैं, उसे बनाने के लिए सभी शैलीगत + ओओपी उपकरण उपलब्ध हैं

  • निम्न स्तर की लाइब्रेरी ज्यादातर उपलब्ध हैं (कोई व्यापक प्रसार विज्ञान और इंजीनियरिंग पुस्तकालय विकास नहीं है, जैसे कि पायथन के लिए)

2) समानांतर कंप्यूटिंग के लिए पायथन + रैपर (pyOpenCL और अन्य)

  • विभिन्न प्रकार के सहायक कामों की बड़ी राशि

  • कोड आपको क्या लगता है: कार्यान्वयन वास्तव में तेजी से किया जाता है

  • धीमी निष्पादन समय

यदि आप एक फ्रेमवर्क को कोड करना चाहते थे जो विभिन्न तरीकों का समर्थन करेगा, जटिल ज्यामितीय और समस्याओं के साथ काम करेगा, तो आप क्या चुनेंगे और क्यों?


1
मैं pyOpenCL से बहुत परिचित नहीं हूं, लेकिन आम तौर पर पायथन बोलना 2 डी या 3 डी में मध्यम आकार की समस्याओं के लिए बहुत धीमी गति से होगा, जब तक कि आपके कम्प्यूटेशनल "गुठली" को निम्न-स्तरीय भाषा (फोरट्रान, सी, आदि) में लागू नहीं किया जाता है। )
डेविड केचेसन

जवाबों:


14

मैं जल्दी से पाने के लिए दोनों दुनिया के सर्वश्रेष्ठ को प्राप्त करने और "यूजर इंटरफेस" (यानी, आपके लाइब्रेरी के उपयोगकर्ता ज्यामिति और समस्या के अन्य गुणों का वर्णन करने के लिए कॉल करेगा) के कोड को कोड करने का लक्ष्य रखेगा। टर्नअराउंड समय, फिर सिमुलेशन रन समय C ++ में लिखें।

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

(यह कैसे मेपल के ODE / DAE सॉल्वर काम करता है, पायथन के बजाय मेपल का उपयोग करने को छोड़कर। पूर्ण प्रकटीकरण: मैं उनके लिए काम करता हूं।)


1
+1। पाइथन के अच्छे बिट्स में से एक है, यदि आवश्यक हो तो "प्योर पाइथन" से दूर जाने की क्षमता है।
फोमाइट

3

आप अपने एल्गोरिदम के लिए साइथन का उपयोग भी कर सकते हैं । यह अनिवार्य रूप से कुछ चरों के लिए अतिरिक्त प्रकार की जानकारी के साथ पायथन है जिसे "तेज़" होने की आवश्यकता है। यह पायथन कोड का सी कोड में अनुवाद करता है, जिसे बाद में आपके पसंदीदा सी कंपाइलर द्वारा संकलित किया जा सकता है। इस प्रकार की जानकारी को सावधानीपूर्वक जोड़ने से आपका कोड भोले पायथन कोड की तुलना में 150 गुना अधिक तेज हो सकता है।


2

मुझे लगता है कि इस सवाल के और भी पहलू हैं। सबसे पहले और सबसे पहले एक डेवलपर आम तौर पर पसंद करेगा कि वह तब तक परिचित है जब तक कि महत्वपूर्ण लाभ (जैसे उत्पादकता, विकास समय और उपकरण) में न हो। व्यक्तिगत रूप से, मैं उत्पादक होने को प्राथमिकता देता हूं (समय आमतौर पर सबसे दुर्लभ संसाधन है!) और यह उन विकल्पों को पसंद करता है जो मेरे अनुभव के आधार के करीब हैं।

शायद खाते में लेने के लिए भी प्रासंगिक हैं

3) विकास का समय

  • विकास के लिए कितना समय आरक्षित है
  • कार्य के परिणाम कब वितरित किए जाएंगे? और कैसे?
  • एक कोड पहले से मौजूद है जो काम कर सकता है? (विशिष्टता?)

4) रखरखाव

  • कितने (लोग) संसाधन रखरखाव के लिए समर्पित हैं?
  • कितने लोगों को कोड पर काम करना है?
  • क्या कोड को किसी बिंदु पर जारी किया जाना है? (मानदंड?)
  • क्या तृतीय-पक्ष पुस्तकालयों पर भरोसा करने वाला कोड है?

5) लाइसेंस जारी करना

  • अनुसंधान के लिए कोड है?
  • वाणिज्यिक अनुप्रयोगों के लिए कोड क्या है?

6) उत्पादकता और मज़ा कारक (अक्सर अनदेखी की!)

  • सबसे अधिक उत्पादक कहां हो सकता है?
  • सबसे मजेदार विकास कहां हो सकता है?
  • (सामाजिक) नेटवर्क का एक हिस्सा बनने के लिए कोई अवसर?

2

यह निर्भर करता है कि क्या आपका कोड इस प्रकार लिखा जा सकता है:

some_library_specific_type grid;

for t=0 to T do
    library_function_1(grid,...);
    library_function_2(grid,...);
end

या कुछ इस तरह लिखा जाना चाहिए:

some_home_made_mixture_of_native_types grid;

for t=0 to T do
    for all grid elements as g do
        some_function(g,...);
        library_function(g,...);
    end
end

पहले मामले में चुनें कि आपको कोड में सबसे ज्यादा क्या पसंद है; दूसरे मामले में किसी भी स्क्रिप्टिंग भाषा का उपयोग न करें या निष्पादन समय से पीड़ित होने के लिए तैयार रहें।


2

एलन के उत्तर के लिए एक कोरोलरी के रूप में (कि आपका अपना डेवलपर समय सबसे मूल्यवान संसाधन है): जो पहले से ही दूसरों ने किया है उसका उपयोग करें। आप कहते हैं कि आप कम्प्यूटेशनल निरंतरता यांत्रिकी के लिए एक पुस्तकालय विकसित करना चाहते हैं, लेकिन पहले से ही उनमें से कई हैं जो इतने बड़े हैं कि वे लगभग हमेशा पहले से ही आपके पास सब कुछ है जो आपको चाहिए। Deal.II पर एक नज़र डालें। उदाहरण के लिए, सब कुछ है कि एक परिमित तत्व समस्या के रूप में लिखा जा सकता है, OpenFOAM तरल पदार्थ गतिशीलता के लिए, या हाइपरबोलिक समस्याओं के लिए PyCLAW / CLAWPACK। डील। II, उदाहरण के लिए, आपको C ++ में प्रोग्राम करने के लिए कहता है लेकिन वास्तव में प्रोग्रामिंग का स्तर अक्सर इतना अधिक होता है कि कोई कह सकता है कि यह C ++ सिंटैक्स का उपयोग करके FEM कोड के लिए एक डोमेन-विशिष्ट भाषा की तरह है।


2
मुझे एक पुस्तकालय का कभी सामना नहीं करना पड़ा जिसमें मेरी जरूरत की हर चीज थी ...
जैक पॉल्सन

ठीक है, लेकिन तुम मुझे लगता है कि बिंदु मिलता है। कुछ पुस्तकालयों में "लगभग सब कुछ" हो सकता है जिनकी आपको आवश्यकता हो सकती है। उदाहरण के लिए, मैं विशेष रूप से परिचित हूं, पूरी तरह से आत्म-अनुकूली पर एक परिमित तत्व सॉल्वर, डील +II और कोड के 126 लाइनों का उपयोग करके 10,000+ प्रोसेसर पर चलने वाले 3 डी मेश। यह स्पष्ट रूप से शून्य से अधिक है, लेकिन यह वास्तव में बहुत कम संख्या है जो हुड के नीचे है की जटिलता को देखते हुए।
वुल्फगैंग बंगर्थ

शैतान के वकील की भूमिका निभाने के लिए, 10,000 कोर पर एक कोड चलाना तुच्छ है, लेकिन इसे स्केलेबल बनाने के लिए यह पूरी तरह से अलग मामला है। गैर-अण्डाकार समीकरणों के लिए कई समानांतर पूर्ववर्ती नहीं भी कुशलतापूर्वक 300 कोर पर चल सकते हैं।
जैक पॉल्सन

ज़रूर। लेकिन मैं जो उदाहरण देता हूं, वह स्केलेबल है: math.tamu.edu/~bangerth/publications/2010-distributed.pdf
वोल्फगैंग बैंगर्थ

पूर्ण प्रकटीकरण के हित में: मैं कागज और कोड दोनों के लेखकों में से एक हूं, जो ऊपर उल्लिखित है, साथ ही सामान्य रूप से सौदा II. पुस्तकालय भी है।
वोल्फगैंग बैंगर्थ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.