คำแนะนำสำหรับไลบรารีเมทริกซ์ C ++ ที่ใช้งานได้เร็วหรือไม่


158

ไม่มีใครมีคำแนะนำเกี่ยวกับห้องสมุดเมทริกซ์ C ++ ที่ใช้งานได้เร็วหรือไม่?

สิ่งที่ฉันหมายถึงโดยใช้งานได้ดังต่อไปนี้:

  • วัตถุ Matrix มีส่วนต่อประสานที่ใช้งานง่าย (เช่น: ฉันสามารถใช้แถวและคอลัมน์ขณะทำดัชนี)
  • ฉันสามารถทำอะไรกับคลาสเมทริกซ์ที่ฉันสามารถทำได้กับ LAPACK และ BLAS
  • ง่ายต่อการเรียนรู้และใช้ API
  • ค่อนข้างลำบากในการติดตั้งใน Linux (ตอนนี้ฉันใช้ Ubuntu 11.04)

สำหรับฉันแล้วการใช้งานมีความสำคัญมากกว่าความเร็วหรือการใช้หน่วยความจำในขณะนี้เพื่อหลีกเลี่ยงการปรับให้เหมาะสมก่อนวัย ในการเขียนรหัสฉันสามารถใช้อาร์เรย์ 1 มิติ (หรือเวกเตอร์ STL) และดัชนีหรือตัวชี้ที่เหมาะสมเพื่อจำลองเมทริกซ์ แต่ฉันไม่ต้องการหลีกเลี่ยงข้อบกพร่อง ฉันยังต้องการที่จะมุ่งเน้นความพยายามของจิตกับปัญหาที่เกิดขึ้นจริงฉันพยายามที่จะแก้ปัญหาและโปรแกรมลงในโดเมนปัญหาแทนที่จะใช้ส่วนหนึ่งของความสนใจ จำกัด ของฉันที่จะจำเคล็ดลับการเขียนโปรแกรมเล็ก ๆ ทั้งหมดที่ฉันใช้ และจำคำสั่ง LAPACK และอื่น ๆ ยิ่งรหัสน้อยที่ฉันต้องเขียนและยิ่งมีมาตรฐานมากเท่าไหร่ก็ยิ่งดีเท่านั้น

ความหนาแน่นเมื่อเทียบกับหร็อมแหร็มยังไม่สำคัญ; เมทริกซ์บางตัวที่ฉันติดต่อด้วยจะเบาบาง แต่ไม่ใช่ทั้งหมด อย่างไรก็ตามถ้าแพ็คเกจใดจัดการกับเมทริกซ์ที่หนาแน่นหรือกระจัดกระจายได้ดีก็น่าจะกล่าวถึง

การสร้างเทมเพลตก็ไม่สำคัญสำหรับฉันเช่นกันเนื่องจากฉันจะทำงานกับประเภทตัวเลขมาตรฐานและไม่จำเป็นต้องเก็บสิ่งอื่นใดนอกจากเป็นสองเท่าทุ่นหรือ ints เป็นเรื่องดี แต่ไม่จำเป็นสำหรับสิ่งที่ฉันต้องการจะทำ


1
ใช้ตัวเลือก CUDA หรือไม่
flipchart

1
มันอาจจะเป็นในภายหลัง ฉันไม่สนใจ CUDA ในขณะนี้เพราะฉันกำลังสร้างห้องสมุดสำหรับแอปพลิเคชันที่การคูณเมทริกซ์เป็นสิ่งที่ฉันกังวลน้อยที่สุด ความพยายามจำนวนมากจะถูกใช้ไปกับการเรียกโปรแกรมแก้ปัญหาเชิงเส้นแบบจำนวนเต็มแบบผสมดังนั้นการใช้ CUDA จะเป็นการใช้จ่ายมากเกินไป หลังจากทำวิทยานิพนธ์เสร็จฉันวางแผนที่จะดูอัลกอริธึมที่เป็นพีชคณิตเชิงเส้นที่มีน้ำหนักมากขึ้น ฉันขอแนะนำให้คุณโพสต์เกี่ยวกับห้องสมุด CUDA แต่ถ้าคุณมีประสบการณ์กับพวกเขาเพราะฉันแน่ใจว่าคนอื่นจะสนใจที่จะรู้ความคิดของคุณ
Geoff Oxberry

