{"id":47598050,"url":"https://github.com/sfilippone/psblas3","last_synced_at":"2026-04-10T13:03:16.797Z","repository":{"id":53820874,"uuid":"97005115","full_name":"sfilippone/psblas3","owner":"sfilippone","description":"A library of parallel sparse linear algebra on high performance computer.","archived":false,"fork":false,"pushed_at":"2026-03-24T15:44:51.000Z","size":54175,"stargazers_count":65,"open_issues_count":6,"forks_count":17,"subscribers_count":10,"default_branch":"development","last_synced_at":"2026-03-25T08:27:48.475Z","etag":null,"topics":["fortran","linear-algebra","mpi","sparse-linear-systems","sparse-matrices"],"latest_commit_sha":null,"homepage":"","language":"Fortran","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sfilippone.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-07-12T12:31:53.000Z","updated_at":"2026-03-24T15:44:55.000Z","dependencies_parsed_at":"2023-02-16T19:46:14.264Z","dependency_job_id":"6720268f-cb32-40eb-b272-8db93f1a44b4","html_url":"https://github.com/sfilippone/psblas3","commit_stats":null,"previous_names":[],"tags_count":47,"template":false,"template_full_name":null,"purl":"pkg:github/sfilippone/psblas3","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sfilippone%2Fpsblas3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sfilippone%2Fpsblas3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sfilippone%2Fpsblas3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sfilippone%2Fpsblas3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sfilippone","download_url":"https://codeload.github.com/sfilippone/psblas3/tar.gz/refs/heads/development","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sfilippone%2Fpsblas3/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31290867,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fortran","linear-algebra","mpi","sparse-linear-systems","sparse-matrices"],"created_at":"2026-04-01T18:30:54.996Z","updated_at":"2026-04-01T18:30:55.692Z","avatar_url":"https://github.com/sfilippone.png","language":"Fortran","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PSBLAS library, version 3.9\n\n\nThe PSBLAS library, developed with the aim to facilitate the parallelization of computationally intensive scientific applications, is designed to address parallel implementation of iterative solvers for sparse linear systems through the distributed memory paradigm. It includes routines for multiplying sparse matrices by dense matrices, solving block diagonal systems with triangular diagonal entries, preprocessing sparse matrices, and contains additional routines for dense matrix operations. The current implementation of PSBLAS addresses a distributed memory execution model operating with message passing.\n\nThe PSBLAS library version 3 is implemented in the Fortran 2008 programming language, with reuse and/or adaptation of existing Fortran 77 and Fortran 95 software, plus a handful of C routines. \n\n## References\n\n\nThe architecture, philosophy and implementation details of the library are contained in the following papers:\n\n- The architecture of the Fortran 2003 sparse BLAS is described in:\n  \u003eS. Filippone, A. Buttari. Object-Oriented Techniques for Sparse Matrix\n  \u003eComputations in Fortran 2003, ACM Trans. on Math. Software, vol. 38, No.\n  4, 2012.\n\n- The software engineering ideas are further detailed in  the paper:\n  \u003eV. Cardellini, S. Filippone and D. Rouson. Design Patterns for\n  \u003esparse-matrix computations on hybrid CPU/GPU platforms, Scientific \n  \u003eProgramming, 22(2014), pp.1-19.\n\n- The GPU support is  explored in\n  \u003e  S. Filippone, V. Cardellini, D. Barbieri and A. Fanfarillo:\n  \u003e  Sparse Matrix-Vector Multiplication on GPGPUs ACM Transactions on Mathematical Software (TOMS), Volume 43 Issue 4, December 2016.\n\n- Version 1.0 of the library is described in:\n  \u003eS. Filippone, M. Colajanni. PSBLAS: A library for parallel linear\n  \u003ealgebra computation on sparse matrices, ACM Trans. on Math. Software,\n  \u003e26(4), Dec. 2000, pp. 527-550.\n- The software infrastructure changes required to accommodate the implementation of the\n  Additive-Schwarz preconditioners available in [AMG4PSBLAS](https://github.com/sfilippone/amg4psblas/) are detailed in:\n  \u003e A. Buttari, P. D'Ambra, D. di Serafino, S. Filippone, Extending PSBLAS to build parallel Schwarz preconditioners, Applied Parallel Computing. State of the Art in Scientific Computing: 7th International Workshop, PARA 2004, LNCS 3732, 2006, pp. 593-602.\n  \n  \u003e A. Buttari,  P. D'Ambra, D. Di Serafino, S. Filippone, 2LEV-D2P4: A package of high-performance preconditioners for scientific and engineering applications, Applicable Algebra in Engineering, Communications and Computing, 2007, 18(3), pp. 223-239.\n  \n  \u003e P. D'Ambra, D. Di Serafino, S. Filippone, MLD2P4: A package of parallel algebraic multilevel domain decomposition preconditioners in Fortran 95 ACM Transactions on Mathematical Software, 2010, 37(3), 30\n\nPSBLAS is the backbone of the Parallel Sparse Computation Toolkit ([PSCToolkit](https://psctoolkit.github.io/)) suite of libraries. See the paper:\n  \u003e D’Ambra, P., Durastante, F., \u0026 Filippone, S. (2023). Parallel Sparse Computation Toolkit. Software Impacts, 15, 100463.\n\n### Other Software credits \n\nWe originally included a modified implementation of some of the Sparker\n(serial sparse BLAS)  material; this has been completely rewritten, way\nbeyond the intention(s) and responsibilities of the original developers.\nThe main reference for the serial sparse BLAS is:\n  \u003eDuff, I., Marrone, M., Radicati, G., and Vittoli, C. Level 3 basic \n  \u003elinear algebra subprograms for sparse matrices: a user level interface,\n  \u003eACM Trans. Math. Softw., 23(3), 379-401, 1997.\n\n## Installing\n\n  To compile (using configure/make/make install) and run our software\n  you will need the following \n  prerequisites (see also SERIAL below):\n\n  1. A working version of MPI.\n\n2. A version of the BLAS; you can specify a specific version with `--with-blas`\n\n3. We have had good results with  the METIS library, from \n   https://github.com/KarypisLab/METIS.\n   This is optional; it is  used in the util and test/fileread\n   directories but only if you specify `--with-metis`.\n\n5. If you have the AMD package of Davis, Duff and Amestoy, you can\n   specify `--with-amd` (see `./configure --help` for more details).\n   We use the C interface to AMD.\n\n6. If you have CUDA available, use\n   - `--enable-cuda`           to compile CUDA-enabled methods\n   - `--with-cudadir=\u003cpath\u003e`   to specify the CUDA toolkit location\n   - `--with-cudacc=XX,YY,ZZ`  to specify a list of target CCs (compute\n   \t\t\t\t\t\t\t\t  capabilities).\n   CUDA versions have specific compatibility requirements;\n   for example:\n     - CUDA version 11.8 supports GNU compilers up to version 11\n     - CUDA versions 12.3 through 12.6 support GNU compilers up to version 13\n     - CUDA versions 12.8 and 12.9 support  GNU compilers up to version 14\n     - CUDA version 13.0 supports  GNU compilers up to version 15      \n     For further information please refer to the CUDA documentation at\n     https://developer.nvidia.com/cuda/gpus\n\nThe configure script will generate a `Make.inc` file suitable for building\nthe library. The script is capable of recognizing the needed libraries\nwith their default names; if they are in unusual places consider adding\nthe paths with `--with-libs`, or explicitly specifying the names in\n`--with-blas`, etc. \n\n\u003e[!CAUTION]\n\u003e Please note that a common way for the configure script\n\u003e to fail is to specify inconsistent MPI vs. plain compilers, either\n\u003e directly or indirectly via environment variables; e.g. specifying the\n\u003e Intel compiler with `FC=ifort` while at the same time having an \n\u003e `MPIFC=mpif90` which points to GNU Fortran. \n\n\u003e[!TIP]\n\u003e The best way to avoid this\n\u003e situation is (in our opinion) to use the environment modules package\n\u003e (see [http://modules.sourceforge.net/](http://modules.sourceforge.net/)), and load the relevant\n\u003e variables with (e.g.) \n\u003e ```\n\u003e module load gcc/14.2.0 openmpi/5.0.8\n\u003e ```\n\u003e This will delegate to the modules setup to make sure that the version of\n\u003e openmpi in use is the one compiled with the gnu46 compilers. After the\n\u003e configure script has completed you can always tweak the Make.inc file\n\u003e yourself.\n\nAfter you have Make.inc fixed,  run \n```\nmake\n``` \nto  compile the library; go to the test directory and its subdirectories\nto get test programs done.\nYou can then install with\n ```\n make install\n ```\n We recommend specifying  `--prefix=/path` in the configure step, so that\n the libraries will be installed under `/path/lib`,\n the module files will be installed under `/path/modules`, the documentation under `/path/docs` and so on.\nThe C interface header files are under `/path/include`.\nIf `/path` is a system directory, you may need \n ```\n sudo make install\n ```\nIf you do not specifye `--with-prefix` the usual default of `/usr` applies.\n### Packaging changes, CUDA and GPU support\n\nThis version of PSBLAS incorporates into a single package three\nentities that were previously separated:\n| Library |                    |\n|---------|--------------------|\n| PSBLAS  | the base library   |\n| PSBLAS-EXT | a library providing additional storage formats for matrices and vectors |\n| SPGPU      | a package of kernels for NVIDIA GPUs originally written by Davide Barbieri and Salvatore Filippone; see the license file [cuda/License-spgpu.md](cuda/License-spgpu.md) |\n\nMoreover, the module and library previously called psb_krylov are now called\npsb_linsolve, but their usage is otherwise unchanged.\t\t\t\t\t\t\t\t\n\n### OpenACC\nThere is a highly experimental version of an OpenACC interface,\nyou can compile it by speficifying\n```bash\n--enable-openacc  --with-extraopenacc=\"-foffload=nvptx-none=-march=sm_70\"\n```\nwhere the argument to the extraopenacc option depends on the compiler\nyou are using (the example shown here is relevant for the GNU\ncompiler). \n\n### Serial\n\nConfiguring with `--enable-serial` will provide a fake MPI stub library\nthat enables running in pure serial mode; no MPI installation is needed\nin this case (but note that the fake MPI stubs are only guaranteed to\ncover what we use internally, it's not a complete replacement). \n\n### Integers\n\nWe have two kind of integers: IPK for local indices, and LPK for\nglobal indices. Their size  can be specified at configure time,\ne.g.\n```bash\n--with-ipk=4 --with-lpk=8\n```\nwhich is asking for 4-bytes local indices, and 8-bytes global indices\n(this is the default). \n\n## CMAKE\nPSBLAS supports building with CMake (version 3.11 or higher). This method handles the automatic detection of compilers, MPI, and linear algebra libraries.\nStandard Compilation (Without CUDA)\nTo perform a standard compilation, run:\n### 1. Create and enter a dedicated build directory\n```\nmkdir build\ncd build\n```\n### 2. Configure the project\n```\ncmake ..\n```\n### 3. Compile the libraries\n```\nmake\n```\nIf you wish to install PSBLAS in a specific location (similar to using the --prefix option in the legacy configure script), you must define the CMAKE_INSTALL_PREFIX variable.\nTo set a custom installation path, run the configuration command as follows:\n#### Example: Installing PSBLAS to a specific folder in your home directory\n```\ncmake -DCMAKE_INSTALL_PREFIX=/home/user/psblas_install\n```\n### Compiling with CUDA Support\nTo enable GPU support via CUDA, you must set the PSB_BUILD_CUDA option to ON during the configuration step.\nImportant Compatibility Note: CUDA support is strictly incompatible with 8-byte local integers. If you manually set CMAKE_PSB_IPK to 8, CUDA support will be automatically disabled by the system.\nTo build with CUDA enabled:\n\n```\ncmake -DPSB_BUILD_CUDA=ON ..\n```\nThe compilation then proceed as before through make\nWhen this flag is active, CMake will search for the CUDAToolkit, enable the CUDA language, and define necessary macros such as PSB_HAVE_CUDA.\n\n### Customizing Integer Sizes\nYou can override the default integer sizes (4-byte local IPK and 8-byte global LPK) using the following variables:\nExample: Using 8-byte global integers (default) and 4-byte local integers\n```\ncmake -DCMAKE_PSB_IPK=4 -DCMAKE_PSB_LPK=8 ..\n```\n\n### 4. Installation\nTo install the libraries, header files, and Fortran modules to your system (or a custom path defined by -DCMAKE_INSTALL_PREFIX), run:\n```\nmake install\n```\nThe files will be organized into the lib, include, and modules subdirectories within the installation prefix, same as the configure build.\n## MPI and Compilers\n The library has been successfully compiled and tested with multiple compilers\n and MPI implementations; this release has been successfully tested with:\n - MPICH 4.2.3, 4.3.0, 4.3.2\n - OpenMPI 4.1.8. 5.0.7, 5.0.8, 5.0.9\n \n combined with\n \n - GNU compilers 10.5.0, 11.5.0, 12.5.0, 13.3.0, 14.2.0 14.3.0, 15.2.0\n - LLVM  20.1.0 and 21.1.0 (except OpenMPI 4.1.8 which does not build with LLVM)\n \n Moreover, it has been tested with the Intel OneAPI toolchain versions 2025.2 and 2025.3\n\n As of this release, the NVIDIA compiler 25.7 fails to handle our code.\n Cray, IBM and NAg compilers have been used for testing in the past, but not on this version.\n \t\t\t   \n## Documentation\n\nFurther information on installation and configuration can be found in the documentation.\nSee [docs/psblas-3.9.pdf](docs/psblas-3.9.pdf); an HTML version of the same document is\navailable in docs/html. Please consult the sample programs, especially\n- [test/pdegen/psb_s_pde2d.F90](test/pdegen/psb_s_pde2d.F90) [test/pdegen/psb_d_pde2d.F90](test/pdegen/psb_d_pde2d.F90)\n- [test/pdegen/psb_s_pde2d.F90](test/pdegen/psb_s_pde3d.F90) [test/pdegen/psb_d_pde2d.F90](test/pdegens/psb_d_pde3d.F90)\n\nwhich contain examples for the solution of linear systems obtained by the discretization of a generic second-order differential equation in two:\n```math\n- a_1 \\frac{\\partial^2 u}{\\partial x^2} \n- a_2 \\frac{\\partial^2 u}{\\partial y^2} \n+ b_1 \\frac{\\partial u}{\\partial x} \n+ b_2 \\frac{\\partial u}{\\partial y} \n+ c u = f\n```\nor three\n```math\n- a_1 \\frac{\\partial^2 u}{\\partial x^2} \n- a_2 \\frac{\\partial^2 u}{\\partial y^2} \n- a_3 \\frac{\\partial^2 u}{\\partial z^2} \n+ b_1 \\frac{\\partial u}{\\partial x} \n+ b_2 \\frac{\\partial u}{\\partial y} \n+ b_3 \\frac{\\partial u}{\\partial z} \n+ c u = f\n```\ndimensions on the unit square/cube with Dirichlet boundary conditions.\n\n### Utilities\n\nThe [test/util](test/util) directory contains some utilities to convert to/from\nHarwell-Boeing and MatrixMarket file formats.\n\n## TODO and bugs\n\n- [ ] Improving OpenACC support\n- [ ] Improving OpenMP support\n- [X] Fix all reamining bugs. Bugs? We dont' have any ! 🤓\n\n\u003e [!NOTE]\n\u003e To report bugs 🐛 or issues ❓ please use the [GitHub issue system](https://github.com/sfilippone/psblas3/issues).\n\n\n\n## The PSBLAS team. \n**Project lead:**\nSalvatore Filippone\n\n**Contributors** (_roughly reverse cronological order_):\n\n- Fabio      Durastante\n- Luca       Pepè Sciarria\n- Theophane  Loloum\n- Dimitri    Walther\n- Pasqua     D'Ambra\n- Andea      Di Iorio\n- Stefano    Petrilli\n- Soren      Rasmussen\n- Zaak       Beekman\n- Ambra\t     Abdullahi Hassan\n- Alfredo    Buttari\n- Daniela    di Serafino\n- Thomas     Amestoy\n- Michele    Martone\n- Michele    Colajanni\n- Fabio      Cerioni\n- Stefano    Maiolatesi\n- Dario      Pascucci\n\n\n## RELATED SOFTWARE\nIf you are looking for more sophisticated preconditioners, you may be\ninterested in the package AMG4PSBLAS from\n\u003chttp://github.com/sfilippone/amg4psblas\u003e and the whole [PSCTooolkit suite](https://psctoolkit.github.io/).\n\n\nContact: \u003chttps://github.com/sfilippone/psblas3\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsfilippone%2Fpsblas3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsfilippone%2Fpsblas3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsfilippone%2Fpsblas3/lists"}