2009-07-01 12 views
14

मैं C++ में हाइपरबोलिक आंशिक अंतर समीकरणों के लिए एक सॉफ्टवेयर लिख रहा हूं। लगभग सभी नोटेशन वेक्टर और मैट्रिक्स वाले हैं। उस पर, मुझे रैखिक बीजगणित सॉल्वर की आवश्यकता है। और हां, वेक्टर और मैट्रिक्स के आकार काफी भिन्न हो सकते हैं (1000 से आकार तक कहें जिन्हें केवल वितरित मेमोरी कंप्यूटिंग द्वारा हल किया जा सकता है, उदाहरण के लिए क्लस्टर या इसी तरह की वास्तुकला)। अगर मैं यूटोपिया में रहता था, तो मुझे रैखिक सॉल्वर होता था जो क्लस्टर, जीपीयू और मल्टीकोर के लिए बहुत अच्छा था।ublas बनाम मैट्रिक्स टेम्पलेट लाइब्रेरी (MTL4)

डेटा संरचना के बारे में सोचते समय जो चर का प्रतिनिधित्व करना चाहिए, मैं boost.ublas और MTL4 accros आया। दोनों पुस्तकालय ब्लैस स्तर 3 संगत हैं, एमटीएल 4 स्पैस सॉल्वर लागू करता है और यूब्ला से बहुत तेज़ है। दोनों ने मल्टीकोर प्रोसेसर के लिए समर्थन लागू नहीं किया है, वितरित स्मृति गणना के लिए समानांतरता का उल्लेख नहीं किया है। दूसरी तरफ, एमटीएल 4 का विकास 2 डेवलपर्स (कम से कम मुझे समझ में आया) के एकमात्र प्रयास पर निर्भर करता है, और मुझे यकीन है कि उबलस बूस्ट लाइब्रेरी में है। इसके अलावा, इंटेल की एमकेएल लाइब्रेरी में यूब्ला के साथ अपनी संरचना को बाध्य करने का उदाहरण शामिल है। मैं अपने डेटा और सॉफ़्टवेयर को डेटा संरचना में बांधना चाहता हूं जो लंबे समय तक ठोस, विकसित और बनाए रखा जाएगा।

अंत में, प्रश्न। Ublas और/या mtl4 के उपयोग के साथ आपका अनुभव क्या है, और आप क्या सलाह देंगे?

thanx, mightydodol

+0

उत्तर के लिए बड़ा thanx ... – dodol

+0

@mightydodol: आपका स्वागत है। मैंने एक पेपर के लिए एक लिंक जोड़ा जो मैं पूरे दिन की तलाश में था। आपको यह दिलचस्प लगेगा। स्कालापैक के बारे में एक वास्तविक त्रुटि को भी सही किया।Eigen को इंगित करने के लिए – stephan

+0

thanx। @stephan हाँ, पेपर वास्तव में दिलचस्प था। मेरे जैसा लगभग एक ही समस्या है। – dodol

उत्तर

11

अपनी आवश्यकताओं के साथ, मैं शायद BOOST::uBLAS के लिए जाना होगा। दरअसल, यूबीएलएएस की अच्छी तैनाती लगभग एमटीएल 4 के साथ गति के बराबर होनी चाहिए।

कारण वहाँ मौजूद है कि ATLAS के लिए bindings (इसलिए शेयर्ड मेमोरी बनता है कि आप कुशलतापूर्वक अपने कंप्यूटर के लिए अनुकूलन कर सकते हैं), और भी विक्रेता-देखते Intel Math Kernel Library या HP MLIB तरह कार्यान्वयन है।

इन बाइंडिंग के साथ, गणित करने वाले एक अच्छी तरह से ट्यून किए गए एटलस/बीएलएएस लाइब्रेरी के साथ यूब्लास पर्याप्त तेज़ होना चाहिए। आप किसी दिए गए BLAS/एटलस के खिलाफ लिंक हैं, तो आप एक ही BLAS/संकलक झंडा -DMTL_HAS_BLAS का उपयोग कर एटलस के खिलाफ जुड़ा हुआ MTL4 के साथ बराबर के मोटे तौर पर सबसे अधिक संभावना MTL4 की तुलना में तेजी BLAS बिना अपने स्वयं के observation (उदाहरण के अनुसार here देख होना चाहिए, और, जहां GotoBLAS एमटीएल 4 से बेहतर प्रदर्शन करता है)।