แล้ว Intel MKL และ IPP ล่ะ?
Royi

คำตอบ:


146

ฉันได้รวบรวมสิ่งต่อไปนี้จากการวิจัยออนไลน์จนถึงตอนนี้:

ฉันใช้อาร์มาดิลโล่นิดหน่อยและพบว่าอินเทอร์เฟซใช้งานง่ายพอและมันง่ายที่จะหาแพ็คเกจไบนารีสำหรับ Ubuntu (และฉันคิดว่า Linux distros อื่น ๆ ) ฉันไม่ได้รวบรวมจากแหล่งที่มา แต่ความหวังของฉันคือมันจะไม่ยากเกินไป มันตรงตามเกณฑ์การออกแบบส่วนใหญ่ของฉันและใช้พีชคณิตเชิงเส้นหนาแน่น มันสามารถเรียกรูทีน LAPACK หรือ MKL โดยทั่วไปแล้วไม่จำเป็นต้องรวบรวมอาร์มาดิลโล่มันเป็นไลบรารีที่ใช้เทมเพลตล้วนๆ: คุณเพียงแค่ใส่ส่วนหัวและลิงค์ไปยัง BLAS / LAPACK หรือ MKL เป็นต้น

ฉันได้ยินสิ่งดีๆเกี่ยวกับEigenแต่ไม่ได้ใช้ มันอ้างว่าเร็วใช้ templating และสนับสนุนพีชคณิตเชิงเส้นหนาแน่น มันไม่มี LAPACK หรือ BLAS เป็นการพึ่งพา แต่ดูเหมือนว่าจะสามารถทำทุกสิ่งที่ LAPACK สามารถทำได้ (รวมถึงบางสิ่งที่ LAPACK ไม่สามารถทำได้) โครงการจำนวนมากใช้ Eigen ซึ่งมีแนวโน้ม มันมีแพ็คเกจไบนารีสำหรับ Ubuntu แต่ในฐานะห้องสมุดส่วนหัวเท่านั้นจึงไม่สำคัญที่จะใช้ที่อื่นเช่นกัน

The Matrix Template Libraryเวอร์ชัน 4 ยังดูมีแนวโน้มและใช้ templating รองรับทั้งพีชคณิตเชิงเส้นหนาแน่นและกระจัดกระจายและสามารถเรียกUMFPACKเป็นตัวแก้ปัญหากระจัดกระจาย คุณสมบัติค่อนข้างชัดเจนจากเว็บไซต์ของพวกเขา มันมีแพ็คเกจไบนารีสำหรับ Ubuntu สามารถดาวน์โหลดได้จากเว็บไซต์ของพวกเขา

PETScเขียนโดยทีมงานที่ Argonne National Laboratory มีการเข้าถึงตัวแก้เชิงเส้นแบบเบาบางและหนาแน่นดังนั้นฉันคิดว่ามันสามารถทำงานเป็นห้องสมุดเมทริกซ์ได้ มันเขียนใน C แต่มีการผูก C ++ ฉันคิดว่า (และแม้ว่ามันจะไม่ได้เรียก C จาก C ++ ไม่มีปัญหา) เอกสารอย่างละเอียดอย่างไม่น่าเชื่อ แพคเกจเป็นบิตมากเกินไปสำหรับสิ่งที่ฉันต้องการทำตอนนี้ (การคูณเมทริกซ์และการจัดทำดัชนีเพื่อตั้งโปรแกรมเชิงเส้นจำนวนเต็มแบบผสม) แต่อาจมีประโยชน์เป็นรูปแบบเมทริกซ์สำหรับฉันในอนาคตหรือสำหรับคนอื่นที่มีความต้องการที่แตกต่างกัน กว่าที่ฉันทำ

