ไลบรารี C ++ tensor ที่รวดเร็วและน้ำหนักเบาสำหรับโค้ดมิติผู้ไม่เชื่อเรื่องพระเจ้า


20

ฉันกำลังมองหาไลบรารี C ++ tensor ที่สนับสนุนโค้ดมิติผู้ไม่เชื่อเรื่องพระเจ้า โดยเฉพาะฉันต้องดำเนินการตามแต่ละมิติ (สูงสุด 3) เช่นการคำนวณผลรวมถ่วงน้ำหนัก ขนาดคือพารามิเตอร์เทมเพลต (และทำให้ค่าคงที่เวลาคอมไพล์) ข้อ จำกัด อีกประการคือห้องสมุดควรมีน้ำหนักเบาดังนั้นจึงค่อนข้าง Eigen / Boost-style กว่า Trilinos / PETSc

ข้อเสนอแนะใด ๆ

หมายเหตุ: ฉันได้ดูที่ 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
โดยเฉพาะอย่างยิ่งอาร์มาดิลโล่มีคลาส Cubeซึ่งใช้เทนเซอร์ลำดับที่ 3
mtall

6

ฉันคิดว่าtacolib ใหม่นี้ก็ดีเหมือนกัน

Tensor Algebra Compiler (taco) เป็นไลบรารี C ++ ที่คำนวณนิพจน์พีชคณิตของเมตริกซ์บนเทนเซอร์เบาบางและหนาแน่น มันใช้เทคนิคคอมไพเลอร์นวนิยายเพื่อให้ได้ประสิทธิภาพในการแข่งขันกับเมล็ดที่ได้รับการปรับปรุงด้วยมือในห้องสมุดที่ใช้กันอย่างแพร่หลายสำหรับพีชคณิตเมตริกซ์แบบกระจาย

คุณสามารถใช้ taco เป็นไลบรารี C ++ ที่ให้คุณโหลดเทนเซอร์อ่านเทนเซอร์จากไฟล์และคำนวณนิพจน์เทนเซอร์ คุณยังสามารถใช้ taco เป็นตัวสร้างโค้ดที่สร้างฟังก์ชัน C ที่คำนวณนิพจน์เทนเซอร์

พูดคุย: https://www.youtube.com/watch?v=Kffbzf9etLE Paper: http://tensor-compiler.org/kjolstad-oopsla17-tensor-compiler.pdf


2
ยินดีต้อนรับสู่ SciComp.SE! คุณสามารถขยายคำตอบเพื่ออธิบายไลบรารี (ลิงก์อาจตายไปแล้ว) และโดยเฉพาะอย่างยิ่งมันตรงตามข้อกำหนดของ OP หรือไม่? มิฉะนั้นจะมีความคิดเห็นเพิ่มเติม
Christian Clason

ดูเหมือนห้องสมุดที่น่าสนใจมาก! ดูเหมือนว่านี้จะสร้างขั้นตอนการรวบรวมพิเศษ ฉันสงสัยว่ามันจะเป็นไปได้ไหมที่จะใช้สิ่งนี้โดยใช้แม่แบบแทน?
HelloGoodbye


4

ไลบรารี deal.II ( http://www.dealii.org ) ในขณะที่เขียนเพื่อวัตถุประสงค์ที่มีขนาดใหญ่กว่านั้นก็มีห้องสมุดย่อยของคลาสเทนเซอร์ที่น่าจะทำสิ่งที่คุณต้องการทำมากมาย โดยเฉพาะอย่างยิ่งมันใช้แม่แบบสำหรับมิติ

(ข้อจำกัดความรับผิดชอบ: ฉันเป็นหนึ่งในผู้เขียนหลักของห้องสมุดนี้)


2

ไลบรารีBoost.Numeric.uBlasเมื่อเร็ว ๆ นี้ได้เพิ่มส่วนขยายเทนเซอร์ซึ่งมาพร้อมกับ Boost เวอร์ชั่น 1.70 กรุณาดูได้ที่https://github.com/boostorg/ublas มันมีการดำเนินการเมทริกซ์มาตรฐานและเมตริกซ์ที่มีการสั่งซื้อตัวแปรรันไทม์ (จำนวนมิติ) ขนาดสำหรับรูปแบบการจัดเก็บข้อมูลครั้งแรกและครั้งสุดท้ายสั่งซื้อ (คอลัมน์ - และแถวหลัก) นอกจากนี้คุณยังสามารถใช้การประชุมสรุปผลรวมของ Einstein เพื่อแสดงการคูณของตัวนับอาร์บิวทีรี Boost.Numeric.uBlas เป็นส่วนหัวเท่านั้นและง่ายต่อการรวมเข้ากับโครงการที่มีอยู่


คุณอาจลองเล่นกับห้องสมุดใน Godbolt: godbolt.org/z/Sf5V77
Cem Bassoy



1

LTensor ( https://code.google.com/p/ltensor/ ) เป็นไลบรารีเทมเพลต C ++ ที่ใช้งานง่ายมากสำหรับเทนเซอร์ถึงเทนเซอร์อันดับ 4 (ขึ้นอยู่กับสัญกรณ์ indical) รวดเร็วและมีน้ำหนักเบา คุณไม่จำเป็นต้องรวบรวมสิ่งใดเพียงต้องการรวมไฟล์ส่วนหัวหลัก ฉันใช้มันกับหลาย ๆ โครงการและทำงานได้ดี

มันมีคุณสมบัติในตัวสำหรับเทนเซอร์อันดับ 2 เช่นตัวแก้เชิงเส้น svd, LU และ Cholesky เป็นต้นฉันไม่ได้ใช้มันเลย (ฉันใช้ไลบรารี่อื่น ๆ )


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.