{"id":18830496,"url":"https://github.com/cmu-sei/gbtl","last_synced_at":"2025-04-14T03:42:34.153Z","repository":{"id":44729746,"uuid":"45112561","full_name":"cmu-sei/gbtl","owner":"cmu-sei","description":"GraphBLAS Template Library (GBTL): C++ graph algorithms and primitives using semiring algebra as defined at graphblas.org","archived":false,"fork":false,"pushed_at":"2023-06-16T23:17:33.000Z","size":4225,"stargazers_count":133,"open_issues_count":6,"forks_count":21,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-03-27T17:46:45.329Z","etag":null,"topics":["graphblas","graphs-algorithms"],"latest_commit_sha":null,"homepage":"","language":"C++","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/cmu-sei.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-10-28T13:00:27.000Z","updated_at":"2024-12-17T17:21:35.000Z","dependencies_parsed_at":"2022-08-12T11:21:42.853Z","dependency_job_id":null,"html_url":"https://github.com/cmu-sei/gbtl","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmu-sei%2Fgbtl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmu-sei%2Fgbtl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmu-sei%2Fgbtl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmu-sei%2Fgbtl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cmu-sei","download_url":"https://codeload.github.com/cmu-sei/gbtl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248818811,"owners_count":21166468,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["graphblas","graphs-algorithms"],"created_at":"2024-11-08T01:49:12.958Z","updated_at":"2025-04-14T03:42:34.133Z","avatar_url":"https://github.com/cmu-sei.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GraphBLAS Template Library (GBTL), v. 3.0\n\n## Project Goals\n\n* Complete, mathematically equivalent implementation of the GraphBLAS\nC API Specification (current specification http://graphblas.org).\n* Use of modern, idiomatic C++ for the implementation and provide a\ntesting ground for the GraphBLAS C++ API Specification development.\n* Graph algorithm library containing examples of commonly used graph\nalgorithms implemented with the GraphBLAS primitive operations.\n\nThis is Version 3.0 of the C++ implementation and is mathematically\nequivalent to Version 1.3 of the GraphBLAS C API.  The API defined by\nthis (v. 3.0) release is not backward compatible with GBTL v. 2.0. See\nthe ChangeLog file for details.\n\nThe project also contains example implementations of many common graph\nalgorithms using the C++ API:\n\n* Breadth-first traversal (aka BFS)\n  * level BFS\n  * parent list BFS\n  * batched BFS\n* Single-source shortest path (SSSP)\n  * Bellman-Ford\n  * Filtered Bellman-Ford\n  * Delta stepping\n* All-pairs shortest path (APSP)\n* Centrality measures\n  * Vertex Betweenness Centrality (batch variant too)\n  * Edge Betweenness Centrality\n  * Closeness centrality\n* Clustering\n  * peer pressure clustering\n  * Markov clustering\n  * Louvain\n* Triangle counting (many variants)\n* K-truss enumeration\n  * incidence matrix variant\n  * adjacency matrix variant\n* PageRank\n* Maximal Independent Set (MIS)\n* Minimum Spanning Tree (MST)\n* Maxflow\n  * Ford-Fulkerson\n* Metrics\n  * degree, in and out\n  * graph distance\n  * radius, diameter\n  * vertex eccentricity\n\nWork is underway to port some of the algorithms in LAGraph repository to GBTL.\n\n## Backend Implementations (Platforms)\n\nThe file structure and build system support defining multiple\ndifferent 'backend' implementations (platforms), but only one of these\ncan be configured and compiled at a time.  However, if multiple\ndifferent build directories are used (extending what is shown below),\nthen each can configured for a different platform.  The code for each\nplatform can be found in an appropriately named subdirectory of\n`src/graphblas/platforms`.\n\n1. 'sequential' platform: this platform is written for a single CPU.\nIt is intended as a reference implementation focusing on correctness,\nbut contains some modest (significant in some cases) performance\nimprovements over previous releases.\n\n2. 'optimized_sequential' platform: this is an experimental platform\nthat is currently under development and is exploring more comprehensive\nperformance improvements (currently only for the mxm operation).\n\nSupport for GPUs that was in version 1.0 is currently not available\nbut can be accessed using the git tag: '1.0.0').\n\n## Building\n\n### Prerequisites\n\n1. Cmake is required to build the set of makefiles.  It has been\nsuccessfully built with cmake 3.10.2.\n\n2. A detailed study of which C++ compilers are required has not been\ncarried out.  The cmake configuration file is currently setup to\nrequire C++17 support.  The test and demo programs have been\nsuccessfully built using the GNU g++ compiler version 9.2.1 with the\n`-std=gnu++1z` option.\n\n3. Building the unit tests also requires the \"Boost Test Library: The\nUnit Test Framework.\"\n\n### Compilation\n\nThis project is designed to use cmake to build and use an \"out of\nsource\" style build to make it easy to clean up. The tests and demos can be\nbuilt in to a \"build\" directory in the top-level directory by following\nthese steps:\n\n```\n$ mkdir build\n$ cd build\n$ cmake [-DPLATFORM=\u003cplatform name\u003e] [-DCMAKE_BUILD_TYPE={Release,Debug}] ../src\n$ make\n```\n\nThe optional `PLATFORM` argument to `cmake` specifies which platform-specific\nsource code (also referred to as the backend) should be configured for the\nbuild and the value must correspond to a subdirectory in\n\"gbtl/src/graphblas/platforms/\" and that subdirectory must have a\n\"backend_include.hpp\" file.  If this argument is omitted it defaults to\nconfiguring the \"sequential\" platform. The other platform currently available\nis \"optimized_sequential\" which is currently under development to improve the\nperformance of various operations.\n\nThe optional `CMAKE_BUILD_TYPE` argument to `cmake` can be used to build debug\nor release (using `-O3` compiler option) versions of the library. The default is\n`Debug`.\n\nThe compiler used to build the library can be changed by\nspecifying `-DCXX=\u003cpathname_to_compiler\u003e` on the cmake commandline as well.\n\nOnce cmake is done building the Makefiles, options to make can be used.  For\nexample, using \"make -i -j8\" tries to build every test (ignoring all errors)\nand uses 8 threads to speed up the build (use a number appropriate for the\nnumber of cores/hyperthreads on your system).\n\nThere is a convenience script to do all of this from scratch called\nrebuild.sh that also removes all the old content from a previous build.\n\nFor CLion support in the cmake project settings \"Build, Execution,\nDeployment \u003e CMake \u003e Generation path:\" set it to \"../build\" to use the\nsame makefiles as that created by the clean build process so that\nthere aren't two different build trees.\n\n### Installation\n\nThe current library is set up as a header only library.  To install this\nlibrary, copy the graphblas directory, its subdirectories and the\nspecific platform subdirectory (sans the platform's test directories) to\na location in your include path.\n\n### Documentation\n\nDocumentation can be generated using the Doxygen documentation system.  To\ngenerate documentation run doxygen from the src directory:\n\n```\n$ cd src\n$ doxygen\n```\n\nAll documentation is built in the 'docs' subdirectory.\n\n## Acknowledgments and Disclaimers\n\nGraphBLAS Template Library (GBTL), Version 3.0 includes and/or can make use\nof certain third party software (\"Third Party Software\"). The Third Party\nSoftware that is used by GraphBLAS Template Library (GBTL), Version 3.0 is\ndependent upon your system configuration, but typically includes the software\nidentified below. By using GraphBLAS Template Library (GBTL), Version 3.0,\nYou agree to comply with any and all relevant Third Party Software terms and\nconditions contained in any such Third Party Software or separate license\nfile distributed with such Third Party Software. The parties who own the\nThird Party Software (\"Third Party Licensors\") are intended third party\nbeneficiaries to this License with respect to the terms applicable to their\nThird Party Software. Third Party Software licenses only apply to the Third\nParty Software and not any other portion of GraphBLAS Template Library\n(GBTL), Version 3.0 or GraphBLAS Template Library (GBTL), Version 3.0 as a\nwhole.\n\nThis material is based upon work funded and supported by the United States\nDepartment of Defense under Contract No. FA8702-15-D-0002 with Carnegie\nMellon University for the operation of the Software Engineering Institute, a\nfederally funded research and development center and by the United States\nDepartment of Energy under Contract DE-AC05-76RL01830 with Battelle Memorial\nInstitute for the Operation of the Pacific Northwest National Laboratory.\n\nTHIS MATERIAL WAS PREPARED AS AN ACCOUNT OF WORK SPONSORED BY AN AGENCY OF\nTHE UNITED STATES GOVERNMENT.  NEITHER THE UNITED STATES GOVERNMENT NOR THE\nUNITED STATES DEPARTMENT OF ENERGY, NOR THE UNITED STATES DEPARTMENT OF\nDEFENSE, NOR CARNEGIE MELLON UNIVERSITY, NOR BATTELLE, NOR ANY OF THEIR\nEMPLOYEES, NOR ANY JURISDICTION OR ORGANIZATION THAT HAS COOPERATED IN THE\nDEVELOPMENT OF THESE MATERIALS, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR\nASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS,\nOR USEFULNESS OR ANY INFORMATION, APPARATUS, PRODUCT, SOFTWARE, OR PROCESS\nDISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED\nRIGHTS.\n\nReference herein to any specific commercial product, process, or service by\ntrade name, trademark, manufacturer, or otherwise does not necessarily\nconstitute or imply its endorsement, recommendation, or favoring by the\nUnited States Government or any agency thereof, or Carnegie Mellon\nUniversity, or Battelle Memorial Institute. The views and opinions of authors\nexpressed herein do not necessarily state or reflect those of the United\nStates Government or any agency thereof.\n\nPlease see “AUTHORS” file for a list of known contributors.\n\n[DISTRIBUTION STATEMENT A] This material has been approved for public release\nand unlimited distribution.  Please see Copyright notice for non-US\nGovernment use and distribution.\n\nThis release is an update of:\n\n1. GraphBLAS Template Library (GBTL)\n(https://github.com/cmu-sei/gbtl/blob/1.0.0/LICENSE) Copyright 2015\nCarnegie Mellon University and The Trustees of Indiana. DM17-0037,\nDM-0002659\n\n2. GraphBLAS Template Library (GBTL)\n(https://github.com/cmu-sei/gbtl/blob/2.0.0/LICENSE) Copyright 2018\nCarnegie Mellon University, Battelle Memorial Institute, and Authors.\nDM18-0559\n\nDM20-0442\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmu-sei%2Fgbtl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcmu-sei%2Fgbtl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmu-sei%2Fgbtl/lists"}