Trilinosเขียนโดยทีมงานที่ Sandia National Laboratory จัดเตรียมอินเทอร์เฟซ C ++ เชิงวัตถุสำหรับเมทริกซ์หนาแน่นและกระจัดกระจายผ่านองค์ประกอบ Epetra และอินเทอร์เฟซ templated สำหรับเมทริกซ์หนาแน่นและกระจัดกระจายผ่านส่วนประกอบ Tpetra นอกจากนี้ยังมีส่วนประกอบที่ให้การแก้ปัญหาเชิงเส้นและการทำงานของ eigensolver เอกสารดูเหมือนจะไม่ขัดหรือเด่นชัดเหมือนกับ PETSc; Trilinos ดูเหมือนว่าอนาล็อกของ Sandia ของ PETSc PETSc สามารถเรียกนักแก้ปัญหา Trilinos ได้บ้าง ไบนารีสำหรับ Trilinos พร้อมใช้งานสำหรับ Linux

Blitzเป็นไลบรารีเชิงวัตถุ C ++ ที่มีลินุกซ์ไบนารี ดูเหมือนจะไม่ได้รับการบำรุงรักษาอย่างแข็งขัน (2012-06-29: มีรุ่นใหม่เพิ่งปรากฏเมื่อวานนี้!) แม้ว่ารายชื่อผู้รับจดหมายจะเปิดใช้งานอยู่จึงมีชุมชนบางแห่งที่ใช้งาน ดูเหมือนจะไม่ได้ทำอะไรมากมายในทางของพีชคณิตเชิงเส้นที่เป็นตัวเลขนอกเหนือจาก BLAS และดูเหมือนว่าเป็นไลบรารีเมทริกซ์หนาแน่น มันใช้แม่แบบ

Boost :: uBLASเป็นไลบรารีเชิงวัตถุ C ++ และเป็นส่วนหนึ่งของโครงการ Boost รองรับพีชคณิตเชิงเส้นเทมเพลตและหนาแน่น ฉันได้ยินมาว่ามันไม่เร็วโดยเฉพาะ

แม่แบบตัวเลข Toolkitเป็นไลบรารี c ++ เชิงวัตถุพัฒนาโดย NIST ผู้เขียน Roldan Pozo ดูเหมือนว่าจะมีส่วนร่วมในการแก้ไขเป็นครั้งคราว แต่ดูเหมือนว่ามันจะไม่ได้อยู่ภายใต้การพัฒนาที่ใช้งานได้อีกต่อไป (ปรับปรุงล่าสุดคือ 2010) มันมุ่งเน้นไปที่พีชคณิตเชิงเส้นที่มีความหนาแน่นสูงและให้ส่วนต่อประสานสำหรับการสลายตัวเมทริกซ์ขั้นพื้นฐานบางอย่างและตัวแก้ปัญหาค่าเฉพาะ

ธาตุที่พัฒนาโดยแจ็ค Poulson เป็นหน่วยความจำแบบกระจาย (ขนาน) หนาแน่นแพคเกจซอฟต์แวร์พีชคณิตเชิงเส้นเขียนในลักษณะที่คล้ายกับเปลวไฟ สำหรับรายชื่อของคุณสมบัติและพื้นหลังในโครงการให้ดูเขาเอกสาร FLAME นั้นมีไลบรารีที่เกี่ยวข้องสำหรับพีชคณิตเชิงเส้นหนาแน่นและเรียงตามลำดับและหน่วยความจำร่วมซึ่งเรียกว่าlibflameซึ่งดูเหมือนว่าจะเขียนด้วยวัตถุเชิง C. C. Libflame มีลักษณะเหมือน LAPACK แต่มีสัญกรณ์ที่ดีกว่าสำหรับอัลกอริทึม ห้องสมุดพีชคณิตเชิงเส้นมีมากกว่าวิทยาศาสตร์และศิลปะสีดำน้อยลง

มีห้องสมุดอื่น ๆ ที่สามารถเพิ่มลงในรายการ หากเรานับแพคเกจพีชคณิตเชิงเส้นแบบกระจัดกระจายเป็น "เมทริกซ์ไลบรารี" สิ่งที่ดีที่สุดที่ฉันรู้จักใน C คือSuiteSparseซึ่งเขียนโปรแกรมในรูปแบบเชิงวัตถุ ฉันใช้ SuiteSparse และพบว่าค่อนข้างง่ายต่อการรับ มันขึ้นอยู่กับ BLAS และ LAPACK สำหรับอัลกอริทึมบางตัวที่สลายปัญหากระจัดกระจายเป็นปัญหาย่อยเชิงพีชคณิตเชิงเส้นขนาดเล็กจำนวนมาก ทิมเดวิสผู้เขียนหลักของแพคเกจมีประโยชน์อย่างเหลือเชื่อและเป็นคนที่เก่ง