समेकित करने के लिए, जब तक आप कुछ बीएलएस पुस्तकालय का उपयोग करने के इच्छुक नहीं हैं, तब तक गति आपके निर्णायक कारक नहीं होनी चाहिए। प्रयोज्यता और समर्थन अधिक महत्वपूर्ण है। आपको यह तय करना होगा कि एमटीएल या यूबीएलएएस आपके लिए बेहतर है या नहीं। मैं यूब्लास की तरफ जाता हूं कि यह बूस्ट का हिस्सा है, और एमटीएल 4 वर्तमान में केवल बीएलएएस selectively का समर्थन करता है। आपको यह थोड़ा दिनांक comparison of scientific C++ packages दिलचस्प भी मिल सकता है।

एक बड़ा लेकिन: आपकी आवश्यकताओं (अत्यधिक बड़ी matrices) के लिए, मैं शायद "सिंटेक्टिक चीनी" ublas या एमटीएल छोड़ देंगे, और सीधे "ब्लैक/LAPACK" धातु "सी" इंटरफेस को बुलाओ। लेकिन यह सिर्फ मुझे है ... एक और फायदा यह है कि बड़ी समस्याओं के लिए ScaLAPACK (वितरित स्मृति LAPACK, कभी इसका उपयोग नहीं किया गया) पर स्विच करना आसान होना चाहिए। बस स्पष्ट होना: घर की समस्याओं के लिए, मैं सीधे बीएलएएस पुस्तकालय को कॉल करने का सुझाव नहीं दूंगा।

1

आप सीधे यहाँ प्रदर्शन अंतर देख सकते हैं: http://www.osl.iu.edu/research/mtl/mtl4/doc/performance.php3

दोनों उचित पुस्तकालयों के अपने इंटरफेस के संदर्भ में उपयोग करने के लिए कर रहे हैं, मुझे नहीं लगता कि यह जरूरी रास्ता और अधिक मजबूत है, क्योंकि uBLAS बूस्ट समीक्षा प्रक्रिया के माध्यम से मिल गया है ।मेरे पास दुःस्वप्न के साझेदारी के साथ दुःस्वप्न का हिस्सा है और यूबीएलएएस कार्यान्वयन से अनपेक्षित परिणाम हैं।

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

दिन के अंत में, यह एक मैट्रिक्स लाइब्रेरी के साथ गति के बारे में है, एमटीएल 4 के साथ जाएं।

8

आप सी ++ में वैक्टर, मैट्रिक्स, और रेखीय बीजगणित प्रोग्रामिंग कर रहे हैं, मैं Eigen को देखो चाहते हैं:

http://eigen.tuxfamily.org/

यह uBLAS (MTL4 बारे में निश्चित नहीं) और अधिक स्वच्छ वाक्य रचना सबसे तेज़ है।

+0

ईजिन एकमात्र अन्य मैट्रिक्स लाइब्रेरी है जो ATLAS/LAPACK के अलावा हम उपयोग करते हैं। यह छोटे matrices (100 पंक्तियों से नीचे) के लिए मैट्रिक्स गुणा के लिए काफी तेज़ है और बड़े matrices के लिए एक मानक ATLAS/गैर विक्रेता-ट्यूनेड बीएलएएस के प्रदर्शन में तुलनीय है (बशर्ते प्रोसेसर एसएसई निर्देशों का समर्थन करता है)। हालांकि यह बड़ी मैट्रिक्स के लिए उन्नत रैखिक बीजगणित (उदा। एलयू अपघटन) के लिए एटीएलएएस/एलएपीएसी से काफी धीमी है और बहु-कोर प्रोसेसर का समर्थन नहीं करता है। – stephan

+0

क्या मैं गलत हूं, या क्या ईजिन में जटिल मैट्रिक्स के लिए समर्थन नहीं है? –

+0

@quant_dev: मुझे विश्वास है कि यह सही है, हालांकि मुझे संदेह है कि डेवलपर्स इसके साथ मदद करने के इच्छुक होंगे। मैं डेवलपर्स में से एक नहीं हूँ। –

0

एमटीएल 4 का एक समानांतर संस्करण है। बस simunova

1

अपने अनुभव से, एमटीएल 4 यूब्लास से बहुत तेज है और यह ईजिन से भी तेज है।

2

एक सी ++ पुस्तकालय इस सूची में लापता है: FLENS

