आयाम-अज्ञेय कोड के लिए फास्ट, लाइटवेट सी ++ टेंसर लाइब्रेरी


20

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

कोई सुझाव?

ध्यान दें: मुझे Eigen पर एक नज़र पड़ी है और लगता है कि यह लगभग प्रोफ़ाइल को ठीक करता है, अगर यह 2D टेंसर तक सीमित नहीं था। अगर मुझसे गलती हुई है, तो कृपया मुझे सुधारें।

जवाबों:


9

FTensor एक हल्का, हेडर है, पूरी तरह से टेम्प्लेटेड लाइब्रेरी जिसमें एर्गोनोमिक समेशन नोटेशन शामिल है। यह बड़े पैमाने पर 2, 3 और 4 आयामों में परीक्षण किया गया है, लेकिन किसी भी संख्या में आयामों के लिए ठीक काम करना चाहिए।


6

इसके लायक के लिए, Eigen में एक असमर्थित मॉड्यूल के रूप में एक Tensor वर्ग है।

http://eigen.tuxfamily.org/dox-devel/unsupported/group_ CXX11 _Tensor__Module.html

मैंने स्वयं इसका उपयोग नहीं किया है इसलिए इसके बारे में अधिक नहीं कह सकता।

आर्माडिलो क्लास लाइब्रेरी में एक 3-ऑर्डर टेंसर क्लास है।

http://arma.sourceforge.net/

मैंने आर्माडिलो की दसियों क्षमताओं का उपयोग नहीं किया है, लेकिन मानक मैट्रिक्स कक्षाओं के साथ प्रयोग किया है और वे उपयोग करने में आसान हैं और अच्छा प्रदर्शन करते हैं।


2
अधिक विशेष रूप से,
आर्माडिलो

6

मुझे लगता है कि यह नया tacoदायित्व वास्तव में भी अच्छा है।

Tensor Algebra Compiler (taco) एक C ++ लाइब्रेरी है जो विरल और घने टेनर्स पर दसियों बीजगणित के भावों की गणना करता है। यह स्पार्स टेंसर बीजगणित और विरल रैखिक बीजगणित दोनों के लिए व्यापक रूप से उपयोग किए जाने वाले पुस्तकालयों में हाथ से अनुकूलित गुठली के साथ प्रदर्शन प्रतिस्पर्धी पाने के लिए उपन्यास कंपाइलर तकनीकों का उपयोग करता है।

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

टॉक: https://www.youtube.com/watch?v=Kffbzf9etLE पेपर: http://tensor-compiler.org/kjolstad-oopsla17-tensor-compiler.pdf


2
SciComp.SE में आपका स्वागत है! क्या आप पुस्तकालय का वर्णन करने के लिए अपने उत्तर का विस्तार कर सकते हैं (लिंक मृत हो सकते हैं) और विशेष रूप से यह ओपी की आवश्यकताओं को कैसे पूरा करता है? अन्यथा यह एक टिप्पणी की अधिक है।
क्रिश्चियन क्लैसन

एक बहुत ही दिलचस्प पुस्तकालय की तरह लगता है! ऐसा लगता है कि यह एक अतिरिक्त संकलन कदम उत्पन्न करता है, हालांकि। मैं सोच रहा हूं कि क्या इसके बजाय टेम्पलेट्स का उपयोग करके इसे लागू करना संभव होगा?
हैलोगूडीबाई


4

सौदा। II पुस्तकालय ( http://www.dealii.org ), जबकि बहुत बड़े उद्देश्यों के लिए लिखा गया है, में टेनसर कक्षाओं की एक उप-लाइब्रेरी भी है, जो संभवत: बहुत कुछ करती है जो आप करना चाहते हैं। विशेष रूप से, यह आयाम के लिए टेम्पलेट्स का उपयोग करता है।

(अस्वीकरण: मैं इस पुस्तकालय के प्रमुख लेखकों में से एक हूं।)


2

लाइब्रेरी Boost.Numeric.uBlas ने हाल ही में एक टेंसर एक्सटेंशन जोड़ा है जिसे बूस्ट संस्करण 1.70 के साथ शिप किया गया है। कृपया https://github.com/boostorg/ublas पर एक नज़र डालें । यह रनटाइम-वैरिएबल ऑर्डर (आयामों की संख्या), पहले और अंतिम-ऑर्डर स्टोरेज फॉर्मेट (कॉलम- और पंक्ति-प्रमुख) के आयामों के साथ मानक मैट्रिक्स और टेंसर संचालन प्रदान करता है। तुम भी आसानी से आइंस्टीन सम्मिलन का उपयोग कर सकते हैं व्यक्त करने के लिए एट्रिब्यूटेंट टेंसर गुणन। Boost.Numeric.uBlas केवल हेडर है और मौजूदा परियोजनाओं में एकीकृत करना आसान है।


तुम भी Godbolt पर पुस्तकालय के साथ खेलने की कोशिश कर सकते हैं: Godbolt.org/z/Sf5V77
Cem Bassoy



1

LTensor ( https://code.google.com/p/ltensor/ ) एक बहुत आसान है, जो C ++ टेम्प्लेट लाइब्रेरी का उपयोग करने के लिए रैंक 4 (रैंक के आधार पर इंडिक नोटेशन) तक तेज और हल्का है। आपको केवल मुख्य हेडर फ़ाइल को शामिल करने के लिए कुछ भी संकलन करने की आवश्यकता नहीं है। मैंने कई परियोजनाओं पर इसका उपयोग किया है और ठीक काम किया है।

इसमें रेंक -2 टेनर्स जैसे लीनियर सॉल्वर्स, svd, LU और चोल्स्की डीकंपोजिशन आदि के लिए कुछ बिल्ट-इन फीचर्स हैं। मैंने इनमें से किसी का भी इस्तेमाल नहीं किया (मैं इसके लिए अन्य लाइब्रेरीज़ का इस्तेमाल करता हूं)।


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