Harwell Subroutine ห้องสมุดที่มีชื่อเสียงสำหรับเบาบางกิจวัตรพีชคณิตเชิงเส้นของพวกเขาและฟรีสำหรับผู้ใช้วิชาการแม้ว่าคุณจะต้องไปผ่านกระบวนการของการกรอกแบบฟอร์มและรับอีเมลสำหรับแต่ละไฟล์ที่คุณต้องการดาวน์โหลดนี้ เนื่องจากรูทีนย่อยมักมีการพึ่งพาการใช้ตัวแก้ปัญหาหนึ่งอาจต้องการดาวน์โหลดห้าหรือหกไฟล์และกระบวนการอาจค่อนข้างน่าเบื่อโดยเฉพาะอย่างยิ่งเนื่องจากการอนุมัติแบบฟอร์มไม่ได้เกิดขึ้นทันที

นอกจากนี้ยังมีตัวแก้ปัญหาพีชคณิตเชิงเส้นอื่น ๆ กระจัดกระจาย แต่เท่าที่ฉันสามารถบอกได้ว่าMUMPSและแพ็คเกจอื่น ๆ มุ่งเน้นไปที่การแก้ปัญหาของระบบเชิงเส้นเป็นส่วนใหญ่และการแก้ปัญหาระบบเชิงเส้นเป็นสิ่งที่ฉันกังวลน้อยที่สุด (ไม่ช้าฉันจะต้องใช้ฟังก์ชั่นนั้นและมันจะมีประโยชน์กับคนอื่น ๆ


2
ฉันคิดว่าคุณสับสน Eigen กับ Elemental; ฉันไม่ได้ทำงานกับ Eigen แต่ฉันประทับใจกับโครงการมาก องค์ประกอบส่วนใหญ่เป้าหมายเครื่องกระจายหน่วยความจำ
Jack Poulson

3
ฉันเดาคำถามแรกของฉันจะเป็น: คุณเคยต้องการที่จะทำงานอะไรในแบบคู่ขนาน?
Matt Knepley

1
ฉันควรพูดถึง Trilinos ... ถึงแม้ว่ามันจะไม่ได้รับการมองเห็นมากที่นี่ (แต่) มันเป็นทางเลือกที่ทำงานได้กับ PETSc ด้วยแพ็คเกจเมทริกซ์ templated, eigensolver และตัวแก้เมทริกซ์แบบเบาบาง แต่ก็มีแพ็คเกจ มีความหมายโดยเฉพาะสำหรับการสรุปการทำอัลกอริทึมโดยย่อ
Andrew Spott

1
Eigen ดูดีมาก - เพื่อนร่วมงานของฉันใช้มันในบริบทของมืออาชีพและมันจะช่วยให้คุณพร้อมและทำงานได้เร็วพอโดยไม่ต้องเสียสละประสิทธิภาพ
qdot

7
ฉันจะเพิ่มไลบรารี่ต่อไปนี้ในคำตอบของคุณ: ViennaCL - ไลบรารี่ส่วนหัว C ++ ที่ใช้ OpenCL ซึ่งสามารถเชื่อมต่อกับ Eigen และ MTL PLASMA - การออกแบบ UTK แบบใหม่ของไลบรารี BLAS และ LAPACK ที่มีการแยกส่วนประกอบแบบเรียงต่อกัน MAGMA - โครงการ UTK อีกหนึ่งโครงการที่มุ่งเน้นการปรับปรุงประสิทธิภาพ LAPACK / BLAS
Aron Ahmadia

24

เอกสารนี้ถูกเขียนในเดือนมีนาคม 2009 เพื่อช่วยในการเลือกห้องสมุดพีชคณิตเชิงเส้นสำหรับห้องสมุดวิทยาศาสตร์ มันประเมินความสามารถในการพกพาอินเตอร์เฟสระดับสูงและการอนุญาตให้ใช้สิทธิ์สำหรับห้องสมุดหลายแห่งซึ่ง ได้แก่ Eigen, GSL, Lapack ++ MTL, PETSc, Trilinos และ uBlas ดูเหมือนจะชอบFlensและSeldon เป็นพิเศษ (หนึ่งในข้อกำหนดคือต้องสนับสนุนเทมเพลต C ++ และเมทริกซ์กระจัดกระจาย)


17

จากโครงการทั้งหมดที่กล่าวมามีน้ำหนักหนักเพียงสองตัวเท่านั้นที่ใช้กันอย่างแพร่หลาย (และเพื่อเหตุผลที่ดี): PETSc และ Trilinos ทั้งสองได้รับการพัฒนาอย่างมืออาชีพและมีฐานผู้พัฒนาขนาดใหญ่ คนอื่น ๆ ทั้งหมดเป็นโครงการขนาดเล็กเมื่อเทียบกับสองคนนี้และฉันขอแนะนำให้ไปกับพวกเขาเพราะ (i) พวกเขาจะได้รับการสนับสนุนเป็นเวลานานและ (ii) พวกเขามีแนวโน้มที่จะมีฟังก์ชั่นทั้งหมดที่คุณต้องการ พีชคณิตเชิงเส้น (และอีกมากมายที่อยู่ด้านบน)


4
PETSc ไม่ได้มีอะไรมากกว่าอินเทอร์เฟซที่เป็นนามธรรมเล็กน้อยสำหรับ ScaLAPACK และ PLAPACK ถ้าเจฟฟ์สนใจพีชคณิตเชิงเส้นหนาแน่นที่สะดวกฉันคิดว่า PETSc เกินความเป็นจริง (ฉันไม่รู้มากพอเกี่ยวกับความสามารถในการแสดงความคิดเห็นที่หนาแน่นของ Trilinos)
Aron Ahmadia

@AronAhmadia: ณ จุดนี้ฉันคิดว่าคำตอบได้เปลี่ยนไปเป็นทรัพยากร wiki ของชุมชนมากขึ้นซึ่งเป็นสาเหตุที่ฉันได้เพิ่มแพ็คเกจตามคำขอของผู้แสดงความคิดเห็น
Geoff Oxberry

3
@ WolfgangBangerth: ฉันคิดว่ามันสำคัญที่จะพูดถึงเป้าหมายการออกแบบ หากเป้าหมายคือการเขียนซอฟต์แวร์ที่ใช้งานได้ยาวนานและตั้งใจให้ผู้อื่นใช้และพีชคณิตเชิงเส้นเป็นส่วนสำคัญของซอฟต์แวร์นั้น PETSc และ Trilinos เป็นตัวเลือกที่ดี อย่างไรก็ตามมีบางกรณีที่ตัวเลือกที่มีน้ำหนักเบามากกว่าเป็นที่นิยมและมีประโยชน์เพราะพวกเขามี API ที่ง่ายกว่าและสามารถทำงานเกือบเดียวกันในรหัสบรรทัดที่น้อยลง ในที่สุดอคติการเลือกมีบทบาทในการอยู่รอดของรหัส หากไม่มีใครใช้รหัสขนาดเล็กลงรหัสนั้นจะไม่คงอยู่หรือสร้างฐานเช่น PETSc และ Trilinos
Geoff Oxberry

1
เพื่อเพิ่มสิ่งที่เจฟฟ์กล่าวส่วนใหญ่หน้าที่ของ PETSc และ Trilinos นั้นมาจากการล้อมรอบห้องสมุดภายนอก ที่จะบอกว่าไม่มีใครควรใช้ห้องสมุดภายนอกพูดว่าแปลกสำหรับฉัน
Jack Poulson

1
@ JackPoulson: จริง ๆ แล้วฉันยืนตามความคิดเห็นของฉัน ใช่ PETSc ห่อของแต่ละแพคเกจมากมาย แต่มันทำเช่นนั้นด้วยอินเตอร์เฟสที่มีรูปแบบเหมือนกันดังนั้นจึงเป็นการง่ายกว่าที่จะเรียนรู้สิ่งนี้มากกว่าการเรียนรู้ลักษณะเฉพาะของแต่ละแพ็คเกจที่ตั้งชื่อแบบแผนและสไตล์ กล่าวอีกนัยหนึ่งในขณะที่แต่ละโครงการอาจใช้แพคเกจที่ห่อหุ้มได้ดีเท่า ๆ กัน แต่ก็มีการทำงานร่วมกันที่มาจากการใช้มันผ่าน PETSc ทุกครั้ง
Wolfgang Bangerth

11

ถ้าคุณต้องการ

  • คลาสเมทริกซ์ที่มีอินเตอร์เฟสที่ใช้งานง่าย
  • คุณสมบัติ LAPACK และ BLAS ทั้งหมด
  • ง่ายต่อการเรียนรู้และใช้ API
  • ติดตั้งง่าย

จากนั้นผมแนะนำให้คุณดูได้ที่ห้องสมุดของฉันFLENS ฉันออกแบบมาเพื่องานประเภทนี้อย่างแน่นอน อย่างไรก็ตามมันต้องการคอมไพเลอร์ที่สอดคล้องกับ C ++ 11 (เช่น gcc 4.7 หรือเสียงดังกราว)

FLENS ให้ประสิทธิภาพการทำงานเหมือนกับการใช้ BLAS มีมาตรฐาน (ค่อนข้างเก่า) ที่แสดงสิ่งนี้

สามารถพูดได้เหมือนกันเกี่ยวกับ FLENS-LAPACK มันให้ประสิทธิภาพการทำงานเดียวกับ LAPACK ของ Netlib หากใช้ BLAS เดียวกัน

เกี่ยวกับเกณฑ์มาตรฐานใหม่ให้ฉันเข้าไปดูรายละเอียดเพิ่มเติม ...

ก่อนหน้านี้ฉันถาม Clint Whaley (ผู้เขียน ATLAS) ว่าเขาคิดอย่างไรเกี่ยวกับเกณฑ์มาตรฐานที่เผยแพร่บนไซต์ Eigen เขาเพิ่งยืนยันผู้ต้องสงสัยของฉันว่ามาตรฐานเหล่านี้ส่วนใหญ่ไม่น่าเชื่อถือ ในขณะเดียวกันก็มีคนอื่นรู้ถึงมาตรฐานที่คลินต์แนะนำ รายละเอียดสามารถพบได้ในเว็บไซต์ ATLAS และรายชื่อผู้รับจดหมาย Eigen มาตรฐานไม่ได้ถูกนำเสนอเป็นอย่างดีในกราฟ แต่พวกเขาแสดงให้เห็นว่า ATLAS นั้นเร็วกว่า Eigen ประมาณ 40% สิ่งนี้ขัดแย้งกับมาตรฐานจากเว็บไซต์ Eigen แต่ยืนยันมาตรฐานอื่น ๆ (เช่นจาก blaze-lib)

โปรดทราบว่าสำหรับพีชคณิตเชิงเส้นเชิงตัวเลขที่หนาแน่นผลิตภัณฑ์เมทริกซ์เมทริกซ์นั้นมีความเกี่ยวข้องมากที่สุด ส่วนตัวฉันไม่สนใจว่า Eigen หรือ ATLAS นั้นเร็วกว่า ถ้า Eigen เร็วกว่า ATLAS ฉันจะใช้ Eigen เป็น BLAS-backend

ข้อจำกัดความรับผิดชอบ: ใช่ FLENS คือลูกของฉัน! นั่นหมายความว่าฉันเขียนรหัสประมาณ 95% และรหัสทุกบรรทัดมีค่า :-)


