2010-11-25 10 views
16

मेरे पास विभिन्न भाषाओं में प्रोग्रामिंग का उचित लटका है। मैं MATLAB (पिछले कुछ महीनों के दौरान) का उपयोग करके शोध के लिए अपने कोड कार्यान्वित कर रहा हूं और पहली बार वास्तव में ने MATLAB v $ सी की निष्पादन गति में अंतर देखा (जितना मुझे तेज तेज प्रोटोटाइप क्षमताओं से प्यार है)।(पुन) सी ++ (वैज्ञानिक कंप्यूटिंग के लिए) से शुरू

मैं सी ++ पिकअप करना चाहता हूं और अपने शोध में इसका उपयोग करना शुरू कर रहा हूं। मैं ओओपी से अवगत हूं और जावा के उचित बिट प्रोग्राम (अपेक्षाकृत लंबे समय तक) और सी ++ (यहां तक ​​कि लंबे समय तक) भी प्रोग्राम किया है। मैं एक ही पर संसाधनों के लिए सुझाव वास्तव में सी में गहरी पाने के लिए ++ अब और इसलिए चाहते हैं की जरूरत है: (। और stls)

  • क्या सी ++ चीजें मैं लेने की जरूरत है वास्तव में सी ++ का अच्छा इस्तेमाल के लिए?
  • आरंभ करने के लिए एक अच्छा ट्यूटोरियल/मैनुअल क्या है?
  • सी ++ के लिए संख्यात्मक/वैज्ञानिक पुस्तकालय क्या हैं? GSL? सी ++ के लिए Scipy/Numpy की समकक्ष (विशेषताएं) है?

मैं लिनक्स पर प्रोग्रामिंग करूँगा, इसलिए मैं g ++ का उपयोग करूँगा।

पिछले SO प्रश्नों के किसी भी पॉइंटर्स की भी सराहना की गई।

+0

यदि आपने वर्णन किया है कि आप किस प्रकार के एल्गोरिदम और डेटा संरचनाओं का उपयोग करेंगे, तो आपको शायद अधिक बेहतर उत्तर मिलेंगे। क्या यह सिर्फ संख्या है या आप प्रतीकात्मक गणना भी कर रहे हैं? क्या आप रैखिक बीजगणित, एफएफटी, लहरें आदि कर रहे हैं? –

उत्तर

7

आप को पाने के लिए चाहता हूँ जितनी जल्दी हो सके समांतर प्रोग्रामिंग के साथ पकड़ता है। संदेश-पासिंग के लिए मुझे Karniadakis and Kirby द्वारा इस पुस्तक को पसंद है। ओपनएमपी पर पुस्तकों में से, वितरित-मेमोरी प्रोग्रामिंग के लिए, this one सबसे अच्छा है।

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

ओह, मैं लगभग भूल गया BOOST है, जो बहुत जरूरी।

+7

वह सिर्फ सी ++ में जा रहा है। आपका दृष्टिकोण दौड़ने की स्थिति शुरू करने से पहले उसे कभी भी अपनी स्मृति रिसाव को हल नहीं करने जा रहा है। – xscott

+0

@xcott: अच्छा एक ;-) –

+0

@xscott: जैसा भी हो सकता है, लेकिन अगर कोई उच्च प्रदर्शन वैज्ञानिक कंप्यूटिंग के बारे में चिंतित है, तो जल्द ही उन्हें वास्तव में सभी मशीनों को अपनी मशीन पर उपयोग करने की आवश्यकता होगी, बल्कि 50% या 25% की गति से चलने से। 'फोर्क()' शायद थ्रेडिंग से पहले एक कोशिश के लायक है, हालांकि। –

2

इस ट्यूटोरियल बिल्कुल चट्टानों, लेकिन आप शुरू में यह से निपटने के लिए नहीं कर सकते हैं।

http://www.parashift.com/c++-faq/

एसटीएल (मानक टेम्पलेट लायब्रेरी) पर पढ़ने के लिए सुनिश्चित करें और अन्य सामग्री, साइटों का उपयोग कर की तरह है:

http://cplusplus.com/

और, बूस्ट पुस्तकालय की जाँच:

http://www.boost.org/

सी ++ का वास्तव में अच्छा उपयोग करने के लिए, आपको एल में सीखना होगा पूर्व एसटीएल, अकेले है कि आप समय की बहुत सारी बचत होगी, लेकिन parashift के रूप में उल्लेख है, सी ++ OOP केवल वस्तुओं के साथ प्रोग्रामिंग है, यदि आप गतिशील बाइंडिंग का उपयोग नहीं करते।

+0

आप इसे ध्वनि बनाते हैं जैसे "ऑब्जेक्ट्स के साथ प्रोग्रामिंग" (या फ़ंक्शंस, टेम्पलेट इत्यादि) में कुछ गड़बड़ है। गतिशील बाध्यकारी की उपयोगिता को रन प्रकार पर इनपुट के लिए प्रकार/वर्ग निर्धारित करने की आवश्यकता से संकेत मिलता है - कई क्षेत्रों में मानक से अधिक अपवाद। –

+0

मैं यह नहीं कह रहा हूं कि केवल वस्तुओं का उपयोग करने में कुछ भी गलत है। मैं बस इतना कह रहा हूं कि जब आपके पास बेस क्लास पॉइंटर्स का संग्रह होता है, तो असली शक्ति खेलती है। यहां वह हिस्सा है जिसका मैं जिक्र कर रहा था (मुझे लगता है, बस देखा गया है), लेकिन यह क्यों चला जाता है कि आभासी/गतिशील बाइंडिंग क्यों हैं महत्वपूर्ण: http://www.parashift.com/c++-faq/virtual-functions.html लेकिन नहीं, मैं यह इंगित करने की कोशिश नहीं कर रहा था कि यह बुरा था। – Josh

+1

दिलचस्प परिप्रेक्ष्य ... मेरे दिमाग के लिए - सी ++ की "असली" शक्ति तब खेलती है जब आप संकलन समय बहुरूपता (या किसी की आवश्यकता नहीं है) का उपयोग कर सकते हैं, और रनटाइम पॉलीमोर्फिज्म एक अजीब स्थिति में सबसे अच्छा (आमतौर पर) है (जो हमेशा स्वागत है, लेकिन अप्रत्याशित)। वैसे भी ... कोई चिंता नहीं :-)। –

4

पुस्तकालय की ओर, बाहर Armadillo की जाँच करें।यह almost gives you the full extent of MATLAB's array manipulation syntax और हुड के नीचे लैपैक और बीएलएएस (एटीएलएएस) का उपयोग करता है।

+0

यह भी सुझाव दिया गया है कि [एमएलपीएसी लाइब्रेरी] (http://mlpack.org), जो [आर्मडिलो] के शीर्ष पर निर्मित एक फास्ट मशीन लर्निंग लाइब्रेरी (वर्गीकरण, प्रतिगमन, क्लस्टरिंग इत्यादि) है (http: //arma.sourceforge .NET) – mtall

-2

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

+0

यह कुछ भी उपयोगी नहीं जोड़ता है। –

संबंधित मुद्दे

 संबंधित मुद्दे