10 أكتوبر ، 2024 ، الإصدار 7.8.3 Suitesparse
SuiteSparse هي مجموعة من الحزم المتعلقة بالمصفوفة المتفرقة المكتوبة أو المؤلفة من قبل Tim Davis ، وهي متوفرة على https://github.com/drimothyaldendavis/suitesparse.
المؤلف الرئيسي لـ Suitesparse (الرموز والخوارزميات ، باستثناء Metis): تيم ديفيس
مؤلفو كود ، بترتيب أبجدي (لا يشمل METIS أو LAGRAPH): باتريك أميستوي ، موهسن أزنافيه ، ديفيد باتمان ، جينهاو تشن ، يانكينغ تشن ، إيان داف ، جو إيتون ، ليز فوستر ، ويليام هاجر ، راي كيممر ، سكوت كولودز. دومينزين ، إريك مورينو-كينتنو ، ماركوس موتزل ، كوري نوليل ، إيكاناثان بالاماداي ، سيفاسانكاران راجامانيكام ، سانجاي رانا ، ويسام سيد-لخدار ، ونوري ييراليان.
تم تطوير Lagraph من قبل أكبر عدد من المطورين من أي من الحزم في SuiteSparse ويستحق قائمته الخاصة. تظهر القائمة أيضًا في Lagraph/Attibritors.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 من قبل جورج كاربيس.
مصممي الخوارزمية الإضافية: Esmond NG and John Gilbert.
ارجع إلى كل حزمة للحصول على معلومات الترخيص وحقوق الطبع والنشر ومعلومات المؤلف.
ارجع إلى كل حزمة للوثائق على كل حزمة ، عادة في المجلد الفرعي DOC.
الحزم في SuiteSparse ، والملفات في هذا الدليل:
AMD
الحد الأدنى للترتيب التقريبي. هذه هي وظيفة AMD المدمجة في MATLAB.
المؤلفون: تيم ديفيس ، باتريك أميستوي ، إيان داف
bin
حيث يتم وضع البرامج عند تجميعها ، make local
BTF
التقليب لمنع الشكل الثلاثي
المؤلفون: تيم ديفيس ، إيكاناثان بالاماداي
build
مجلد لشجرة البناء الافتراضية
CAMD
الحد الأدنى التقريبي لترتيب درجة
المؤلفون: تيم ديفيس ، باتريك أميستوي ، إيان داف ، يانكينغ تشن
CCOLAMD
عمود مقيد تقريبي الحد الأدنى لترتيب درجة
المؤلفون: تيم ديفيس ، سيفاسانكاران راجامانيكام ، ستيفان لاريمور.
المتعاونون في تصميم الخوارزمية: Esmond NG ، John Gilbert (for Colamd)
ChangeLog
ملخص للتغييرات على suitesparse. انظر */Doc/ChangeLog للحصول على تفاصيل لكل حزمة.
CHOLMOD
عوامل Cholesky متناثرة. يتطلب AMD ، Colamd ، ccolamd ، Blas ، و lapack. يستخدم اختياريا metis. هذا هو chol و x=Ab في matlab.
مؤلف لجميع الوحدات: تيم ديفيس
مؤلفو الوحدة النمطية Cholmod/Modify: تيم ديفيس وويليام دبليو هاجر
Cholmod/SuiteSparse_Metis: نسخة معدلة من Metis ، مضمنة في مكتبة Cholmod. راجع ملفات readMe.txt للحصول على التفاصيل. المؤلف: جورج كاريبيس. هذه نسخة معدلة قليلاً مدرجة مع SuiteSparse عبر ترخيص مفتوح المصدر المقدم من George Karypis. لا يمكن لـ SuiteSparse استخدام نسخة غير معدلة من Metis.
CITATION.bib
الاستشهادات لحزم suitesparse ، بتنسيق bibtex.
CMakeLists.txt
اختياري ، لتجميع جميع الأجنحة. انظر أدناه.
CODE_OF_CONDUCT.md
إرشادات المجتمع
COLAMD
العمود التقريبي الحد الأدنى لترتيب درجة. هذه هي وظيفة Colamd المدمجة في MATLAB.
المؤلفون (من الكود): تيم ديفيس وستيفان لاريمور
متعاونون في تصميم الخوارزمية: Esmond NG ، John Gilbert
Contents.m
قائمة المحتويات لـ "Help SuiteSparse" في Matlab.
CONTRIBUTING.md
كيفية المساهمة في Suetesparse
CONTRIBUTOR-LICENSE.txt
اتفاق المساهم المطلوب
CSparse
حزمة مصفوفة متناثرة موجزة ، تم تطويرها لكتابي ، "الطرق المباشرة للأنظمة الخطية المتفرقة" ، التي نشرتها SIAM. المقصود في المقام الأول للتدريس. لاحظ أن الرمز هو (ج) تيم ديفيس ، كما هو مذكور في الكتاب.
للإنتاج ، استخدم cxsparse بدلاً من ذلك. على وجه الخصوص ، يشمل كل من csparse و cxsparse نفس اسم الملف: cs.h يتم استخدام هذه الحزمة ل DMPerm المدمج في MATLAB.
المؤلف: تيم ديفيس
CXSparse
تمتد csparse. يتضمن دعم المصفوفات المعقدة وكلا من الأعداد الصحيحة أو طويلة. استخدم هذا بدلاً من csparse لاستخدام الإنتاج ؛ يخلق libcsparse.so (أو dylib على Mac) مع نفس اسم csparse. إنها مجموعة من csparse. يجب أن يكون أي رمز يرتبط ضد CSParse قادرًا أيضًا على الارتباط مع CXSparse بدلاً من ذلك.
المؤلف: تيم ديفيس ، ديفيد باتمان
Example
حزمة بسيطة تعتمد على جميع الأجنحة تقريبًا
.github
سير العمل لاختبار CI على جيثب.
GraphBLAS
خوارزميات الرسم البياني في لغة الجبر الخطي.
https://graphblas.org
المؤلفون: تيم ديفيس ، جو إيتون ، كوري نوليت
include
make install أماكن ، قم بتضمين ملفات مرئية لكل حزمة هنا ، بعد make local .
KLU
عوامل LU متناثرة ، في المقام الأول لمحاكاة الدائرة. يتطلب AMD ، Colamd ، و BTF. يستخدم اختياريا Cholmod و CAMD و CCOLAMD و METIS.
المؤلفون: تيم ديفيس ، إيكاناثان بالاماداي
LAGraph
مكتبة خوارزميات الرسم البياني تعتمد على Graphblas. انظر أيضًا https://github.com/graphblas/lagraph
المؤلفون: كثير.
LDL
حزمة عوامل LDL موجزة للغاية
المؤلف: تيم ديفيس
lib
make install أماكن المكتبات المشتركة لكل حزمة هنا ، بعد make local .
LICENSE.txt
تراخيص تم جمعها لكل حزمة.
Makefile
اختياري ، لتجميع جميع الأجنحة باستخدام make ، والذي يتم استخدامه كركب بسيط لـ 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 .
make install
/usr/local/lib تثبيتات make global /usr/local/include CMAKE_INSTALL_PREFIX make local ./lib make ./include
make uninstall
undoes make install .
make distclean
يزيل جميع الملفات غير في التوزيع ، بما في ذلك ./bin ، ./share ، ./lib ، و ./include .
make purge
مثل make distclean .
make clean
يزيل جميع الملفات غير في التوزيع ، ولكنه يحتفظ بالمكتبات المترجمة والعروض التجريبية ، ./lib ، ./share ، و ./include .
كل مشروع فرعي فردي لديه أيضا كل مما سبق make الأهداف.
الأشياء التي لا تحتاج إلى القيام بها:
make docs
ينشئ أدلة المستخدم من ملفات اللاتكس
make cov
يقوم بتشغيل اختبارات تغطية البيان (Linux فقط)
MATLAB_Tools
ملفات M مختلفة للاستخدام في Matlab
المؤلف: تيم ديفيس (جميع الأجزاء)
ل spqr_rank : المؤلف ليه فوستر وتيم ديفيس
Contents.m
قائمة المحتويات
dimacs10
مصفوفات الأحمال لمجموعة DIMACS10
Factorize
كائن الموجهة x=Ab لـ matlab
find_components
يجد المكونات المتصلة في صورة
GEE
القضاء الغاوسي بسيط
getversion.m
تحديد نسخة MATLAB
gipper.m
إنشاء أرشيف MATLAB
hprintf.m
طباعة الارتباطات التشعبية في نافذة الأوامر
LINFACTOR
سلف لحزمة Factorize
MESHND
ترتيب تشريح متداخل للشبكات العادية
pagerankdemo.m
يوضح كيف يعمل Pagerank
SFMULT
C=S*F حيث S متناثرة و F ممتلئة
shellgui
عرض الصدف
sparseinv
مجموعة فرعية عكسية متناثرة
spok
تحقق مما إذا كانت مصفوفة متناثرة صالحة
spqr_rank
حزمة spqr_rank. MATLAB TOOLBOX لمصفوفات متفرقة ناقصة: المساحات الفارغة ، عوامل موثوقة ، إلخ. مع Leslie Foster ، San Jose State Univ.
SSMULT
C=A*B حيث A و B كلاهما متناثر. كان هذا هو الأساس لـ C=A*B في MATLAB ، حتى تم استبداله بواسطة Graphblas في MATLAB R2021A.
SuiteSparseCollection
لمجموعة SuiteSparse Matrix
waitmex
Waitbar للاستخدام داخل وظيفة mexfunction
Mongoose
تقسيم الرسم البياني.
المؤلفون: نوري ييرالان ، سكوت كولوديج ، وليام هاجر ، تيم ديفيس
ParU
نمط غير متماثل غير متماثل طريقة متعددة الأحواض.
حاليا ما قبل الإصدار.
المؤلفون: موسن عزنافيه وتيم ديفيس
RBio
اقرأ/كتابة المصفوفات المتفرقة بتنسيق راذرفورد/بوينغ
المؤلف: تيم ديفيس
README.md
هذا الملف
SPEX
يحل الأنظمة الخطية المتفرقة في الحساب الدقيق.
يتطلب مكتبات GNU GMP و MPRF.
سيتم استبدال هذا قريبًا بحزمة أكثر عمومية ، SPEX V3 تتضمن هذه الطريقة (LU المتناثرة الدقيقة) وغيرها (cholesky الدقيق المتفرق ، والتحديث/التخفيض الدقيق المتناثر). سوف تتغير واجهة برمجة تطبيقات V3 بشكل كبير.
المؤلفون: كريس لورنكو ، وجينهاو تشن ، وإريك مورينو-كينتنو ، ولورينا لورينا ميجيا دومينزين ، وتيم ديفيس.
راجع https://github.com/clouren/spex للحصول على أحدث إصدار.
SPQR
عوامل QR متناثرة. هذا هو qr و x=Ab في MATLAB. وتسمى أيضا Suitesparseqr.
يتضمن مكتبتين GPU: SPQR/GPUQREngine و SPQR/SuiteSparse_GPURuntime .
مؤلف رمز وحدة المعالجة المركزية: تيم ديفيس
مؤلف وحدات GPU: تيم ديفيس ، نوري ييرالان ، ويسام سيد الخيدر ، سانجاي رانا
ssget
واجهة MATLAB إلى مجموعة مصفوفة SuiteSparse
المؤلف: تيم ديفيس
SuiteSparse_config
مكتبة ذات وظائف مشتركة وتكوين لجميع الحزم المذكورة أعلاه. لا تستخدم CSparse و GraphBLAS و LAGraph و MATLAB_Tools SuiteSparse_config .
المؤلف: تيم ديفيس
SuiteSparse_demo.m
عرض تجريبي لـ Matlab
SuiteSparse_install.m
تثبيت SuiteSparse لـ Matlab
SuiteSparse_paths.m
تعيين مسارات ل sucesparse matlab mexfunctions
SuiteSparse_test.m
اختبار شامل للسود في ماتلاب
UMFPACK
عوامل لو متناثرة. يتطلب AMD و BLAS .
هذا هو lu و x=Ab في MATLAB.
المؤلف: تيم ديفيس
تعاون تصميم الخوارزمية: Iain Duff
ارجع إلى كل حزمة للحصول على معلومات الترخيص وحقوق الطبع والنشر ومعلومات المؤلف. يتم تأليف جميع الرموز أو شارك في تأليفها تيموثي أ. ديفيس (البريد الإلكتروني: [email protected]) ، باستثناء Metis (بواسطة George Karypis) و GraphBLAS/cpu_features (بواسطة Google) و Graphblas/LZ4 و ZSTD و XXHASH (بقلم Yann Collet ، الآن على Facebook) ، و Graphblas/cuda. أجزاء من Graphblas/CUDA هي حقوق الطبع والنشر (C) بواسطة Nvidia. يرجى الرجوع إلى كل من هذه التراخيص.
شكرا على التغليف Suitesparse! فيما يلي بعض الاقتراحات:
يستغرق Graphblas وقتًا طويلاً للتجميع لأنه يخلق العديد من "Factorykernels" السريع في وقت الترجمة. إذا كنت ترغب في تقليل وقت الترجمة وحجم المكتبة ، فقم بتمكين وضع GRAPHBLAS_COMPACT ، ولكن احتفظ بمترجم JIT ممكّن. ثم ستقوم Graphblas بتجميع النواة التي يحتاجها في وقت التشغيل ، عبر برنامج التحويل البرمجي الخاص به. سيكون الأداء هو نفسه المصنع لمقدميبة Jit Jit. يتم وضع حبات المستخدم في ~/.SuiteSparse ، افتراضيا. لا تحتاج إلى توزيع المصدر لـ GraphBlas لتمكين برنامج التحويل البرمجي JIT: فقط libgraphblas.so و GraphBLAS.h يكفي.
Graphblas يحتاج OpenMP! إنه في الأساس رمز مواز ، لذا يرجى توزيعه باستخدام OpenMP. سوف يعاني الأداء خلاف ذلك.
تسارع CUDA: يمكن لـ Cholmod و SPQR الاستفادة من حبات CUDA. إذا لم يكن لديك CUDA أو لا ترغب في تضمينه في التوزيع الخاص بك ، فإن هذا الإصدار من SuiteSparse يتخطى بناء مكتبات CHOLMOD_CUDA و SPQR_CUDA ، ولا يرتبط بمكتبات GPUQREngine و SuiteSparse_GPURuntime .
SuiteSparse عبارة عن عبوة تلوي للعديد من الحزم ، ولكل منها أوراقها المنشورة. للاستشهاد بالمجموعة بأكملها ، استخدم عناوين URL:
يرجى أيضًا الاستشهاد بالأوراق المحددة للحزم التي تستخدمها. هذه قائمة طويلة. إذا كنت تريد قائمة أقصر ، فما عليك سوى الاستشهاد بأحدث "الخوارزمية XXX:" أوراق في TOMS ACM ، لكل حزمة.
للاطلاع على MATLAB X = A B ، انظر أدناه لـ AMD و COLAMD و Cholmod و UMFPACK و SUITESPARSEQR (SPQR).
بالنسبة لـ Graphblas ، و C = AB في MATLAB (قارسي متناثر):
تا ديفيس. الخوارزمية 1037: SuiteSparse: Graphblas: خوارزميات رسم بياني متوازي بلغة الجبر الخطي المتفرّب. ACM trans. الرياضيات. softw. 49 ، 3 ، المادة 28 (سبتمبر 2023) ، 30 صفحة. https://doi.org/10.1145/3577195
T. Davis ، الخوارزمية 1000: Suitesparse: Graphblas: خوارزميات الرسم البياني بلغة الجبر الخطي المتفرقة ، ACM Trans على البرمجيات الرياضية ، المجلد 45 ، رقم 4 ، ديسمبر 2019 ، المقالة رقم 44.
للالتحال:
G. Szárnyas et al. https://doi.org/10.1109/IPDPSW52791.2021.00046.
ل csparse/cxsparse:
Ta Davis ، الطرق المباشرة للأنظمة الخطية المتناثرة ، سلسلة Siam على أساسيات الخوارزميات ، Siam ، فيلادلفيا ، بنسلفانيا ، 2006.
لـ SuiteSparseqr (SPQR): (استشهد أيضًا AMD ، Colamd):
Ta Davis ، الخوارزمية 915: Suitesparseqr: متعددة المعدلات متعددة الترابطات المتفرق QR ، ACM trans. على البرمجيات الرياضية ، 38 (1) ، 2011 ، الصفحات 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 متناثرة على وحدة معالجة الرسومات. ACM trans. الرياضيات. softw. 44 ، 2 ، المادة 17 (يونيو 2018) ، 29 صفحة. https://doi.org/10.1145/3065870
ل cholmod: (استشهد أيضًا AMD ، Colamd):
ي. على البرمجيات الرياضية ، 35 (3) ، 2008 ، ص 22: 1--22: 14. https://dl.acm.org/doi/abs/10.1145/1391989.1391995
Ta Davis و WW Hager ، supernodes الديناميكية في تحديث/تقليل cholesky متناثر وحلال ثلاثية ، ACM trans. على البرمجيات الرياضية ، 35 (4) ، 2009 ، ص 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 on Matrix Analysis and Applications 2001 22: 4 ، 997-1013. https://doi.org/10.1137/S089547989357346
Ta Davis و William W. Hager ، تعديل عامل cholesky متناثر ، Siam Journal on Matrix Analysis and Applications 1999 20: 3 ، 606-627. https://doi.org/10.1137/S0895479897321076
لوحدات Cholmod/GPU:
Steven C. Rennich ، Darko Stosic ، Timothy A. Davis ، تسريع العوامل المتناثرة cholesky على وحدات معالجة الرسومات ، الحوسبة الموازية ، المجلد 59 ، 2016 ، ص 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 ، الصفحات 381-388. https://dl.acm.org/doi/abs/10.1145/1024074.1024081
P. Amestoy ، Ta Davis ، و Duff ، خوارزمية تقريبية لترتيب الدرجة ، Siam J. Matrix Analysis ، 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 ، ص 377-380. https://doi.org/10.1145/1024074.1024080
Ta Davis ، Jr Gilbert ، S. Larimore ، E. Ng ، عمود تقريبي الحد الأدنى لترتيب درجة الخوارزمية ، ACM Trans. على البرمجيات الرياضية ، 30 (3) ، 2004 ، ص. 353-376. https://doi.org/10.1145/1024074.1024079
لـ Umfpack: (استشهد أيضًا AMD و Colamd):
Ta Davis ، الخوارزمية 832: Umfpack-طريقة متعددة الأمراض غير متماثلة مع استراتيجية لطلب عمود ، ACM Trans. على البرمجيات الرياضية ، 30 (2) ، 2004 ، ص. 196-199. https://dl.acm.org/doi/abs/10.1145/992200.992206
Ta Davis ، وهي استراتيجية لطلب الأعمدة المسبقة للطريقة متعددة الأطراف غير المتماثلة ، ACM Trans. على البرمجيات الرياضية ، 30 (2) ، 2004 ، ص. 165--195. https://dl.acm.org/doi/abs/10.1145/992200.992205
Ta Davis و Duff ، وهي طريقة مشتركة غير متناظرة/متعددة الحدود للمصفوفات المتفرقة غير المتماثلة ، ACM Trans. على البرمجيات الرياضية ، 25 (1) ، 1999 ، ص 1-19. https://doi.org/10.1145/305658.287640
Ta Davis و Is Duff ، وهي طريقة متعددة الأماكن غير متماثلة من أجل عامل LU المتناثر ، تحليل Siam J. Matrix والحسابات ، 18 (1) ، 1997 ، ص. 140-158. https://doi.org/10.1137/S0895479894246905
من أجل وضع عامل M:
Ta Davis ، الخوارزمية 930: عامل ، حلال خطي موجه نحو الكائن لـ MATLAB ، ACM Trans. على البرمجيات الرياضية ، 39 (4) ، 2013 ، ص 28: 1-28: 18. https://doi.org/10.1145/2491491.2491498
لـ KLU و BTF (استشهد أيضًا AMD و Colamd):
تا ديفيس وإيكاناثان بالاماداي ناتاراجان. 2010. الخوارزمية 907: KLU ، حلال متناثر مباشر لمشاكل محاكاة الدائرة. ACM trans. الرياضيات. softw. 37 ، 3 ، المادة 36 (سبتمبر 2010) ، 17 صفحة. https://dl.acm.org/doi/abs/10.1145/1824801.1824814
ل LDL:
تا ديفيس. الخوارزمية 849: حزمة عوامل cholesky متفرقة موجزة. ACM trans. الرياضيات. softw. 31 ، 4 (ديسمبر 2005) ، 587-591. https://doi.org/10.1145/1114268.1114277
لمجموعة SSGET ومجموعة SuiteSparse Matrix:
تا ديفيس وييفان هو. 2011. مجموعة المصفوفة المتفرقة بجامعة فلوريدا. ACM trans. الرياضيات. softw. 38 ، 1 ، المادة 1 (نوفمبر 2011) ، 25 صفحة. https://doi.org/10.1145/2049662.2049663
Kolodziej et al. ، (2019). واجهة موقع مجموعة Matrix Suitesparse. Journal of Open Source Software ، 4 (35) ، 1244. https://doi.org/10.21105/joss.01244
لـ spqr_rank :
ليزلي ف. فوستر وتا ديفيس. 2013. الخوارزمية 933: حساب موثوق للمرتبة العددية ، قواعد الفضاء الفارغة ، الحلول الزائفة ، والحلول الأساسية باستخدام SuiteSparseqr. ACM trans. الرياضيات. softw. 40 ، 1 ، المادة 7 (سبتمبر 2013) ، 23 صفحة. https://doi.org/10.1145/2513109.2513116
للمونغووز:
Ta Davis ، William W. Hager ، Scott P. Kolodziej ، and S. Nuri Yeralan. 2020. الخوارزمية 1003: مكتبة Mongoose ، وهي مكتبة خشنة وتقسيم. ACM trans. الرياضيات. softw. 46 ، 1 ، المادة 7 (مارس 2020) ، 18 صفحة. https://doi.org/10.1145/3337792
لصالح SPEX:
كريستوفر لورنكو ، وجينهاو تشن ، وإريك مورينو-كينتنو ، وتا ديفيس. 2022. الخوارزمية 1021: غادر SPEX LU ، وحل بالضبط أنظمة خطية متناثرة عبر عوامل LU الصدقة المتناثرة. ACM trans. الرياضيات. softw. يونيو 2022. 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 ، (لتأكيد استخدام Itegers 32 -bit).
لا علاقة لحجم Blas Integer sizeof(void *) .
عند توزيعه في شكل ثنائي (مثل Debian أو Ubuntu أو Spack أو Brew Package) ، من المحتمل أن يتم تجميع Suitesparse لتوقع Blas 32 بت ، لأن هذه هي الحالة الأكثر شيوعًا. الافتراضي هو استخدام Blas 32 بت ، ولكن يمكن تغيير هذا عن طريق تعيين CMake Fariable SUITESPARSE_USE_64BIT_BLAS إلى ON .
بشكل افتراضي ، يبحث Suitesparse لمكتبة 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 قيد التشغيل ، فسيتم النظر فقط في BLAs 64 بت.
عند اختيار مكتبة Blas معينة ، يتم اتباع إعداد SUITESPARSE_USE_64BIT_BLAS . إذا تم ضبطها على TRUE ، فسيتم استخدام مكتبة Blas 64 بت. إذا كان خطأ (الافتراضي) ، سيتم استخدام مكتبة Blas 32 بت فقط. إذا لم يتم العثور على مثل هذا Blas ، فسوف يفشل البناء.
اكتب ما يلي في هذا الدليل (يتطلب امتياز النظام للقيام 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 الخاص بك.
قد تحتاج أيضًا إلى إضافة SuitesSparse/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
يوجد موقع التثبيت الافتراضي للملفات أدناه ، حيث تكون الحزمة واحدة من الحزم في SuiteSparse:
* `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 في /Users/me/SuiteSparse :
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Users/me/SuiteSparse/lib
export DYLD_LIBRARY_PATH
تجميع جميع السوداء مع make local .
بعد ذلك ، قم بتجميع مكتبة Graphblas Matlab. في قذيفة النظام أثناء وجوده في مجلد SuiteSparse ، make gbmatlab إذا كنت ترغب في تثبيت نظام تكنولوجيا المعلومات على مستوى النظام باستخدام make install ، أو make gblocal إذا كنت ترغب في استخدام المكتبة في SuiteSparse/LIB.
ثم في نافذة أمر MATLAB ، قرص مضغوط إلى دليل SuiteSparse واكتب SuiteSparse_install . سيتم تجميع جميع الحزم ، وسيتم تشغيل العديد من العروض التوضيحية. لتشغيل اختبار شامل (طويل!) ، قم بعمل SuiteSparse_test .
احفظ مسار MATLAB الخاص بك للجلسات المستقبلية مع أوامر MATLAB PATHTOOL أو SAVEPTH. إذا فشلت هذه الطرق لأنه ليس لديك إذن على مستوى النظام ، فأضف المسارات الجديدة إلى ملف بدء التشغيل الخاص بك ، عادة في المستندات/matlab/startup.m. يمكنك أيضًا استخدام ملف SuiteSparse_paths M-File لتعيين جميع مساراتك في بداية كل جلسة MATLAB.
يمكنك تعيين خيارات محددة لـ Cmake مع الأمر (على سبيل المثال):
cmake -DCHOLMOD_PARTITION=OFF -DBUILD_STATIC_LIBS=OFF -DCMAKE_BUILD_TYPE=Debug ..
سيقوم هذا الأمر بتجميع جميع SuiteSparse باستثناء وحدة cholmod/partition (بسبب -DCHOLMOD_PARTITION=OFF ). سيتم استخدام وضع التصحيح (نوع البناء). لن يتم بناء المكتبات الثابتة (بما أن -DBUILD_STATIC_LIBS=OFF تم تعيينه).
SUITESPARSE_ENABLE_PROJECTS :
Semicolon مفصولة قائمة من المشاريع التي سيتم بناؤها أو 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 ، ولكن يمكن استخدام SuiteSparse بدون OpenMP ، لذلك لا يتم إنشاء خطأ إذا لم يتم العثور على OpenMP. ومع ذلك ، إذا كانت SUITESPARSE_USE_STRICT ON ، فسيتم التعامل مع جميع إعدادات *_USE_* بشكل صارم وتحدث خطأ إذا تم تعيين أي شخص على ON ولكن الحزمة أو الإعداد المقابل غير متوفر. يتم دائمًا معاملة إعدادات *_USE_SYSTEM_* على أنها صارمة. الافتراضي: OFF .
SUITESPARSE_USE_CUDA :
إذا تم تعيينه على ON ، يتم تمكين CUDA لجميع Suitesparse. الافتراضي: 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 هو /usr/local ). على سبيل المثال ، سيقوم هذا الأمر أثناء وجوده في مجلد build في مجلد SuiteSparse الأعلى بتعيين دليل التثبيت على /stuff ، المستخدمة من قبل sudo cmake --install . :
cmake -DCMAKE_INSTALL_PREFIX=/stuff ..
sudo cmake --install .
SUITESPARSE_PKGFILEDIR :
الدليل حيث سيتم تثبيت CMake Config و PKG-Config. بشكل افتراضي ، سيتم تثبيت ملفات Cmake Config في المجلد الفرعي cmake للدليل حيث سيتم تثبيت المكتبات (الثابتة) (على سبيل المثال ، lib ). سيتم تثبيت ملفات .pc لـ PKG-Config في المجلد الفرعي pkgconfig للدليل حيث سيتم تثبيت المكتبات (الثابتة).
يسمح هذا الخيار بتثبيتها في موقع مختلف عن المكتبات (الثابتة). يسمح ذلك بتثبيت تكوينات متعددة لمكتبات SuiteSparse في نفس الوقت (على سبيل المثال ، من خلال تعيين CMAKE_RELEASE_POSTFIX و CMAKE_INSTALL_LIBDIR مختلفًا أيضًا). لالتقاط التكوين المعني في مشاريع المصب ، SET ، على سبيل المثال ، CMAKE_PREFIX_PATH (لـ CMAKE) أو PKG_CONFIG_PATH (لأنظمة البناء باستخدام PKG-CONFIG) إلى المسار الذي يحتوي على ملفات تكوين CMAKE المعنية أو ملفات PKG-CONFIG.
SUITESPARSE_INCLUDEDIR_POSTFIX :
Postfix لتثبيت هدف الرأس من SuiteSparse. الافتراضي: SuiteSparse ، وبالتالي فإن الدليل يتضمن CMAKE_INSTALL_PREFIX/include/suitesparse هو:
BUILD_SHARED_LIBS :
إذا ON تشغيل المكتبات المشتركة. الافتراضي: ON .
BUILD_STATIC_LIBS :
إذا ON بناء المكتبات الثابتة. الافتراضي: ON ، باستثناء Graphblas ، الذي يستغرق وقتًا طويلاً للترجمة ، بحيث يتم OFF التشغيل الافتراضي لـ Graphblas ما لم يتم OFF BUILD_SHARED_LIBS .
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 لأي حزمة في SuiteSparse تحتوي على واحدة (حاليًا فقط SPEX). إذا OFF : لا تبني أي واجهة بيثون. الافتراضي: 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). سيؤدي استخدام مكتبة 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 المختلفون اتفاقيات mangling أسماء مختلفة. إذا تم استخدام برنامج التحويل البرمجي MSVC C/C ++ ، فهذا الإعدادات الافتراضية إلى "(name,NAME) name" (أي ، الحالة السفلية دون أن يترتب على السطح). هذا هو اسم اتفاقية Millgling لمرجم Intel Fortran على Windows. إذا تم استخدام أي مجمعات أخرى C/C ++ ، فهذا الافتراضيات "(name,NAME) name##_" (أي ، الحالة السفلية مع السطحية السفلية). هذا هو اسم اتفاقية Millgling لمعظم المترجمين Fortran شائع الاستخدام (مثل ifx على منصات أخرى غير Windows ، gfortran ، flang ، ...). يتم استخدام اتفاقية mangling الاسم الأخير أيضًا افتراضيًا بواسطة 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.