สวัสดีไมเคิลยินดีต้อนรับสู่ Scicomp URL ของคุณไม่ทำงานสำหรับฉันมีอะไรผิดปกติกับเซิร์ฟเวอร์ของคุณหรือไม่
Aron Ahmadia

ขอบคุณสำหรับคำใบ้ URL นั้นถูกต้อง แต่ดูเหมือนว่าเรากำลังมีปัญหาที่แผนกคณิตศาสตร์ด้วยไฟล์เซิร์ฟเวอร์ เพียงตรงเวลาสำหรับวันหยุดสุดสัปดาห์ ...
Michael Lehn

1
ตกลงฉันเพิ่งสร้างเอกสารใหม่จาก repo git ปัจจุบันและคัดลอกไปยังเซิร์ฟเวอร์อื่น: apfel.mathematik.uni-ulm.de/~lehn/FLENS/index.html
Michael Lehn


2

1

สิ่งที่จะเป็นห้องสมุดเมทริกซ์ที่ดีที่สุดสำหรับการจัดการกับเมทริกซ์ขนาดเล็กที่ใช้กันทั่วไปเช่นเมื่อประกอบเมทริกซ์ไฟไนต์อิลิเมนต์สำหรับการดำเนินการเทนเซอร์เป็นต้น

ฉันกำลังใช้ PETSc สำหรับการแก้ปัญหาของระบบเชิงเส้นขนาดใหญ่ที่เกิดขึ้นในแอปพลิเคชันของฉัน แต่ตอนนี้ฉันกำลังใช้ไลบรารีแบบง่ายของฉันเพื่อจัดการเมทริกซ์ / เวกเตอร์เหล่านี้ ... เหมือนที่กล่าวไว้ข้างต้น

