वैज्ञानिक कंप्यूटिंग में आधुनिक सी ++?


22

मैं पुस्तकों या लेखों, या ब्लॉग-पोस्टों, या सामान्य रूप से किसी भी प्रकाशित सामग्री की तलाश कर रहा हूं, जो विशेष रूप से वैज्ञानिक कंप्यूटिंग में C ++ आधुनिक सुविधाओं (चाल शब्दार्थ, एसटीएल, पुनरावृत्तियों, आलसी मूल्यांकन, आदि) के उपयोग को संबोधित करता है। क्या आप कोई सुझाव दे सकते हैं?

मुझे लगता है कि इन नई विशेषताओं से कुशल कोड लिखना आसान हो जाएगा, लेकिन मुझे वास्तविक उदाहरण नहीं मिले हैं। अधिकांश संदर्भ जो मैंने पढ़ा है, वे C ++ के सामान्य उपयोगों के बारे में हैं, और इसमें वैज्ञानिक कंप्यूटिंग के उदाहरण नहीं हैं। इसलिए मैं C ++ आधुनिक सुविधाओं का उपयोग करके वैज्ञानिक कंप्यूटिंग कोड के स्तर (उदाहरण के लिए, न्यूमेरिकल रेसिपीज़) के स्तर पर (उदाहरण के लिए, उत्पादन कोड उदाहरण नहीं होना चाहिए, उदाहरण के लिए देख रहा हूँ।

ध्यान दें कि मैं इन सुविधाओं का उपयोग करने वाले पुस्तकालयों के बारे में नहीं पूछ रहा हूं। मैं लेखों / पुस्तकों / आदि के बारे में पूछ रहा हूं कि वैज्ञानिक कंप्यूटिंग में मैं इन सुविधाओं का कैसे उपयोग कर सकता हूं।


2
क्या आप "आधुनिक" के बारे में पूछ रहे हैं कि आजकल (बनाम 20 साल पहले) या "आधुनिक" विशेष रूप से C ++ 11/14 के अर्थ में सबसे अच्छा अभ्यास क्या समझा जाता है?
किरिल

2
@Kirill मुझे लगता है कि यह दोनों है। अधिकतर ऐसी चीज़ जो C ++ 11/14 का उपयोग करती है, लेकिन सर्वोत्तम प्रथाओं का पालन करती है।
becko

जवाबों:


11

आधुनिक C ++ निर्माण का उपयोग करने वाले पुस्तकालयों के दो उदाहरण:

  • दोनों eigen और armadillo पुस्तकालयों (रैखिक बीजगणित) कई आधुनिक C ++ कंस्ट्रक्शन का उपयोग करते हैं। उदाहरण के लिए, वे अंकगणितीय अभिव्यक्तियों को सरल बनाने के लिए दोनों अभिव्यक्ति टेम्पलेट्स का उपयोग करते हैं और कभी-कभी कुछ अस्थायीताओं को समाप्त कर सकते हैं:

http://eigen.tuxfamily.org

http://arma.sourceforge.net/

http://hpac.rwth-aachen.de/teaching/sem-accg-14/Armadillo.pdf (आर्मादिलो ​​में अभिव्यक्ति टेम्पलेट्स पर प्रस्तुति)

  • CGAL पुस्तकालय (कम्प्यूटेशनल ज्यामिति) कई आधुनिक C ++ सुविधाओं का उपयोग करता है (यह खासतौर पर टेम्पलेट्स और विशेषज्ञता का उपयोग करता है):

http://www.cgal.org

ध्यान दें:

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

  • कार्यक्रम में कोड की कितनी लाइनें हैं?
  • कितने वर्ग / टेम्पलेट?
  • कार्यकारी समय ?
  • स्मृति की खपत?

सब कुछ जो पहले दो को बढ़ाता है, उसे एक लागत के रूप में माना जा सकता है (क्योंकि यह कार्यक्रम को समझने और बनाए रखने के लिए कठिन बना सकता है), पिछले दो लोगों को कम करने वाली हर चीज एक लाभ है

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

प्रोग्रामर के आराम भी लागत / लाभ संतुलन में ध्यान में रखा जाने वाला एक महत्वपूर्ण कारक है: बहुत सारे टेम्पलेट्स के साथ, संकलन समय में काफी वृद्धि हो सकती है, और त्रुटि संदेशों को पार्स करना मुश्किल हो जाता है।

यह भी देखें

कम्प्यूटेशनल साइंस में उपयोगी C ++ टेम्प्लेट का उपयोग करके जेनेरिक और मेटा-प्रोग्रामिंग किस सीमा तक है?


2
वही आर्मडिलो के साथ-साथ ईगेन के लिए भी जाता है, नहीं?
dr.blochwave

हां, आप सही कह रहे हैं (मैं सिर्फ आर्मडिलो के दस्तावेज में जांचा हूं, मैं इससे परिचित हूं)। मैं पोस्ट एडिट कर रहा हूं।
ब्रूनोलेव

1
लंबे समय तक संकलन समय उल्लेख के लायक एक और लागत है।
किरिल

@Kirill, हाँ अच्छा बिंदु (संपादित करने के लिए पोस्ट संपादित), धन्यवाद।
ब्रूनो लेवी

10

मैं Deal.II पर एक नज़र डालने का सुझाव दूंगा। यह एसटीएल का उपयोग करता है, यह स्वयं के पुनरावृत्तियों, साझा किए गए बिंदुओं आदि है।

विभिन्न रैखिक सॉल्वर विभिन्न मेट्रिसेस का उपयोग कर सकते हैं क्योंकि यह कैसे डिजाइन किया गया था। मैं इस कदम के शब्दार्थ के किसी भी उपयोग में नहीं आया हूं, लेकिन इसका मतलब यह नहीं है कि वे वहां नहीं हैं। यहाँ एक लिंक है।


इसके अलावा OpenFOAM - टेम्पलेट्स का बहुत व्यापक उपयोग।
tpg2114

1
deal.II चाल शब्दार्थों का उपयोग नहीं करता है (क्योंकि यह C ++ 11 भाषा सुविधाओं का उपयोग करने से मना करता है - लेकिन यह C ++ 11 पुस्तकालय सुविधाओं का उपयोग करता है जिसके लिए पुराने संकलक के लिए BOOST में प्रतिस्थापन हैं)। हालांकि, यह मूल प्रश्न में पूछे गए सभी सहित, C ++ भाषा की हर सुविधा का बहुत अधिक उपयोग करता है।
वोल्फगैंग बैंगर्थ

विवरणों में एक बड़े पुस्तकालय को देखना आसान नहीं है।
माइकल

7

HPX पुस्तकालय सी की एक सीमा का गहन उपयोग करता ++ 11 कदम कंस्ट्रक्टर्स रूप में इस तरह की सुविधा है और यह भी की एक पूरी कार्यान्वयन होना करने के लिए लक्ष्य है N4409 (समानता के लिए सी ++ एक्सटेंशन के लिए कार्यकारी ड्राफ्ट, तकनीकी विनिर्देश)।

उनके पास अपनी साइट पर प्रकाशनों की एक सूची है जिसमें वैज्ञानिक गणना में तेजी लाने के लिए पुस्तकालय का उपयोग करने के कई उदाहरण शामिल हैं। पुस्तकालय की भी बहुत दिलचस्प चर्चा है और यह CppCast प्रकरण में आधुनिक C ++ का उपयोग है ।


Scicomp.se में आपका स्वागत है! यदि आप लिंक जोड़ते हैं या कुछ लेखों / पुस्तकों / ब्लॉग-पोस्टों का हवाला देते हैं जो इस लाइब्रेरी की वैज्ञानिक गणना के लिए चर्चा करते हैं, तो मैं खुशी से आपके उत्तर को बढ़ा दूंगा!
हार्डमैथ

5

मेरा सुझाव है कि वैज्ञानिक और इंजीनियरिंग सी ++: बार्टन और नैकमैन द्वारा उन्नत तकनीकों और उदाहरणों के साथ एक परिचय

तथ्य यह है कि इस पुस्तक को 1994 में प्रकाशित किया गया था, यह "आधुनिक तकनीकों" की आपकी कसौटी का उल्लंघन करता है। हालांकि, बार्टन और नैकमैन उस समय के सी ++ टेम्प्लेट के साथ संभव थे और अच्छे प्रदर्शन को प्राप्त करने के लिए उन्होंने जो नवीन तकनीकें तैयार की थीं, वे अभी भी नवीनतम सी ++ क्लास लाइब्रेरी में उपयोग की जाती हैं।


4

Deal.ii (जो पहले से ही यहां सुझाई गई थी) के अलावा, आप Dune लाइब्रेरी पर भी नज़र डाल सकते हैं, जो टेम्पलेट मेटाप्रोग्रामिंग, इटरेटर रेंज, स्मार्ट पॉइंटर्स, इत्यादि जैसी कुछ उन्नत C ++ सुविधाओं का व्यापक उपयोग करती है। हाल ही में एक छाप भी हैजोकिम शोबर्ल द्वारा , जो C ++ 11 सुविधाओं के उपयोग पर टिप्पणी करता है, उदाहरण के लिए मेमने के कार्यों की तरह, NGSolve में परिमित तत्व विधियों के कार्यान्वयन को सरल बनाने के लिए। बढ़ावावैज्ञानिक प्रोग्रामिंग से संबंधित कुछ पुस्तकालय भी हैं जैसे कि यूबीएलएएस, ग्राफ आदि, मुझे लगता है कि इनमें से अधिकांश पुस्तकालयों में आपको आधुनिक C ++ उपयोग के अच्छे उदाहरण मिलेंगे। हालाँकि, इस बात से अवगत रहें कि आप उन्नत / आधुनिक C ++ का उपयोग करने के बुरे उदाहरणों का सामना कर सकते हैं। कुछ मामलों में, कोड / डॉक्यूमेंटेशन को पढ़ते समय, मुझे यह महसूस हुआ कि कभी-कभार टीएमपी जैसे उन्नत कौशल दिखाने के लिए चीजें बहुत अधिक सामान्यीकृत होती हैं, जहां 99% सभी संभावित अनुप्रयोगों के लिए एक अधिक सरल कार्यान्वयन भी होता है। काम।


3

पिट-फ्रांसिस एंड व्हाइटली की पुस्तक "गाइड टू साइंटिफिक कम्प्यूटिंग इन सी +" को इस तरह की (एसटीएल, पुनरावृत्तियों का उपयोग) का जवाब देने के लिए लिखा गया था, यह अमेज़ॅन के माध्यम से , या प्रकाशक से ई-बुक के रूप में उपलब्ध है ।

प्रकटीकरण - मैं लेखकों के रूप में एक ही शोध समूह में काम करता हूं , लेकिन फिर भी लगता है कि यह इसके लिए एक बहुत अच्छा संसाधन है!


1

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


0

ब्लेज़ पुस्तकालय रेखीय बीजगणित के लिए deduced और अनुगामी वापसी प्रकार के रूप में सी ++ 14 का गहन उपयोग करता। उपयोग में अन्य आधुनिक सी ++ विशेषताएं हैं constexpr, उपनाम उपनाम, और अभिव्यक्ति SFINAE के साथ टेम्पलेट मेटाप्रोग्रामिंग की एक पूरी बहुत कुछ।

आप अपने वैक्टर और मैट्रिसेस के लिए इनिशलाइज़र सूचियों का भी उपयोग कर सकते हैं, जैसे

blaze::DynamicVector<int> x{ 4, -1, 3 };

अधिक जानकारी के लिए उनके प्रारंभ पृष्ठ को देखें

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