http://flens.sf.net

अस्वीकरण: हाँ, यह मेरे बच्चे

  • यह शीर्षक है है केवल
  • एक सरल के साथ आता है, गैर-निष्पादक, जेनेरिक (यानी टेम्पलेटेड) सी ++ संदर्भ बीएलएएस का संदर्भ।
  • यदि उपलब्ध हो तो आप बैकएंड के रूप में एक अनुकूलित बीएलएएस कार्यान्वयन का उपयोग कर सकते हैं। इस मामले में इसे सीधे बीएलएएस (some Benchmark I should update) का उपयोग करना पसंद है।
  • आप overloaded operators instead of calling BLAS functions का उपयोग कर सकते हैं।
  • यह अपने स्वयं के, अकेले, एलएपीएक्स कार्यों के समूह के सामान्य पुन: लागू करने के साथ आता है। हम इस पोर्ट को FLENS-LAPACK कहते हैं।
  • FLENS-LAPACK में नेटलिब के LAPACK के समान सटीकता और प्रदर्शन है। और मेरे अनुभव में (FLENS-) LAPACK + ATLAS या (FLENS-) LAPACK + OpenBLAS आपको ACML या MKL के समान प्रदर्शन देता है।
  • रैलेन के पास रैखिक बीजगणित अभिव्यक्तियों के मूल्यांकन में अस्थायी वेक्टर/मैट्रिस के निर्माण के संबंध में एक अलग नीति है। FLENS नीति है: उन्हें कभी न बनाएं !!! हालांकि, special debug-mode में हम "आवश्यक होने पर अस्थायी" निर्माण की अनुमति देते हैं। यह "जब आवश्यक हो" पॉलिसी चीज ईजिन या अर्माडिलो या मैटलैब जैसे अन्य पुस्तकालयों में डिफ़ॉल्ट है।
+0

आपकी वेबसाइट साफ़ है, लेकिन दस्तावेज़ीकरण कठिन है ... उदा। एक सममित मैट्रिक्स पर eigen अपघटन कैसे करें? एक संक्षिप्त संदर्भ पत्र (उदा। ईजिन) अधिक उपयोगकर्ताओं को आकर्षित करेगा, आईएमएचओ। – zhanxw

+0

रैखिक बीजगणित कार्यों का एक अवलोकन [FLENS-LAPACK] (http://apfel.mathematik.uni-ulm.de/~lehn/FLENS/flens/lapack/lapack.html) के अंतर्गत पाया जा सकता है। हालांकि, आप सही हैं, यहां प्रलेखन पूरा नहीं हुआ है। यह अक्सर आवश्यक कार्यक्षमता के साथ-साथ एक फ़ंक्शंस पर केंद्रित है जिसे मैंने पहले से ही FLENS/C++ पर पोर्ट किया है। लेकिन अधिकांश LAPACK दिनचर्या का उपयोग तब किया जा सकता है जब मूल LAPACK कार्यान्वयन उपलब्ध हो। ... मैं लेखन पर कुछ अतिरिक्त समय बिताने और दस्तावेज़ीकरण को आगे बढ़ाने की कोशिश करूंगा। 2013 के बाद से –

5

नई परियोजनाओं के लिए, बूस्ट के यूब्लस से दूर रहना शायद सबसे अच्छा है। यूबीएलएएस एफएक्यू के बाद भी 2012 के बाद से यह चेतावनी है:

प्रश्न: क्या मुझे नई परियोजनाओं के लिए यूबीएलएएस का उपयोग करना चाहिए? ... यूबीएलएएस का अंतिम बड़ा सुधार 2008 में था और 200 9 से कोई महत्वपूर्ण बदलाव नहीं हुआ था ... प्रदर्शन? तेज विकल्प हैं। अग्रणी? यूबीएलएएस 10 साल से अधिक पुराना है और सी ++ 11 से सभी नई चीजें चूक गई है।

+0

, यह मूल्यवान जानकारी है। इस पोस्ट के विषय में कुछ पूरी तरह से अप्रासंगिक: मुझे लगता है कि "वैकल्पिक" शब्द में चीजों, प्रस्तावों, या क्रिया के पाठ्यक्रमों के रूप में एक या सभी संभावनाएं शामिल हैं (इसलिए बहुवचन रूप की आवश्यकता नहीं है) यानी वैकल्पिक पुस्तकालय तेज़ हैं। – dodol

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