อะไรคือทางเลือกที่ดีที่สุดในการจับคู่กับ PETSc Eigen? ตัวนิ่ม? BOOST :: uBlas? MTL4? ฉันใช้บางอย่างจาก BOOST ดังนั้นก่อนอื่นฉันก็คิดถึงการใช้ BOOST :: uBlas แต่ไม่มีเอกสารตัวอย่างและอื่น ๆ อีกมาก ...


2
ฉันขอแนะนำอย่างยิ่งให้ไม่ใช้ uBlas เนื่องจากเป็นที่ทราบกันว่ามีลำดับความสำคัญช้ากว่าการใช้ BLAS ตามปกติ ฉันคิดว่า Eigen ฉายแสงมากที่สุดสำหรับเมทริกซ์เล็ก ๆ เนื่องจากเทคนิคแม่แบบที่ฉลาด
แจ็คโพลสัน

1
นี่น่าจะดีกว่าสำหรับคำถามแยกต่างหาก ฉันรู้ว่า Eigen, MTL4 และ Armadillo มีเทคนิคในการแก้ปัญหาระบบขนาดเล็ก แต่ฉันคิดว่าคุณกำลังขอวิธีการประกอบเมทริกซ์และสำหรับสิ่งนั้นฉันไม่รู้ ฉันมักจะรวบรวมองค์ประกอบการฝึกอบรมโดยองค์ประกอบ ฉันไม่แน่ใจว่าห้องสมุดใด ๆ ที่กล่าวมานั้นดีต่อการมีเพศสัมพันธ์กับ PETSc หรือไม่ ฉันยังไม่ได้เป็นผู้ใช้ PETSc ฉันให้ความเห็นที่สองเกี่ยวกับ Boost :: uBlas ของ Jack เพราะมันช้า
Geoff Oxberry

1

Armadillo, Boost และอื่น ๆ ได้รวมเข้าเป็นส่วนหนึ่งของ Ceemple ซึ่งเป็นระบบการคำนวณทางเทคนิค C ++ แบบ JIT ที่รวดเร็ว ที่มีจำหน่าย (ฟรี) จากhttp://www.ceemple.com


0

แปลกใจที่ไม่มีใครพูดถึงTooNจนถึงตอนนี้ รับใช้มันอย่างมีความสุขมาเกือบ 3 ปีแล้ว

มันคล้ายกับEigen มากแม้ว่าจะไม่ครอบคลุม อย่างไรก็ตามฉันคิดว่ามันมีไวยากรณ์ที่ดีกว่าในบางวิธี

นอกจากนี้ยังมาพร้อมกับคลาสที่ช่วยสร้างแบบจำลองการเปลี่ยนแปลงทั่วไปที่พบบ่อยในกราฟิกและการมองเห็นตามกลุ่ม Lie (Euclidean พิเศษ / Orthogonal ใน 2 และ 3 มิติและอื่น ๆ ) และ Lie Algebras ที่เกี่ยวข้อง


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