10 ต.ค. 2024, suitesparse เวอร์ชัน 7.8.3
Suitesparse เป็นชุดของแพ็คเกจที่เกี่ยวข้องกับเมทริกซ์ที่เขียนหรือร่วมเขียนโดย Tim Davis ซึ่งมีอยู่ที่ https://github.com/drtimothyaldendavis/suitesparse
ผู้เขียนหลักของ Suitesparse (รหัสและอัลกอริทึม, Excl. Metis): Tim Davis
ผู้เขียนร่วมรหัสตามลำดับตัวอักษร (ไม่รวม Metis หรือ Lagraph): Patrick Amestoy, Mohsen Aznaveh, David Bateman, Jinhao Chen, Yanqing Chen, Iain Duff, Joe Eaton, Les Foster, William Hager Domenzain, Erick Moreno-Centeno, Markus Mützel, Corey Nolel, Ekanathan Palamadai, Sivasankaran Rajamanickam, Sanjay Ranka, Wissam Sid-Lakhdar และ Nuri Yeralan
Lagraph ได้รับการพัฒนาโดยนักพัฒนาจำนวนมากที่สุดของแพ็คเกจใด ๆ ในชุดสูทและสมควรได้รับรายการของตัวเอง รายการยังปรากฏใน lagraph/contibutors.txt:
Janos B. Antal, Budapest University of Technology and Economics, Hungary
Mohsen Aznaveh, Texas A&M University
David A. Bader New Jersey Institute of Technology
Aydin Buluc, Lawrence Berkeley National Lab
Jinhao Chen, Texas A&M University
Tim Davis, Texas A&M University
Florentin Dorre, Technische Univeritat Dresden, Neo4j
Marton Elekes, Budapest University of Technology and Economics, Hungary
Balint Hegyi, Budapest University of Technology and Economics, Hungary
Tanner Hoke, Texas A&M University
James Kitchen, Anaconda
Scott Kolodziej, Texas A&M University
Pranav Konduri, Texas A&M University
Roi Lipman, Redis Labs (now FalkorDB)
Tze Meng Low, Carnegie Mellon University
Tim Mattson, Intel
Scott McMillan, Carnegie Mellon University
Markus Muetzel
Michel Pelletier, Graphegon
Gabor Szarnyas, CWI Amsterdam, The Netherlands
Erik Welch, Anaconda, NVIDIA
Carl Yang, University of California at Davis, Waymo
Yongzhe Zhang, SOKENDAI, Japan
Metis ถูกเขียนโดย George Karypis
นักออกแบบอัลกอริทึมเพิ่มเติม: Esmond NG และ John Gilbert
อ้างถึงแต่ละแพ็คเกจสำหรับใบอนุญาตลิขสิทธิ์และข้อมูลผู้แต่ง
อ้างถึงแต่ละแพ็คเกจสำหรับเอกสารในแต่ละแพ็คเกจโดยทั่วไปในโฟลเดอร์ย่อย DOC
แพ็คเกจในชุดสูทและไฟล์ในไดเรกทอรีนี้:
AMD
การสั่งซื้อขั้นต่ำโดยประมาณ นี่คือฟังก์ชั่น AMD ในตัวใน MATLAB
ผู้เขียน: Tim Davis, Patrick Amestoy, Iain Duff
bin
สถานที่ตั้งโปรแกรมเมื่อรวบรวมเพื่อ make local
BTF
การเปลี่ยนรูปแบบบล็อกรูปสามเหลี่ยม
ผู้เขียน: Tim Davis, Ekanathan Palamadai
build
โฟลเดอร์สำหรับต้นไม้บิลด์เริ่มต้น
CAMD
การสั่งซื้อขั้นต่ำโดยประมาณโดยประมาณ
ผู้เขียน: Tim Davis, Patrick Amestoy, Iain Duff, Yanqing Chen
CCOLAMD
คอลัมน์ที่ จำกัด การสั่งซื้อขั้นต่ำโดยประมาณ
ผู้เขียน: Tim Davis, Sivasankaran Rajamanickam, Stefan Larimore
ผู้ทำงานร่วมกันออกแบบอัลกอริทึม: Esmond NG, John Gilbert (สำหรับ Colamd)
ChangeLog
สรุปการเปลี่ยนแปลงเพื่อชุดสูท ดู */Doc/ChangeLog สำหรับรายละเอียดสำหรับแต่ละแพ็คเกจ
CHOLMOD
การแยกตัวประกอบ cholesky กระจัดกระจาย ต้องใช้ AMD, ColAMD, CCOLAMD, BLAS และ LAPACK เลือกใช้ Metis นี่คือ chol และ x=Ab ใน matlab
ผู้แต่งสำหรับโมดูลทั้งหมด: Tim Davis
Cholmod/Modify Module Authors: Tim Davis และ William W. Hager
Cholmod/Suitesparse_metis: Metis รุ่นแก้ไขซึ่งฝังอยู่ในไลบรารี Cholmod ดูรายละเอียดไฟล์ readme.txt ผู้แต่ง: George Karypis นี่เป็นสำเนาที่แก้ไขเล็กน้อยที่มาพร้อมกับชุดสูทผ่านใบอนุญาตโอเพนซอร์ซที่จัดทำโดย George Karypis Suitesparse ไม่สามารถใช้สำเนา Metis ที่ไม่มีการแก้ไข
CITATION.bib
การอ้างอิงสำหรับแพ็คเกจชุดสูทในรูปแบบ Bibtex
CMakeLists.txt
เป็นทางเลือกในการรวบรวมชุดสูททั้งหมด ดูด้านล่าง
CODE_OF_CONDUCT.md
แนวทางชุมชน
COLAMD
คอลัมน์การสั่งซื้อขั้นต่ำโดยประมาณ นี่คือฟังก์ชั่น colamd ในตัวใน MATLAB
ผู้เขียน (ของรหัส): Tim Davis และ Stefan Larimore
ผู้ทำงานร่วมกันออกแบบอัลกอริทึม: Esmond NG, John Gilbert
Contents.m
รายการเนื้อหาสำหรับ 'Help Suitesparse' ใน Matlab
CONTRIBUTING.md
วิธีการมีส่วนร่วมในชุดสูท
CONTRIBUTOR-LICENSE.txt
ข้อตกลงผู้สนับสนุนที่จำเป็น
CSparse
แพ็คเกจเมทริกซ์เบาบางที่กระชับซึ่งพัฒนาขึ้นสำหรับหนังสือของฉัน "วิธีการโดยตรงสำหรับระบบเชิงเส้นเบาบาง" จัดพิมพ์โดยสยาม มีไว้สำหรับการสอนเป็นหลัก โปรดทราบว่ารหัสคือ (c) ทิมเดวิสตามที่ระบุไว้ในหนังสือ
สำหรับการผลิตใช้ CXSparse แทน โดยเฉพาะอย่างยิ่งทั้ง CSPARSE และ CXSPARSE มีชื่อเดียวกันรวมถึงชื่อไฟล์: cs.h แพ็คเกจนี้ใช้สำหรับ DMPERM ในตัวใน MATLAB
ผู้แต่ง: ทิมเดวิส
CXSparse
Csparse ขยาย รวมถึงการสนับสนุนสำหรับเมทริกซ์ที่ซับซ้อนและทั้งจำนวนเต็ม INT หรืออินเทอร์ยาว ใช้สิ่งนี้แทน CSPARSE สำหรับการใช้งานการผลิต มันสร้าง libcsparse.so (หรือ dylib บน Mac) ด้วยชื่อเดียวกับ csparse มันเป็น superset ของ csparse รหัสใด ๆ ที่เชื่อมโยงกับ CSPARSE ควรเชื่อมโยงกับ CXSparse แทน
ผู้แต่ง: ทิมเดวิสเดวิดเบทแมน
Example
แพ็คเกจง่าย ๆ ที่ต้องอาศัยชุดสูทเกือบทั้งหมด
.github
เวิร์กโฟลว์สำหรับการทดสอบ CI บน GitHub
GraphBLAS
อัลกอริทึมกราฟในภาษาของพีชคณิตเชิงเส้น
https://graphblas.org
ผู้แต่ง: Tim Davis, Joe Eaton, Corey Nolet
include
make install สถานที่ที่ผู้ใช้มองเห็นได้รวมไฟล์สำหรับแต่ละแพ็คเกจที่นี่หลังจาก make local
KLU
การแยกตัวประกอบ LU ที่กระจัดกระจายส่วนใหญ่สำหรับการจำลองวงจร ต้องใช้ AMD, ColAMD และ BTF เลือกใช้ Cholmod, Camd, Ccolamd และ Metis
ผู้เขียน: Tim Davis, Ekanathan Palamadai
LAGraph
ไลบรารีอัลกอริทึมกราฟที่ใช้กราฟบ์ ดูเพิ่มเติมที่ https://github.com/graphblas/Lagraph
ผู้เขียน: หลายคน
LDL
แพ็คเกจการแยกตัวประกอบ LDL ที่รัดกุมมาก
ผู้แต่ง: ทิมเดวิส
lib
make install สถานที่ที่แชร์ไลบรารีสำหรับแต่ละแพ็คเกจที่นี่หลังจาก make local
LICENSE.txt
รวบรวมใบอนุญาตสำหรับแต่ละแพ็คเกจ
Makefile
เป็นทางเลือกในการรวบรวม suitesparse ทั้งหมดโดยใช้ make ซึ่งใช้เป็น wrapper ง่าย ๆ สำหรับ cmake ในแต่ละโครงการย่อย
make
รวบรวมห้องสมุด suitesparse make install ที่ตามมาจะติดตั้งใน CMAKE_INSTALL_PATH (อาจเริ่มต้นเป็น /usr/local/lib บน Linux หรือ Mac)
make local
รวบรวม suitesparse make install ที่ตามมาจะติดตั้งใน ./lib , ./include ไม่ได้ติดตั้งใน CMAKE_INSTALL_PATH
make global
รวบรวมห้องสมุด suitesparse make install ที่ตามมาจะติดตั้งใน /usr/local/lib (หรืออะไรก็ตามที่ CMAKE_INSTALL_PREFIX ที่กำหนดค่าไว้) ไม่ได้ติดตั้งใน ./lib และ ./include include
make install
ติดตั้งในไดเรกทอรีปัจจุบัน ( ./lib , ./include ) หรือใน /usr/local/lib และ /usr/local/include (หลังที่กำหนดโดย CMAKE_INSTALL_PREFIX ) ขึ้นอยู่กับว่า make make local หรือ make global ได้ทำไปแล้ว
make uninstall
undoes make install
make distclean
ลบไฟล์ทั้งหมดที่ไม่ได้อยู่ในการแจกจ่ายรวมถึง ./bin , ./share , ./lib และ ./include include
make purge
เช่นเดียวกับ make distclean
make clean
ลบไฟล์ทั้งหมดที่ไม่ได้อยู่ในการแจกจ่าย แต่เก็บไลบรารีและการสาธิตที่รวบรวมไว้, ./lib , ./share และ ./include include
โครงการย่อยแต่ละโครงการยังมีแต่ละโครงการข้างต้น make เป้าหมาย
สิ่งที่คุณไม่ต้องทำ:
make docs
สร้างคู่มือผู้ใช้จากไฟล์ LaTex
make cov
รันคำสั่งการทดสอบความครอบคลุม (Linux เท่านั้น)
MATLAB_Tools
m-files ต่าง ๆ สำหรับใช้ใน matlab
ผู้แต่ง: ทิมเดวิส (ทุกส่วน)
สำหรับ spqr_rank : ผู้แต่ง Les Foster และ Tim Davis
Contents.m
รายการเนื้อหา
dimacs10
โหลดเมทริกซ์สำหรับคอลเลกชัน Dimacs10
Factorize
x=Ab สำหรับ matlab
find_components
ค้นหาส่วนประกอบที่เชื่อมต่อในภาพ
GEE
การกำจัดแบบเกาส์แบบง่ายๆ
getversion.m
กำหนดเวอร์ชัน MATLAB
gipper.m
สร้าง Matlab Archive
hprintf.m
พิมพ์ไฮเปอร์ลิงก์ในหน้าต่างคำสั่ง
LINFACTOR
Factorize ของแพ็คเกจ
MESHND
การแยกการเรียงลำดับของตาข่ายปกติ
pagerankdemo.m
แสดงให้เห็นว่า PageRank ทำงานอย่างไร
SFMULT
C=S*F โดยที่ S กระจัดกระจายและ F เต็ม
shellgui
แสดงเปลือกหอย
sparseinv
ชุดย่อยแบบผกผันแบบเบาบาง
spok
ตรวจสอบว่าเมทริกซ์เบาบางถูกต้อง
spqr_rank
แพ็คเกจ SPQR_RANK กล่องเครื่องมือ MATLAB สำหรับเมทริกซ์เบาบางที่ไม่เพียงพออันดับ: ช่องว่างว่าง, ตัวประกอบที่เชื่อถือได้ ฯลฯ กับ Leslie Foster, San Jose State Univ
SSMULT
C=A*B โดยที่ A และ B นั้นกระจัดกระจาย นี่เป็นพื้นฐานสำหรับ C=A*B ในตัวใน MATLAB จนกระทั่งมันถูกแทนที่โดย graphblas ใน MATLAB R2021A
SuiteSparseCollection
สำหรับคอลเลกชันชุดสูทแบบเมทริกซ์
waitmex
Waitbar สำหรับใช้ภายใน mexfunction
Mongoose
การแบ่งกราฟ
ผู้เขียน: Nuri Yeralan, Scott Kolodziej, William Hager, Tim Davis
ParU
รูปแบบที่ไม่สมมาตรแบบขนานวิธีหลายวิธี
ปัจจุบันเป็นการเปิดตัวก่อน
ผู้เขียน: Mohsen Aznaveh และ Tim Davis
RBio
การอ่าน/เขียนเมทริกซ์เบาบางในรูปแบบ Rutherford/Boeing
ผู้แต่ง: ทิมเดวิส
README.md
ไฟล์นี้
SPEX
แก้ระบบเชิงเส้นเบาบางในคณิตศาสตร์ที่แน่นอน
ต้องใช้ไลบรารี GNU GMP และ MPRF
สิ่งนี้จะถูกแทนที่ด้วยแพ็คเกจทั่วไปมากขึ้น SPEX V3 ซึ่งรวมถึงวิธีนี้ (LU ที่เบาบางที่แน่นอน) และอื่น ๆ API ของ V3 จะเปลี่ยนแปลงอย่างมีนัยสำคัญ
ผู้เขียน: Chris Lourenco, Jinhao Chen, Erick Moreno-Centeno, Lorena Lorena Mejia Domenzain และ Tim Davis
ดู https://github.com/clouren/Spex สำหรับเวอร์ชันล่าสุด
SPQR
การแยกตัวประกอบ QR แบบเบาบาง นี่คือ qr และ x=Ab ใน MATLAB ในตัว เรียกอีกอย่างว่า suitesparseqr
รวมห้องสมุด GPU สองห้อง: SPQR/GPUQREngine และ SPQR/SuiteSparse_GPURuntime
ผู้แต่งรหัส CPU: Tim Davis
ผู้เขียนโมดูล GPU: Tim Davis, Nuri Yeralan, Wissam Sid-Lakhdar, Sanjay Ranka
ssget
MATLAB อินเทอร์เฟซกับคอลเลกชัน Matrix Suitesparse
ผู้แต่ง: ทิมเดวิส
SuiteSparse_config
ไลบรารีที่มีฟังก์ชั่นทั่วไปและการกำหนดค่าสำหรับแพ็คเกจข้างต้นทั้งหมด CSparse , GraphBLAS , LAGraph และ MATLAB_Tools ไม่ใช้ SuiteSparse_config
ผู้แต่ง: ทิมเดวิส
SuiteSparse_demo.m
การสาธิตชุดสูทสำหรับ matlab
SuiteSparse_install.m
ติดตั้ง suitesparse สำหรับ matlab
SuiteSparse_paths.m
ตั้งค่าเส้นทางสำหรับ suitesparse matlab mexfunctions
SuiteSparse_test.m
การทดสอบอย่างละเอียดสำหรับ suitesparse ใน matlab
UMFPACK
การแยกตัวประกอบ LU ที่กระจัดกระจาย ต้องใช้ AMD และ BLAS
นี่คือ lu และ x=Ab ใน MATLAB ในตัว
ผู้แต่ง: ทิมเดวิส
ความร่วมมือในการออกแบบอัลกอริทึม: Iain Duff
อ้างถึงแต่ละแพ็คเกจสำหรับใบอนุญาตลิขสิทธิ์และข้อมูลผู้แต่ง รหัสทั้งหมดได้รับการแต่งตั้งหรือร่วมเขียนโดย Timothy A. Davis (อีเมล: [email protected]) ยกเว้น Metis (โดย George Karypis), GraphBLAS/cpu_features (โดย Google), Graphblas/LZ4, Zstd และ Xxhash (โดย Yann Collet บางส่วนของ graphblas/cuda เป็นลิขสิทธิ์ (c) โดย Nvidia โปรดดูใบอนุญาตเหล่านี้แต่ละใบ
ขอบคุณสำหรับชุดบรรจุภัณฑ์! นี่คือคำแนะนำบางอย่าง:
Graphblas ใช้เวลานานในการรวบรวมเพราะมันสร้าง "Factorykernels" ที่รวดเร็วจำนวนมากในเวลาคอมไพล์ หากคุณต้องการลดเวลาการรวบรวมและขนาดไลบรารีให้เปิดใช้งานโหมด GRAPHBLAS_COMPACT แต่เปิดใช้งานคอมไพเลอร์ JIT จากนั้น Graphblas จะรวบรวมเมล็ดที่ต้องการในเวลาทำงานผ่านคอมไพเลอร์ JIT ประสิทธิภาพจะเหมือนกับ Factorykernels เมื่อรวบรวมเมล็ด JIT เมล็ดที่รวบรวมได้จะถูกวางไว้ใน ~/.SuiteSparse โดยค่าเริ่มต้น คุณไม่จำเป็นต้องแจกจ่ายแหล่งที่มาสำหรับ graphblas เพื่อเปิดใช้งานคอมไพเลอร์ JIT: เพียงแค่ libgraphblas.so และ GraphBLAS.h ก็เพียงพอแล้ว
Graphblas ต้องการ OpenMP! มันเป็นรหัสขนานโดยพื้นฐานดังนั้นโปรดแจกจ่ายให้เปิดใช้งาน OpenMP ประสิทธิภาพจะได้รับผลกระทบเป็นอย่างอื่น
CUDA Acceleration: Cholmod และ SPQR สามารถได้รับประโยชน์จากเมล็ด CUDA ของพวกเขา หากคุณไม่มี cuda หรือไม่ต้องการรวมไว้ใน distro ของคุณ suitesparse รุ่นนี้ข้ามอาคารของห้องสมุด CHOLMOD_CUDA และ SPQR_CUDA และไม่เชื่อมโยงกับห้องสมุด GPUQREngine และ SuiteSparse_GPURuntime
Suitesparse เป็นแพคเกจหลายแพ็คเกจแต่ละชุดมีเอกสารที่ตีพิมพ์ของพวกเขาเอง ในการอ้างอิงคอลเลกชันทั้งหมดให้ใช้ URL:
โปรดอ้างอิงเอกสารเฉพาะสำหรับแพ็คเกจที่คุณใช้ นี่คือรายการที่ยาว หากคุณต้องการรายการที่สั้นกว่าเพียงแค่อ้างถึง "อัลกอริทึมล่าสุด XXX:" เอกสารใน ACM TOMS สำหรับแต่ละแพ็คเกจ
สำหรับ matlab x = a b ดูด้านล่างสำหรับ AMD, colamd, cholmod, umfpack และ suitesparseqr (SPQR)
สำหรับ graphblas และ c = ab ใน matlab (sparse-times-sparse):
Ta Davis อัลกอริทึม 1037: suitesparse: graphblas: อัลกอริทึมกราฟขนานในภาษาของพีชคณิตเชิงเส้นเบาบาง ACM Trans คณิตศาสตร์. ซอฟต์ 49, 3, บทความ 28 (กันยายน 2023), 30 หน้า https://doi.org/10.1145/3577195
T. Davis, อัลกอริทึม 1000: Suitesparse: Graphblas: อัลกอริทึมกราฟในภาษาของพีชคณิตเชิงเส้นเบาบาง, ACM Trans บนซอฟต์แวร์คณิตศาสตร์, เล่ม 45, No 4, Dec. 2019, บทความหมายเลข 44. https://doi.org/10.1145
สำหรับ Lagraph:
G. Szárnyas et al., "Lagraph: พีชคณิตเชิงเส้น, ไลบรารีการวิเคราะห์เครือข่าย, และการศึกษาอัลกอริทึมกราฟ," 2021 IEEE International คู่ขนานและการประมวลผลการประชุมเชิงปฏิบัติการการประมวลผล (IPDPSW), พอร์ตแลนด์หรือสหรัฐอเมริกา, 2021, pp 243-252 https://doi.org/10.1109/ipdpsw52791.2021.00046
สำหรับ csparse/cxsparse:
TA Davis, วิธีการโดยตรงสำหรับระบบเชิงเส้นเบาบาง, ซีรีย์ SIAM บนพื้นฐานของอัลกอริทึม, สยาม, ฟิลาเดลเฟีย, PA, 2006. https://doi.org/10.1137/1.9780898718881
สำหรับ Suitesparseqr (SPQR): (ยังอ้างอิง AMD, colamd):
TA Davis, อัลกอริทึม 915: suitesparseqr: multifrontal multithreaded อันดับ revealing qr factorization, ACM Trans บนซอฟต์แวร์คณิตศาสตร์, 38 (1), 2011, pp. 8: 1--8: 22 https://doi.org/10.1145/2049662.2049670
สำหรับ suitesparseqr/gpu:
Sencer Nuri Yeralan, TA Davis, Wissam M. Sid-Lakhdar และ Sanjay Ranka 2017. อัลกอริทึม 980: การแยกตัวประกอบ QR แบบเบาบางบน GPU ACM Trans คณิตศาสตร์. ซอฟต์ 44, 2, บทความ 17 (มิถุนายน 2018), 29 หน้า https://doi.org/10.1145/3065870
สำหรับ cholmod: (ยังอ้างอิง AMD, colamd):
Y. เฉิน, TA Davis, WW Hager และ S. Rajamanickam, อัลกอริทึม 887: Cholmod, Supernodal Sparse Cholesky Factorization และการปรับปรุง/downdate, ACM Trans บนซอฟต์แวร์คณิตศาสตร์, 35 (3), 2008, pp. 22: 1--22: 14 https://dl.acm.org/doi/abs/10.1145/1391989.1391995
Ta Davis และ WW Hager, supernodes แบบไดนามิกในการอัพเดท/downdate และสามเหลี่ยมที่มีการแก้ไขและสามเหลี่ยม, ACM Trans บนซอฟต์แวร์ทางคณิตศาสตร์, 35 (4), 2009, pp. 27: 1--27: 23 https://doi.org/10.1145/1462173.1462176
สำหรับโมดูล cholmod/modify: (ยังอ้างอิง AMD, colamd):
Ta Davis และ William W. Hager, การปรับเปลี่ยนแถวของการแยกตัวประกอบ cholesky siam Journal เกี่ยวกับการวิเคราะห์เมทริกซ์และการใช้งาน 2005 26: 3, 621-639 https://doi.org/10.1137/S089547980343641X
TA Davis และ William W. Hager การปรับเปลี่ยนหลายระดับของการแยกตัวประกอบ cholesky siam Journal เกี่ยวกับการวิเคราะห์เมทริกซ์และการใช้งาน 2001 22: 4, 997-1013 https://doi.org/10.1137/S0895479899357346
Ta Davis และ William W. Hager, การปรับเปลี่ยนการแยกตัวประกอบ cholesky เบาบาง, SIAM Journal เกี่ยวกับการวิเคราะห์เมทริกซ์และการใช้งาน 1999 20: 3, 606-627 https://doi.org/10.1137/S0895479897321076
สำหรับโมดูล Cholmod/GPU:
Steven C. Rennich, Darko Stosic, Timothy A. Davis, เร่งการแยกตัวประกอบ cholesky เบาบางบน GPU, การคำนวณแบบขนาน, Vol 59, 2016, pp 140-150 https://doi.org/10.1016/j.parco.2016.06.004
สำหรับ AMD และ CAMD:
P. Amestoy, TA Davis และเป็น Duff, อัลกอริทึม 837: อัลกอริทึมการสั่งซื้อขั้นต่ำขั้นต่ำโดยประมาณ, ACM Trans บนซอฟต์แวร์ทางคณิตศาสตร์, 30 (3), 2004, pp. 381--388 https://dl.acm.org/doi/abs/10.1145/1024074.1024081
P. Amestoy, TA Davis และเป็น Duff อัลกอริทึมการสั่งซื้อขั้นต่ำขั้นต่ำโดยประมาณ, การวิเคราะห์และการใช้งานของ Siam J. Matrix, 17 (4), 1996, pp. 886--905 https://doi.org/10.1137/S0895479894278952
สำหรับ colamd, symamd, ccolamd และ csymamd:
Ta Davis, Jr Gilbert, S. Larimore, E. Ng, อัลกอริทึม 836: Colamd, อัลกอริทึมการสั่งซื้อระดับต่ำสุดโดยประมาณ, ACM Trans บนซอฟต์แวร์ทางคณิตศาสตร์, 30 (3), 2004, pp. 377--380 https://doi.org/10.1145/1024074.1024080
Ta Davis, Jr Gilbert, S. Larimore, E. Ng, คอลัมน์อัลกอริทึมการสั่งซื้อขั้นต่ำโดยประมาณ, ACM Trans บนซอฟต์แวร์ทางคณิตศาสตร์, 30 (3), 2004, pp. 353--376 https://doi.org/10.1145/1024074.1024079
สำหรับ UMFPACK: (ยังอ้างอิง AMD และ COLAMD):
TA Davis, อัลกอริทึม 832: UMFPACK-วิธี Multifrontal ที่ไม่สมมาตรแบบไม่สมมาตรพร้อมกลยุทธ์การสั่งซื้อล่วงหน้าคอลัมน์ ACM Trans บนซอฟต์แวร์ทางคณิตศาสตร์, 30 (2), 2004, pp. 196--199 https://dl.acm.org/doi/abs/10.1145/992200.992206
TA Davis ซึ่งเป็นกลยุทธ์การสั่งซื้อล่วงหน้าคอลัมน์สำหรับวิธี Multifrontal ที่ไม่สมมาตรแบบไม่สมมาตร ACM Trans บนซอฟต์แวร์ทางคณิตศาสตร์, 30 (2), 2004, pp. 165--195 https://dl.acm.org/doi/abs/10.1145/992200.992205
Ta Davis และเป็น Duff ซึ่งเป็นวิธี unifrontal/multifrontal แบบรวมสำหรับเมทริกซ์เบาบางที่ไม่สมมาตร, ACM Trans บนซอฟต์แวร์ทางคณิตศาสตร์, 25 (1), 1999, pp. 1--19 https://doi.org/10.1145/305658.287640
Ta Davis และเป็น Duff วิธีการหลายรูปแบบที่ไม่สมมาตรสำหรับการวิเคราะห์และการคำนวณของ Lu Lu, Siam J. Matrix, 18 (1), 1997, pp. 140--158 https://doi.org/10.1137/S0895479894246905
สำหรับตัวประกอบ M-file:
TA Davis, อัลกอริทึม 930: ปัจจัย, ตัวแก้ปัญหาระบบเชิงเส้นเชิงวัตถุสำหรับ MATLAB, ACM Trans บนซอฟต์แวร์คณิตศาสตร์, 39 (4), 2013, pp. 28: 1-28: 18 https://doi.org/10.1145/2491491.2491498
สำหรับ KLU และ BTF (ยังอ้างอิง AMD และ COLAMD):
Ta Davis และ Ekanathan Palamadai Natarajan 2010. อัลกอริทึม 907: KLU, ตัวแก้ปัญหาเบาบางโดยตรงสำหรับปัญหาการจำลองวงจร ACM Trans คณิตศาสตร์. ซอฟต์ 37, 3, บทความ 36 (กันยายน 2010), 17 หน้า https://dl.acm.org/doi/abs/10.1145/1824801.1824814
สำหรับ LDL:
Ta Davis อัลกอริทึม 849: แพ็คเกจการแยกตัวประกอบ cholesky กระจัดกระจาย ACM Trans คณิตศาสตร์. ซอฟต์ 31, 4 (ธันวาคม 2548), 587–591 https://doi.org/10.1145/1114268.1114277
สำหรับคอลเลกชัน SSGET และ SuitEsparse Matrix:
Ta Davis และ Yifan Hu 2554. คอลเล็กชั่นเมทริกซ์ของมหาวิทยาลัยฟลอริดา ACM Trans คณิตศาสตร์. ซอฟต์ 38, 1, บทความ 1 (พฤศจิกายน 2554), 25 หน้า https://doi.org/10.1145/2049662.2049663
Kolodziej et al., (2019) อินเทอร์เฟซเว็บไซต์คอลเลกชัน Suitesparse Matrix วารสารซอฟต์แวร์โอเพ่นซอร์ส 4 (35), 1244. https://doi.org/10.21105/joss.01244
สำหรับ spqr_rank :
Leslie V. Foster และ Ta Davis 2013. อัลกอริทึม 933: การคำนวณที่เชื่อถือได้ของอันดับตัวเลข, ฐานอวกาศว่าง, โซลูชั่น pseudoinverse และโซลูชันพื้นฐานโดยใช้ suitesparseqr ACM Trans คณิตศาสตร์. ซอฟต์ 40, 1, บทความ 7 (กันยายน 2013), 23 หน้า https://doi.org/10.1145/2513109.2513116
สำหรับพังพอน:
Ta Davis, William W. Hager, Scott P. Kolodziej และ S. Nuri Yeralan 2020. อัลกอริทึม 1003: Mongoose, กราฟที่หยาบและแบ่งพาร์ติชัน ACM Trans คณิตศาสตร์. ซอฟต์ 46, 1, บทความ 7 (มีนาคม 2020), 18 หน้า https://doi.org/10.1145/33337792
สำหรับ Spex:
Christopher Lourenco, Jinhao Chen, Erick Moreno-Centeno และ Ta Davis 2022. อัลกอริทึม 1021: SPEX ซ้าย LU, แก้ปัญหาเชิงเส้นเบาบางอย่างแน่นอนผ่านการแยกตัวประกอบ LU ที่เก็บรักษาจำนวนเต็มซ้าย ACM Trans คณิตศาสตร์. ซอฟต์ มิถุนายน 2565 https://doi.org/10.1145/3519024
หมายเหตุ: หากคุณใช้ OpenBlas ให้แน่ใจว่าใช้เวอร์ชัน 0.3.27 หรือใหม่กว่า
ในการเลือก blas/lapack ของคุณดูคำแนะนำใน suitesparseblas.cmake ใน SuiteSparse_config/cmake_modules หาก SuiteSparse_config พบ BLAs ที่มีจำนวนเต็ม 64 บิต (เช่น Intel MKL ILP64 BLAS) มันจะกำหนดค่า SuiteSparse_config.h ด้วย SUITESPARSE_BLAS_INT ที่กำหนดเป็น int64_t มิฉะนั้นหากพบ BLAs 32 บิตประเภทนี้จะถูกกำหนดเป็น int32_t หากต่อมา umfpack, cholmod หรือ spqr ถูกรวบรวมและเชื่อมโยงกับ blas ที่มีขนาดจำนวนเต็มที่แตกต่างกันคุณต้องแทนที่คำจำกัดความด้วย -DBLAS64 (เพื่อยืนยันการใช้จำนวนเต็ม 64 บิตใน BLAS) หรือ -DBLAS32
ขนาดของจำนวนเต็ม BLAS ไม่มีส่วนเกี่ยวข้องกับ sizeof(void *)
เมื่อแจกจ่ายในรูปแบบไบนารี (เช่นแพ็คเกจ Debian, Ubuntu, Spack หรือ Brew), suitesparse น่าจะถูกรวบรวมเพื่อคาดหวังว่า BLAs 32 บิตเนื่องจากเป็นกรณีที่พบบ่อยที่สุด ค่าเริ่มต้นคือการใช้ BLAs 32 บิต แต่สามารถเปลี่ยนแปลงได้โดยการตั้งค่าตัวแปร CMake SUITESPARSE_USE_64BIT_BLAS เป็น ON
โดยค่าเริ่มต้นชุดล่าสัตว์สำหรับห้องสมุด BLAS ที่เหมาะสม เพื่อบังคับใช้ห้องสมุด BLAS โดยเฉพาะใช้:
CMAKE_OPTIONS="-DBLA_VENDOR=OpenBLAS" make
cd Package ; cmake -DBLA_VENDOR=OpenBLAS .. make
หากต้องการใช้ค่าเริ่มต้น (ตามล่าสำหรับ blas) อย่าตั้งค่า BLA_VENDOR หรือตั้งค่าเป็นสตริงว่าง ในกรณีนี้หาก SUITESPARSE_USE_64BIT_BLAS เปิดใช้งานการตั้งค่าจะถูกกำหนดให้กับ BLAS 64 บิต แต่จะใช้ห้องสมุด BLAS 32 บิตหากไม่พบไลบรารี 64 บิต อย่างไรก็ตามหากทั้งสอง SUITESPARSE_USE_64BIT_BLAS และ SUITESPARSE_USE_STRICT เปิดอยู่แล้วจะมีการพิจารณาเพียง 64 บิต BLAs
เมื่อเลือกไลบรารี BLAS โดยเฉพาะการตั้งค่า SUITESPARSE_USE_64BIT_BLAS จะถูกติดตามอย่างเคร่งครัด หากตั้งค่าเป็น TRUE จะมีการใช้ห้องสมุด BLAS 64 บิตเท่านั้น หากเท็จ (ค่าเริ่มต้น) จะใช้ไลบรารี BLAS 32 บิตเท่านั้น หากไม่พบ BLAS ดังกล่าวการสร้างจะล้มเหลว
พิมพ์ต่อไปนี้ในไดเรกทอรีนี้ (ต้องใช้ Priviledge System เพื่อทำการ sudo make install ):
mkdir -p build && cd build
cmake ..
cmake --build .
sudo cmake --install .
ไลบรารีทั้งหมดจะถูกสร้างและติดตั้งลงในโฟลเดอร์ระบบเริ่มต้น (/usr/local/lib บน Linux) ทั้งหมดรวมไฟล์ที่ต้องการโดยแอปพลิเคชันที่ใช้ suitesparse ถูกติดตั้งลงใน/usr/local/include/suitesparse (บน Linux)
หากต้องการสร้างเฉพาะส่วนย่อยของไลบรารีให้ตั้งค่า SUITESPARSE_ENABLE_PROJECTS เมื่อกำหนดค่าด้วย cmake เช่นในการสร้างและติดตั้ง Cholmod และ CXSparse (รวมถึงการอ้างอิง) ใช้คำสั่งต่อไปนี้:
mkdir -p build && cd build
cmake -DSUITESPARSE_ENABLE_PROJECTS="cholmod;cxsparse" ..
cmake --build .
sudo cmake --install .
สำหรับ Windows (MSVC) นำเข้าไฟล์ CMakeLists.txt ลงใน MS Visual Studio ตรวจสอบให้แน่ใจว่าได้ระบุประเภทการสร้างเป็นรุ่น ตัวอย่างเช่นในการสร้าง suitesparse บน windows ในหน้าต่างคำสั่งเรียกใช้:
mkdir -p build && cd build
cmake ..
cmake --build . --config Release
cmake --install .
อย่าลืมติดตั้งไลบรารีที่จำเป็นทั้งหมด: BLAS และ LAPACK สำหรับ UMFPACK, Cholmod และ SPQR และ GMP และ MPFR สำหรับ SPEX อย่าลืมใช้ห้องสมุดล่าสุด SPEX ต้องการ MPFR 4.0.2 และ GMP 6.1.2 (หมายเลขเวอร์ชันเหล่านี้ไม่สอดคล้องกับคำต่อท้าย XYZ ของ libgmp.so.xyz และ libmpfr.so.xyz; ดูคู่มือผู้ใช้ SPEX สำหรับรายละเอียด)
ในการรวบรวมไลบรารีและติดตั้งเฉพาะใน suitesparse/lib (ไม่ใช่/usr/local/lib) ให้ทำสิ่งนี้แทนในระดับบนสุดของ suitesparse:
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=.. ..
cmake --build .
cmake --install .
หากคุณเพิ่ม/home/me/suitesparse/lib ไปยังเส้นทางการค้นหาห้องสมุดของคุณ ( LD_LIBRARY_PATH ใน Linux) คุณสามารถทำสิ่งต่อไปนี้ (ตัวอย่างเช่น):
S = /home/me/SuiteSparse
cc myprogram.c -I$(S)/include/suitesparse -lumfpack -lamd -lcholmod -lsuitesparseconfig -lm
ในการเปลี่ยนคอมไพเลอร์ C และ C ++ และรวบรวมการใช้งานแบบขนาน:
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER==g++ ..
ตัวอย่างเช่นซึ่งเปลี่ยนคอมไพเลอร์เป็น GCC และ G ++
สิ่งนี้จะทำงานบน Linux/UNIX และ Mac ควรตรวจจับโดยอัตโนมัติหากคุณมีคอมไพเลอร์ Intel หรือไม่และไม่ว่าคุณจะมี cuda หรือไม่
ดู SuiteSparse_config/cmake_modules/SuiteSparsePolicy.cmake เพื่อเลือก blas ของคุณ
คุณอาจต้องเพิ่ม suitesparse/lib ลงในเส้นทางของคุณ หากสำเนา suitesparse ของคุณอยู่ใน/home/me/suitesparse ให้เพิ่มสิ่งนี้ลงในไฟล์ ~/.bashrc ของคุณ:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export LD_LIBRARY_PATH
สำหรับ Mac ให้ใช้สิ่งนี้แทน:
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export DYLD_LIBRARY_PATH
ตำแหน่งการติดตั้งเริ่มต้นของไฟล์ด้านล่างโดยที่แพ็คเกจเป็นหนึ่งในแพ็คเกจในชุดสูท:
* `CMAKE_INSTALL_PREFIX/include/suitesparse/`: include files
* `CMAKE_INSTALL_PREFIX/lib/`: compiled libraries
* `CMAKE_INSTALL_PREFIX/lib/cmake/SuiteSparse/`: `*.cmake` scripts
for all of SuiteSparse
* `CMAKE_INSTALL_PREFIX/lib/cmake/PACKAGE/`: `*Config.cmake` scripts for a
specific package
* `CMAKE_INSTALL_PREFIX/lib/pkgconfig/PACKAGE.pc`: `.pc` scripts for
a specific package pkgconfig
สมมติว่าคุณวาง suitesparse ในโฟลเดอร์ /home/me/SuiteSparse
เพิ่มโฟลเดอร์ SuiteSparse/lib ไปยังเส้นทางห้องสมุดรันไทม์ของคุณ บน Linux ให้เพิ่มสิ่งนี้ลงในสคริปต์ ~/.bashrc ของคุณสมมติว่า /home/me/SuiteSparse เป็นที่ตั้งของสำเนา suitesparse ของคุณ:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export LD_LIBRARY_PATH
สำหรับ Mac ให้ใช้สิ่งนี้แทนในสคริปต์ ~/.zshrc ของคุณโดยสมมติว่าคุณวาง suitesparse in /Users/me/SuiteSparse :
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Users/me/SuiteSparse/lib
export DYLD_LIBRARY_PATH
รวบรวมชุดสูททั้งหมดด้วย make local
จากนั้นรวบรวมไลบรารี matlab graphblas ในเชลล์ระบบในขณะที่อยู่ในโฟลเดอร์ Suitesparse ให้พิมพ์ make gbmatlab หากคุณต้องการติดตั้งระบบทั่วทั้งระบบด้วย make install หรือ make gblocal หากคุณต้องการใช้ห้องสมุดในชุดสูท/lib ของคุณเอง
จากนั้นในหน้าต่างคำสั่ง MATLAB CD ไปยังไดเรกทอรี SuitEsparse และพิมพ์ SuiteSparse_install แพ็คเกจทั้งหมดจะถูกรวบรวมและการสาธิตหลายครั้งจะเรียกใช้ ในการเรียกใช้การทดสอบที่ละเอียดถี่ถ้วน (ยาว!) ให้ทำ SuiteSparse_test
บันทึกเส้นทาง MATLAB ของคุณสำหรับเซสชันในอนาคตด้วยคำสั่ง MATLAB Pathtool หรือ SavePath หากวิธีการเหล่านั้นล้มเหลวเนื่องจากคุณไม่ได้รับอนุญาตจากระบบให้เพิ่มพา ธ ใหม่ลงในไฟล์ startup.m ของคุณโดยปกติในเอกสาร/MATLAB/Startup.m นอกจากนี้คุณยังสามารถใช้ SuiteSparse_paths m-file เพื่อตั้งค่าเส้นทางทั้งหมดของคุณในช่วงเริ่มต้นของแต่ละเซสชัน MATLAB
คุณสามารถตั้งค่าตัวเลือกเฉพาะสำหรับ cmake ด้วยคำสั่ง (ตัวอย่าง):
cmake -DCHOLMOD_PARTITION=OFF -DBUILD_STATIC_LIBS=OFF -DCMAKE_BUILD_TYPE=Debug ..
คำสั่งนั้นจะรวบรวม suitesparse ทั้งหมดยกเว้นโมดูล Cholmod/พาร์ติชัน (เนื่องจาก -DCHOLMOD_PARTITION=OFF ) โหมดการดีบักจะถูกใช้ (ประเภทการสร้าง) ห้องสมุดคงที่จะไม่ถูกสร้างขึ้น (เนื่องจาก -DBUILD_STATIC_LIBS=OFF ถูกตั้งค่า)
SUITESPARSE_ENABLE_PROJECTS :
รายการเซมิโคลอนที่แยกจากกันของโครงการที่จะสร้างหรือ all ค่าเริ่มต้น: all ในกรณีนี้โครงการต่อไปนี้ถูกสร้างขึ้น:
suitesparse_config;mongoose;amd;btf;camd;ccolamd;colamd;cholmod;cxsparse;ldl;klu;umfpack;paru;rbio;spqr;spex;graphblas;lagraph
นอกจากนี้ csparse สามารถรวมอยู่ในรายการนั้นเพื่อสร้าง CSPARSE
CMAKE_BUILD_TYPE :
ค่าเริ่มต้น: Release ใช้ Debug สำหรับการดีบัก
SUITESPARSE_USE_STRICT :
Suitesparse มีการตั้งค่าผู้ใช้ที่กำหนดได้มากมายของแบบฟอร์ม SUITESPARSE_USE_* หรือ (package)_USE_* สำหรับแพ็คเกจบางอย่าง โดยทั่วไปการตั้งค่าเหล่านี้ไม่เข้มงวด ตัวอย่างเช่นหาก SUITESPARSE_USE_OPENMP เปิด ON แล้ว OpenMP นั้นเป็นที่ต้องการ แต่สามารถใช้ชุดสูทได้โดยไม่ต้อง OpenMP ดังนั้นจึงไม่พบข้อผิดพลาดหากไม่พบ OpenMP อย่างไรก็ตามหาก SUITESPARSE_USE_STRICT ON แล้วการตั้งค่าทั้งหมด *_USE_* ได้รับการปฏิบัติอย่างเคร่งครัดและเกิดข้อผิดพลาดหากมีการตั้งค่าเป็น ON แต่ไม่สามารถใช้งานแพ็คเกจหรือการตั้งค่าที่สอดคล้องกันได้ การตั้งค่า *_USE_SYSTEM_* ได้รับการปฏิบัติอย่างเข้มงวดเสมอ ค่าเริ่มต้น: OFF
SUITESPARSE_USE_CUDA :
หากตั้งค่าเป็น ON CUDA จะเปิดใช้งานสำหรับชุดสูททั้งหมด ค่าเริ่มต้น: ON ,
CUDA บน Windows ด้วย MSVC ดูเหมือนจะทำงานกับรุ่นนี้ แต่ควรได้รับการพิจารณาว่าเป็นต้นแบบและอาจไม่สามารถใช้งานได้อย่างสมบูรณ์ ฉันมีทรัพยากรที่ จำกัด สำหรับการทดสอบ CUDA บน Windows หากคุณพบปัญหาให้ปิดการใช้งาน CUDA และโพสต์สิ่งนี้เป็นปัญหาเกี่ยวกับ GitHub
CHOLMOD_USE_CUDA :
ค่าเริ่มต้น: ON ทั้งสอง SUITESPARSE_USE_CUDA และ CHOLMOD_USE_CUDA จะต้องเปิดใช้งานเพื่อใช้ cuda ใน cholmod
SPQR_USE_CUDA :
ค่าเริ่มต้น: ON ทั้งสอง SUITESPARSE_USE_CUDA และ SPQR_USE_CUDA จะต้องเปิดใช้งานเพื่อใช้ cuda ใน SPQR
CMAKE_INSTALL_PREFIX :
กำหนดตำแหน่งการติดตั้ง (ค่าเริ่มต้นบน Linux IS /usr/local ) ตัวอย่างเช่นคำสั่งนี้ในขณะที่อยู่ในโฟลเดอร์ build ในโฟลเดอร์ Suitesparse ระดับบนสุดจะตั้งค่าไดเรกทอรีการติดตั้งเป็น /stuff ซึ่งใช้โดย sudo cmake --install . -
cmake -DCMAKE_INSTALL_PREFIX=/stuff ..
sudo cmake --install .
SUITESPARSE_PKGFILEDIR :
ไดเรกทอรีที่จะติดตั้งไฟล์ CMake และไฟล์ PKG-Config โดยค่าเริ่มต้นไฟล์ cmake config จะถูกติดตั้งในโฟลเดอร์ย่อย cmake ของไดเรกทอรีที่จะติดตั้งไลบรารี (แบบคงที่) (เช่น lib ) ไฟล์ .pc สำหรับ PKG-Config จะถูกติดตั้งใน pkgconfig โฟลเดอร์ย่อยของไดเรกทอรีที่จะติดตั้งไลบรารี (คงที่)
ตัวเลือกนี้อนุญาตให้ติดตั้งในตำแหน่งที่แตกต่างจากไลบรารี (คงที่) สิ่งนี้ช่วยให้สามารถติดตั้งการกำหนดค่าหลายรายการของไลบรารี suitesparse ในเวลาเดียวกัน (เช่นโดยการตั้งค่า CMAKE_RELEASE_POSTFIX และ CMAKE_INSTALL_LIBDIR ที่แตกต่างกันสำหรับแต่ละรายการ) ในการรับการกำหนดค่าที่เกี่ยวข้องในโครงการดาวน์สตรีมตั้งค่าเช่น CMAKE_PREFIX_PATH (สำหรับ CMAKE) หรือ PKG_CONFIG_PATH (สำหรับระบบบิลด์โดยใช้ PKG-Config) ไปยังเส้นทางที่มีไฟล์ CMAKE CONFIG ตามลำดับหรือไฟล์ PKG-Config
SUITESPARSE_INCLUDEDIR_POSTFIX :
Postfix สำหรับเป้าหมายการติดตั้งของส่วนหัวจาก Suitesparse ค่าเริ่มต้น: suitesparse ดังนั้นไดเรกทอรีค่าเริ่มต้นคือ: CMAKE_INSTALL_PREFIX/include/suitesparse
BUILD_SHARED_LIBS :
หาก ON ห้องสมุดที่ใช้ร่วมกันจะถูกสร้างขึ้น ค่าเริ่มต้น: ON
BUILD_STATIC_LIBS :
หาก ON ห้องสมุดคงที่จะถูกสร้างขึ้น ค่าเริ่มต้น: ON ยกเว้น graphblas ซึ่งใช้เวลานานในการรวบรวมดังนั้นค่าเริ่มต้นสำหรับ graphblas OFF เว้นแต่ BUILD_SHARED_LIBS จะ OFF
SUITESPARSE_CUDA_ARCHITECTURES :
สตริงเช่น "all" หรือ "35;50;75;80" ที่แสดงรายการสถาปัตยกรรม CUDA ที่จะใช้เมื่อรวบรวมเมล็ด CUDA ด้วย nvcc ตัวเลือก "all" ต้องใช้ CMake 3.23 หรือใหม่กว่า ค่าเริ่มต้น: "52;75;80"
BLA_VENDOR :
สตริง ปล่อยให้ UNSET หรือใช้ "ANY" เพื่อเลือกไลบรารี BLAS ใด ๆ (ค่าเริ่มต้น) หรือตั้งค่าเป็นชื่อของ BLA_VENDOR ที่กำหนดโดย findblas.cmake ดู: https://cmake.org/cmake/help/latest/module/findblas.html#blas-lapack-vendors
SUITESPARSE_USE_64BIT_BLAS :
หาก ON ให้มองหา BLAS 64 บิต ถ้า OFF : 32 บิตเท่านั้น ค่าเริ่มต้น: OFF
SUITESPARSE_USE_PYTHON :
หาก ON ให้สร้างอินเทอร์เฟซ Python สำหรับแพ็คเกจใด ๆ ในชุดสูทที่มีหนึ่ง (ปัจจุบัน SPEX เท่านั้น) ถ้า OFF : อย่าสร้างอินเทอร์เฟซ Python ใด ๆ ค่าเริ่มต้น: ON
SUITESPARSE_USE_OPENMP :
หาก ON ใช้งาน OpenMP โดยค่าเริ่มต้นหากมีอยู่ ค่าเริ่มต้น: ON
Graphblas, Lagraph และ Paru จะช้าลงอย่างมากหากไม่ได้ใช้ OpenMP Cholmod จะค่อนข้างช้ากว่าโดยไม่ต้อง OpenMP (ตราบใดที่มันยังคงมี blas/lapack คู่ขนาน) แพ็คเกจสามแพ็คเกจ (UMFPACK, Cholmod และ SPQR) พึ่งพาห้องสมุด BLAS/LAPACK แบบขนานอย่างหนักและห้องสมุดเหล่านั้นอาจใช้ OpenMP ภายใน หากคุณต้องการปิดการใช้งาน OpenMP ในแอปพลิเคชันทั้งหมดให้เลือก BLAS/LAPACK แบบเธรดเดียวหรือ BLAS/LAPACK คู่ขนานที่ไม่ได้ใช้ OpenMP (เช่น Apple Accelerate Framework) การใช้ไลบรารี BLAS/LAPACK แบบเธรดเดี่ยวจะทำให้ UMFPACK, Cholmod และ SPQR ช้าลงอย่างมาก
คำเตือน: Graphblas อาจไม่ปลอดภัยหากไม่มี OpenMP หรือ PTHREADS (ดูคู่มือผู้ใช้ GraphBLAS สำหรับรายละเอียด)
SUITESPARSE_CONFIG_USE_OPENMP :
หาก ON SuiteSparse_config จะใช้ OpenMP หากมีอยู่ ค่าเริ่มต้น: SUITESPARSE_USE_OPENMP มันไม่จำเป็นและใช้เพื่อให้ SuiteSparse_time Call omp_get_wtime เท่านั้น
CHOLMOD_USE_OPENMP :
หาก ON ใช้งาน OpenMP ใน Cholmod หากมีอยู่ ค่าเริ่มต้น: SUITESPARSE_USE_OPENMP
GRAPHBLAS_USE_OPENMP :
หาก ON ใช้งาน OpenMP ใน graphblas หากมีอยู่ ค่าเริ่มต้น: SUITESPARSE_USE_OPENMP
LAGRAPH_USE_OPENMP :
หาก ON ใช้งาน OpenMP ใน Lagraph หากมีให้บริการ ค่าเริ่มต้น: SUITESPARSE_USE_OPENMP
PARU_USE_OPENMP :
หาก ON ใช้งาน OpenMP ใน PARU หากมีอยู่ ค่าเริ่มต้น: SUITESPARSE_USE_OPENMP
SPEX_USE_OPENMP :
หาก ON ใช้งาน OpenMP ใน SPEX หากมีอยู่ ค่าเริ่มต้น: SUITESPARSE_USE_OPENMP
SUITESPARSE_DEMOS :
หาก ON ให้สร้างโปรแกรมสาธิตสำหรับแต่ละแพ็คเกจ ค่าเริ่มต้น: OFF
SUITESPARSE_USE_SYSTEM_BTF :
หาก ON ใช้ไลบรารี BTF ที่ติดตั้งบนระบบบิลด์ หาก OFF ให้สร้าง BTF โดยอัตโนมัติเป็นการพึ่งพาหากจำเป็น ค่าเริ่มต้น: OFF
SUITESPARSE_USE_SYSTEM_CHOLMOD :
หาก ON ใช้ไลบรารี Cholmod ที่ติดตั้งบนระบบบิลด์ หาก OFF ให้สร้าง Cholmod โดยอัตโนมัติเป็นการพึ่งพาหากจำเป็น ค่าเริ่มต้น: OFF
SUITESPARSE_USE_SYSTEM_AMD :
หาก ON ใช้ไลบรารี AMD ที่ติดตั้งบนระบบบิลด์ หาก OFF ให้สร้าง AMD โดยอัตโนมัติเป็นการพึ่งพาหากจำเป็น ค่าเริ่มต้น: OFF
SUITESPARSE_USE_SYSTEM_COLAMD :
หาก ON ใช้ไลบรารี ColAMD ที่ติดตั้งบนระบบบิลด์ หาก OFF ให้สร้าง colamd โดยอัตโนมัติเป็นการพึ่งพาหากจำเป็น ค่าเริ่มต้น: OFF
SUITESPARSE_USE_SYSTEM_CAMD :
หาก ON ใช้ไลบรารี CAMD ที่ติดตั้งในระบบบิลด์ หาก OFF ให้สร้าง CAMD โดยอัตโนมัติเป็นการพึ่งพาหากจำเป็น ค่าเริ่มต้น: OFF
SUITESPARSE_USE_SYSTEM_CCOLAMD :
หาก ON ใช้ไลบรารี CCOLAMD ที่ติดตั้งบนระบบบิลด์ หาก OFF ให้สร้าง CCOLAMD โดยอัตโนมัติเป็นการพึ่งพาหากจำเป็น ค่าเริ่มต้น: OFF
SUITESPARSE_USE_SYSTEM_GRAPHBLAS :
หาก ON ใช้ไลบรารี Graphblas ที่ติดตั้งบนระบบบิลด์ หาก OFF ให้สร้าง Graphblas โดยอัตโนมัติเป็นการพึ่งพาหากจำเป็น ค่าเริ่มต้น: OFF
SUITESPARSE_USE_SYSTEM_SUITESPARSE_CONFIG :
หาก ON ใช้ไลบรารี SuiteSparse_config ที่ติดตั้งบนระบบบิลด์ หาก OFF ให้สร้าง SuiteSparse_config โดยอัตโนมัติเป็นการพึ่งพาหากจำเป็น ค่าเริ่มต้น: OFF
SUITESPARSE_USE_FORTRAN
หาก ON ให้ใช้คอมไพเลอร์ Fortran เพื่อพิจารณาว่า C เรียก FORTAN อย่างไรและสร้างกิจวัตร Fortran เสริมหลายตัว หาก OFF ให้ใช้ SUITESPARSE_C_TO_FORTRAN เพื่อกำหนดวิธีการเรียก c fortran ค่าเริ่มต้น: ON
SUITESPARSE_C_TO_FORTRAN
สตริงที่กำหนดวิธีการเรียก C FORTRAN (เช่นฟังก์ชั่นที่ส่งออกโดยไลบรารี BLAS) การตั้งค่านี้จะใช้หากไม่สามารถตรวจพบคอมไพเลอร์ Fortran หรือ SUITESPARSE_USE_FORTRAN ถูกตั้งค่าเป็น OFF สตริงนี้จะถูกอ่านเป็นรายการอาร์กิวเมนต์และเนื้อหาของแมโครตัวประมวลผลล่วงหน้า อาร์กิวเมนต์แรกของแมโครนั้นคือชื่อฟังก์ชัน Fortran ในตัวอักษรตัวพิมพ์เล็ก อาร์กิวเมนต์ที่สองคือชื่อฟังก์ชันเดียวกันในตัวอักษรตัวพิมพ์ใหญ่ ร่างกายกำหนดโดยเรียกว่าฟังก์ชันฟังก์ชั่น FORTRAN สิ่งนี้จำเป็นเพราะ Fortran เป็นตัวพิมพ์ใหญ่และคอมไพเลอร์ Fortran ที่แตกต่างกันใช้ชื่อที่แตกต่างกัน หากใช้คอมไพเลอร์ MSVC C/C ++ ค่าเริ่มต้นนี้เป็น "(name,NAME) name" (เช่นตัวพิมพ์เล็กโดยไม่ต้องปิดท้าย) นั่นคือชื่อ Mangling Convention สำหรับคอมไพเลอร์ Intel Fortran บน Windows หากมีการใช้คอมไพเลอร์ C/C ++ อื่น ๆ ค่าเริ่มต้นนี้เป็น "(name,NAME) name##_" (เช่นตัวพิมพ์เล็กที่มีขีดล่างต่อท้าย) นั่นคือชื่อ Mangling Convention สำหรับคอมไพเลอร์ Fortran ที่ใช้กันทั่วไปส่วนใหญ่ (เช่น ifx บนแพลตฟอร์มอื่นนอกเหนือจาก Windows, gfortran , flang , ... ) ชื่อหลัง Mangling Convention ยังใช้โดยค่าเริ่มต้นโดย OpenBlas (เป็นอิสระบนแพลตฟอร์มหรือคอมไพเลอร์ที่ใช้ในการสร้าง OpenBLAS) You might need to configure with -DSUITESPARSE_C_TO_FORTRAN="(name,NAME) name##_" if you'd like to build SuiteSparse using a MSVC compiler and link to OpenBLAS.
Additional options are available for specific packages:
UMFPACK_USE_CHOLMOD :
If ON , UMFPACK uses CHOLMOD for additional (optional) ordering options. Default: ON .
KLU_USE_CHOLMOD :
If ON , KLU uses CHOLMOD for additional (optional) ordering options. Default: ON .
CHOLMOD is composed of a set of Modules that can be independently selected; all options default to ON :
CHOLMOD_GPL
If OFF , do not build any GPL-licensed module (MatrixOps, Modify, Supernodal, and GPU modules)
CHOLMOD_CHECK
If OFF , do not build the Check module.
CHOLMOD_MATRIXOPS
If OFF , do not build the MatrixOps module.
CHOLMOD_CHOLESKY If OFF , do not build the Cholesky module. This also disables the Supernodal and Modify modules.
CHOLMOD_MODIFY
If OFF , do not build the Modify module.
CHOLMOD_CAMD
If OFF , do not link against CAMD and CCOLAMD. This also disables the Partition module.
CHOLMOD_PARTITION
If OFF , do not build the Partition module.
CHOLMOD_SUPERNODAL
If OFF , do not build the Supernodal module.
One common issue can affect all packages: getting the right #include files that match the current libraries being built. It's possible that your Linux distro has an older copy of SuiteSparse headers in /usr/include or /usr/local/include, or that Homebrew has installed its suite-sparse bundle into /opt/homebrew/include or other places. Old libraries can appear in in /usr/local/lib, /usr/lib, etc. When building a new copy of SuiteSparse, the cmake build system is normally (or always?) able to avoid these, and use the right header for the right version of each library.
As an additional guard against this possible error, each time one SuiteSparse package #include's a header from another one, it checks the version number in the header file, and reports an #error to the compiler if a stale version is detected. In addition, the Example package checks both the header version and the library version (by calling a function in each library). If the versions mismatch in any way, the Example package reports an error at run time.
For example, CHOLMOD 5.1.0 requires AMD 3.3.0 or later. If it detects an older one in amd.h , it will report an #error :
#include "amd.h"
#if ( ... AMD version is stale ... )
#error "CHOLMOD 5.1.0 requires AMD 3.3.0 or later"
#endif
and the compilation will fail. The Example package makes another check, by calling amd_version and comparing it with the versions from the amd.h header file.
If this error or one like it occurs, check to see if you have an old copy of SuiteSparse, and uninstall it before compiling your new copy of SuiteSparse.
There are other many possible build/install issues that are covered by the corresponding user guides for each package, such as finding the right BLAS, OpenMP, and other libraries, and how to compile on the Mac when using GraphBLAS inside MATLAB, and so on. Refer to the User Guides for more details.
MATLAB/Octave/R/Mathematica interfaces:
Many built-in methods in MATLAB and Octave rely on SuiteSparse, including C=A*B x=Ab , L=chol(A) , [L,U,P,Q]=lu(A) , R=qr(A) , dmperm(A) , p=amd(A) , p=colamd(A) , ... See also Mathematica, R, and many many more. The list is too long.
Julia interface:
https://github.com/JuliaSparse/SparseArrays.jl
Python interface to GraphBLAS by Anaconda and NVIDIA:
https://pypi.org/project/python-graphblas
Intel's Go interface to GraphBLAS:
https://pkg.go.dev/github.com/intel/forGraphBLASGo
See scikit-sparse and scikit-umfpack for the Python interface via SciPy:
https://github.com/scikit-sparse/scikit-sparse https://github.com/scikit-umfpack/scikit-umfpack
See math.js by Jos de Jong for a JavaScript port of CSparse:
https://github.com/josdejong/mathjs
See russell for a Rust interface:
https://github.com/cpmech/russell
Markus Mützel contributed the most recent update of the SuiteSparse build system for all SuiteSparse packages, extensively porting it and modernizing it.
I would also like to thank François Bissey, Sebastien Villemot, Erik Welch, Jim Kitchen, and Fabian Wein for their valuable feedback on the SuiteSparse build system and how it works with various Linux / Python distros and other package managers. If you are a maintainer of a SuiteSparse packaging for a Linux distro, conda-forge, R, spack, brew, vcpkg, etc, please feel free to contact me if there's anything I can do to make your life easier. I would also like to thank Raye Kimmerer for adding support for 32-bit row/column indices in SPQR v4.2.0.
See also the various Acknowledgements within each package.