2011-02-08 12 views
6

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

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

  2. शुद्ध डी में लिखा जाना चाहिए या शुद्ध डी के लिए आसानी से अनुवाद योग्य होना चाहिए। अतुलनीय फोरट्रान कोड (यानी LAPACK) कोई अच्छा जवाब नहीं है चाहे कितना तेज़ हो।

  3. बड़े (यानी एन> 1000) सिस्टम के लिए अनुकूलित किया जाना चाहिए। मैं कुछ ऐसा नहीं चाहता जो गेम प्रोग्रामर के लिए वास्तव में तेज़ 4x4 मैट्रिक्स को हल करने के लिए डिज़ाइन किया गया हो।

  4. अलंघनीय सामान की बड़ी लाइब्रेरी मैं की जरूरत नहीं है से जुड़ा हुआ नहीं किया जाना चाहिए।

संपादित करें: इन प्रतीत होता है पागल आवश्यकताओं के लिए कारण यह है कि मैं एक permissively लाइसेंस प्राप्त खुला स्रोत पुस्तकालय है कि मैं किसी भी तीसरे पक्ष के निर्भरता नहीं करना चाहते हैं के लिए इस कोड की आवश्यकता है।

+1

ए के पास क्या गुण हैं? सममित? सकारात्मक? सकारात्मक रूप से निश्चित? बैंडेड? विरल? आप कुछ तेज़, सार्वजनिक डोमेन मांगते हैं और LAPACK को छोड़ देते हैं! ऐसा लगता है कि आप वास्तव में एक समाधान चाहते हैं! क्या आप जानते हैं कि सभी प्रदर्शन रैखिक हलकों को हैंडबुक से लिया गया है? –

+0

"हैंडबुक" क्या है? – Baxissimo

+0

@ बैक्सिसिमो "स्वचालित गणना के लिए हैंडबुक: लीनियर बीजगणित" मूल रूप से 1 9 72 में प्रकाशित, जेएच विल्किन्सन और सी रेन्सच –

उत्तर

3

यदि आपको फोरट्रान कोड पसंद नहीं है, तो मामूली बहु-कोर समर्थन के साथ एक उचित तेज़ सी ++ घने मैट्रिक्स लाइब्रेरी, अच्छी तरह से लिखित कोड और एक अच्छा उपयोगकर्ता-इंटरफ़ेस Eigen है। यह डी को अपने कोड का अनुवाद करने के लिए सीधा होना चाहिए (या इससे कुछ एल्गोरिदम लेना)।

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

तो मेरी दृष्टिकोण सी इंटरफेस के खिलाफ अपने मैट्रिक्स प्रकार के आधार पर संबंधित लाइब्रेरी, और डी से लिंक के लिए बाइंडिंग लिखने के लिए होगा। शायद multiarray में बाइंडिंग पर्याप्त हैं (मैंने कोशिश नहीं की है)। अन्यथा, मैं सुझाव देता हूं कि अन्य सी ++ लाइब्रेरी, अर्थात् uBlas और विचारों के लिए संबंधित bindings देखें।

+0

द्वारा लिखित, LAPACK के साथ समस्या आदि। मुझे कोड के एक छोटे से हिस्से के लिए इसकी आवश्यकता है और मुझे नहीं चाहिए निर्भरता। इसके अलावा, मैं ईजिन का उपयोग नहीं कर सकता क्योंकि यह एलजीपीएल है, इसलिए मेरा डी अनुवाद प्रतिलिपि द्वारा कवर किया जाएगा। – dsimcha

+0

@dsimcha: समझ में आता है।शायद ईजिन के आंशिक पिवोट LU और त्रिकोणीयकरण स्रोत को देखकर सहायक हो सकता है। मुझे संदेह है कि एल्गोरिदम एलजीपीएल द्वारा कवर किए गए हैं (यह देखते हुए कि वे पिछले शैक्षणिक शोध के आधार पर सबसे अधिक संभावना रखते हैं), लेकिन मैं वकील नहीं हूं। LAPACK निर्भरता के लिए: यह उतना बड़ा नहीं हो सकता जितना दिखता है। एलएपीएक्स ओएस एक्स पर पूर्व-स्थापित है, या तो पूर्व-स्थापित या यूनिक्स/लिनक्स पर एक उपयुक्त है, और विंडोज़ बाइनरी आसानी से उपलब्ध हैं। लेकिन मैं एक मृत घोड़े को फेंकना नहीं चाहता ... – stephan

+0

मुझे पता है कि मैंने विंडोज़ पर काम करने में कभी भी काम नहीं किया है जब मैंने एक असंबंधित कारण की कोशिश की थी। (मुझे विवरण याद नहीं है।) शायद अगर मैं समझता हूं कि, मैं अपनी धीमी शुद्ध डी रूटीन को डिफ़ॉल्ट के रूप में कैसे रखूंगा और एक -वर्जन = LAPACK ध्वज जोड़ूंगा ताकि यदि आपके पास LAPACK इंस्टॉल हो और गति की आवश्यकता हो, तो आप प्राप्त कर सकते हैं। (इस सॉल्वर का प्रदर्शन केवल अपेक्षाकृत असामान्य मामले में महत्वपूर्ण है कि एन बड़ा है। छोटे एन के लिए, बेवकूफ एल्गोरिदम पर्याप्त तेज़ हैं।) – dsimcha

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