Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
a6e4dbe
feat: add RSM_reachability algorithm
Zestria Dec 3, 2025
2dd9590
feat: add simple test for RSM_reachability algo
Zestria Dec 3, 2025
f079f76
feat: implement the algorithm of rsm reachability
Zestria Feb 20, 2026
767268b
feat: add the algorithm's description
Zestria Mar 3, 2026
745f215
Implement second version of new algorithm
Zestria Apr 8, 2026
f458137
CFPQ RSM algorithm v3
Zestria Apr 17, 2026
530be6c
refactor: built rsm_call matrix internally instead of accepting as pa…
Zestria Apr 17, 2026
fca24ca
refactor: consolidate RSM parameters into struct and modularize tests
Zestria Apr 19, 2026
c9efb51
feat: add multiple source support to CFPQ algorithm
Zestria Apr 19, 2026
35bee56
fix: Stack structure is redundant, use P instead
Zestria Apr 23, 2026
e7f0b95
fix: use matrix_reshape_dup to avoid 32-bit overflow
Zestria Apr 28, 2026
bb7dc96
fix: resolve stash conflict markers from accidental push
Zestria Apr 29, 2026
d5c1dc6
fix workflow on macos ... again ... because of changes in brew
DrTimothyAldenDavis Jul 20, 2026
72c7bfa
v1.2.2: fix for MSVC which has no stdalign.h
DrTimothyAldenDavis Jul 20, 2026
66f0601
revise SuiteSparsePolicy.cmake (from SuiteSparse 7.12.3)
DrTimothyAldenDavis Jul 20, 2026
81860d1
LAGraph config
DrTimothyAldenDavis Jul 21, 2026
cf39dbc
refactor(CFPQ_RSM): simplify reshape and s_mxm_chain APIs
Zestria Oct 19, 2026
751dce7
feat: add lacfpq_blocked algorithm with tests
Zestria Oct 19, 2026
2ab4122
fix(CFPQ_RSM): delete obsolete reshape function
Zestria Oct 19, 2026
86765c2
refactor(lacfpq_blocked): rename struct due to conflicts in homka122 …
Zestria Oct 19, 2026
79ab9a9
feat(CFPQ_RSM): mask new summary edges in PHASE 4
Zestria Oct 20, 2026
e34c516
refactor(CFPQ_RSM): reuse shifted frontier for call transitions
Zestria Oct 20, 2026
63c4bd0
perf(CFPQ_RSM): maintain return-transition prefix incrementally
Zestria Oct 20, 2026
0cf18a8
perf(CFPQ_RSM): accumulate all per-iteration products in one shifted …
Zestria Oct 20, 2026
4c5cd1a
refactor(CFPQ RSM): simplify implementation and reduce scratch matrices
Zestria Oct 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ jobs:
config:
# if there are multiple items in this list, only use should
# deployit=true for just one of them.
- {grb_version: 9.0.0, deployit: false}
- {grb_version: 10.1.0, deployit: true}
#- {grb_version: 9.0.0, deployit: false}
- {grb_version: 10.3.0, deployit: true}

steps:

- name: Checkout
uses: actions/checkout@v2.0.0
uses: actions/checkout@v7

- name: Install tools for build
run: |
Expand Down Expand Up @@ -68,19 +68,20 @@ jobs:
strategy:
matrix:
config:
- {grb_version: 9.0.0}
- {grb_version: 10.1.0}
# - {grb_version: 9.0.0}
- {grb_version: 10.3.0}

steps:

- name: Checkout
uses: actions/checkout@v2.0.0
uses: actions/checkout@v7

- name: Install dependencies
run: |
brew uninstall cmake
brew tap-new libomp/cask
brew extract --version=14.0.6 libomp libomp/cask
brew trust libomp/cask
brew install libomp@14.0.6
- name: Build GraphBLAS
Expand All @@ -99,5 +100,5 @@ jobs:
cd build
cmake ..
JOBS=2 make
ctest .
ctest . --rerun-failed --output-on-failure
39 changes: 34 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,13 @@
# get the version
#-------------------------------------------------------------------------------

cmake_minimum_required ( VERSION 3.20 ) # LAGraph can be built stand-alone
cmake_minimum_required ( VERSION 3.23 )

# version of LAGraph
set ( LAGraph_DATE "Sept 8, 2025" )
set ( LAGraph_DATE "July 21, 2026" )
set ( LAGraph_VERSION_MAJOR 1 CACHE STRING "" FORCE )
set ( LAGraph_VERSION_MINOR 2 CACHE STRING "" FORCE )
set ( LAGraph_VERSION_SUB 1 CACHE STRING "" FORCE )
set ( LAGraph_VERSION_SUB 2 CACHE STRING "" FORCE )

message ( STATUS "Building LAGraph version: v"
${LAGraph_VERSION_MAJOR}.
Expand Down Expand Up @@ -70,6 +70,17 @@ include ( SuiteSparsePolicy )

enable_language ( C )

# check if stdalign.h exists
include ( CheckIncludeFile )
check_include_file ( stdalign.h HAVE_STDALIGN_H )
if ( HAVE_STDALIGN_H )
set ( LAGraph_HAS_STDALIGN_H 1 )
message ( STATUS "stdalign.h is available" )
else ( )
message ( STATUS "stdalign.h is not available" )
set ( LAGraph_HAS_STDALIGN_H 0 )
endif ( )

# configure LAGraph.h with the LAGraph date and version
configure_file (
"Config/LAGraph.h.in"
Expand Down Expand Up @@ -152,8 +163,7 @@ else ( )
# message ( STATUS "GRAPHBLAS_ROOT: ${GRAPHBLAS_ROOT} $ENV{GRAPHBLAS_ROOT}" )

# No package version is explicitly stated here; an arbitrary GraphBLAS
# library can have any version number. For SuiteSparse:GraphBLAS, LAGraph
# requires v7.1.0 or later, which is checked in LAGraph.h.
# library can have any version number.
message ( STATUS "Looking for GraphBLAS with FindGraphBLAS.cmake" )
find_package ( GraphBLAS MODULE REQUIRED )

Expand Down Expand Up @@ -375,6 +385,25 @@ else ( )
endif ( )
endif ( )

if ( GRAPHBLAS_VERSION )
if ( ${GRAPHBLAS_VERSION} MATCHES "([0-9]+).[0-9]+.[0-9]+" )
set ( GraphBLAS_VER_MAJOR ${CMAKE_MATCH_1} )
endif ( )
if ( ${GRAPHBLAS_VERSION} MATCHES "[0-9]+.([0-9]+).[0-9]+" )
set ( GraphBLAS_VER_MINOR ${CMAKE_MATCH_1} )
endif ( )
if ( ${GRAPHBLAS_VERSION} MATCHES "[0-9]+.[0-9]+.([0-9]+)" )
set ( GraphBLAS_VER_PATCH ${CMAKE_MATCH_1} )
endif ( )
if ( LAGRAPH_DUMP )
message ( STATUS "major: ${GraphBLAS_VER_MAJOR}" )
message ( STATUS "minor: ${GraphBLAS_VER_MINOR}" )
message ( STATUS "patch: ${GraphBLAS_VER_PATCH}" )
endif ( )
endif ( )

message (STATUS "Config with GraphBLAS version ${GraphBLAS_VER_MAJOR}.${GraphBLAS_VER_MINOR}.${GraphBLAS_VER_PATCH}" )

# generate config file to be used in common build tree
set ( SUITESPARSE_IN_BUILD_TREE ON )
configure_package_config_file (
Expand Down
13 changes: 7 additions & 6 deletions Config/LAGraph.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
#define LAGRAPH_VERSION_MAJOR @LAGraph_VERSION_MAJOR@
#define LAGRAPH_VERSION_MINOR @LAGraph_VERSION_MINOR@
#define LAGRAPH_VERSION_UPDATE @LAGraph_VERSION_SUB@
#define LAGRAPH_HAS_STDALIGN_H @LAGraph_HAS_STDALIGN_H@

//==============================================================================
// include files and helper macros
Expand Down Expand Up @@ -104,8 +105,8 @@

#if ( !LAGRAPH_VANILLA ) && defined ( GxB_SUITESPARSE_GRAPHBLAS )
// use SuiteSparse, and its GxB* extensions
#if GxB_IMPLEMENTATION < GxB_VERSION (9,0,0)
#error "If using SuiteSparse::GraphBLAS, version 9.0.0 or later is required"
#if GxB_IMPLEMENTATION < GxB_VERSION (10,0,0)
#error "SuiteSparse::GraphBLAS v10.0.0 or later is required"
#endif
#define LAGRAPH_SUITESPARSE 1
#else
Expand Down Expand Up @@ -2410,11 +2411,11 @@ int LAGr_SingleSourceShortestPath
) ;

//------------------------------------------------------------------------------
// LAGr_Betweenness: betweeness centrality metric
// LAGr_Betweenness: betweenness centrality metric
//------------------------------------------------------------------------------

/** LAGr_Betweenness: betweeness centrality metric. This methods computes an
* approximation of the betweeness-centrality metric of all nodes in the graph.
/** LAGr_Betweenness: betweenness centrality metric. This methods computes an
* approximation of the betweenness-centrality metric of all nodes in the graph.
* Only a few given source nodes are used for the approximation. This is an
* Advanced algorithm (G->AT is required).
*
Expand Down Expand Up @@ -2442,7 +2443,7 @@ LAGRAPH_PUBLIC
int LAGr_Betweenness
(
// output:
GrB_Vector *centrality, // centrality(i): betweeness centrality of i
GrB_Vector *centrality, // centrality(i): betweenness centrality of i
// input:
const LAGraph_Graph G, // input graph
const GrB_Index *sources, // source vertices to compute shortest paths
Expand Down
4 changes: 2 additions & 2 deletions Config/LAGraphConfig.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ include ( CMakeFindDependencyMacro )
set ( _dependencies_found ON )

if ( NOT TARGET GraphBLAS::GraphBLAS )
# Look GraphBLAS
# Look for GraphBLAS
list ( PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR} )
find_dependency ( GraphBLAS @GraphBLAS_VERSION_MAJOR@.@GraphBLAS_VERSION_MINOR@ )
find_dependency ( GraphBLAS @GraphBLAS_VER_MAJOR@.@GraphBLAS_VER_MINOR@ )
endif ( )

if ( NOT GraphBLAS_FOUND )
Expand Down
20 changes: 10 additions & 10 deletions cmake_modules/FindGraphBLAS.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -271,18 +271,18 @@ string (

if ( GRAPHBLAS_VERSION )
if ( ${GRAPHBLAS_VERSION} MATCHES "([0-9]+).[0-9]+.[0-9]+" )
set ( GraphBLAS_VERSION_MAJOR ${CMAKE_MATCH_1} )
set ( GraphBLAS_VER_MAJOR ${CMAKE_MATCH_1} )
endif ( )
if ( ${GRAPHBLAS_VERSION} MATCHES "[0-9]+.([0-9]+).[0-9]+" )
set ( GraphBLAS_VERSION_MINOR ${CMAKE_MATCH_1} )
set ( GraphBLAS_VER_MINOR ${CMAKE_MATCH_1} )
endif ( )
if ( ${GRAPHBLAS_VERSION} MATCHES "[0-9]+.[0-9]+.([0-9]+)" )
set ( GraphBLAS_VERSION_PATCH ${CMAKE_MATCH_1} )
set ( GraphBLAS_VER_PATCH ${CMAKE_MATCH_1} )
endif ( )
if ( LAGRAPH_DUMP )
message ( STATUS "major: ${GraphBLAS_VERSION_MAJOR}" )
message ( STATUS "minor: ${GraphBLAS_VERSION_MINOR}" )
message ( STATUS "patch: ${GraphBLAS_VERSION_PATCH}" )
message ( STATUS "major: ${GraphBLAS_VER_MAJOR}" )
message ( STATUS "minor: ${GraphBLAS_VER_MINOR}" )
message ( STATUS "patch: ${GraphBLAS_VER_PATCH}" )
endif ( )
endif ( )

Expand All @@ -300,10 +300,10 @@ if ( EXISTS "${GRAPHBLAS_INCLUDE_DIR}" AND NOT GRAPHBLAS_VERSION )
message ( STATUS "minor: ${GRAPHBLAS_MINOR_STR}" )
message ( STATUS "patch: ${GRAPHBLAS_PATCH_STR}" )
endif ( )
string ( REGEX MATCH "[0-9]+" GraphBLAS_VERSION_MAJOR ${GRAPHBLAS_MAJOR_STR} )
string ( REGEX MATCH "[0-9]+" GraphBLAS_VERSION_MINOR ${GRAPHBLAS_MINOR_STR} )
string ( REGEX MATCH "[0-9]+" GraphBLAS_VERSION_PATCH ${GRAPHBLAS_PATCH_STR} )
set (GRAPHBLAS_VERSION "${GraphBLAS_VERSION_MAJOR}.${GraphBLAS_VERSION_MINOR}.${GraphBLAS_VERSION_PATCH}")
string ( REGEX MATCH "[0-9]+" GraphBLAS_VER_MAJOR ${GRAPHBLAS_MAJOR_STR} )
string ( REGEX MATCH "[0-9]+" GraphBLAS_VER_MINOR ${GRAPHBLAS_MINOR_STR} )
string ( REGEX MATCH "[0-9]+" GraphBLAS_VER_PATCH ${GRAPHBLAS_PATCH_STR} )
set (GRAPHBLAS_VERSION "${GraphBLAS_VER_MAJOR}.${GraphBLAS_VER_MINOR}.${GraphBLAS_VER_PATCH}")
endif ( )

set ( GRAPHBLAS_LIBRARIES ${GRAPHBLAS_LIBRARY} )
Expand Down
27 changes: 11 additions & 16 deletions cmake_modules/SuiteSparsePolicy.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@
# GraphBLAS is false.
#
# SUITESPARSE_CUDA_ARCHITECTURES: a string, such as "all" or
# "35;50;75;80" that lists the CUDA architectures to use
# "75;80" that lists the CUDA architectures to use
# when compiling CUDA kernels with nvcc. The "all"
# option requires cmake 3.23 or later.
# Default: "52;75;80".
# Default: "all".
#
# BLA_VENDOR and BLA_SIZEOF_INTEGER: By default, SuiteSparse searches for
# the BLAS library in a specific order. If you wish to
Expand Down Expand Up @@ -310,24 +310,19 @@ if ( SUITESPARSE_USE_FORTRAN )
set ( SUITESPARSE_HAS_FORTRAN ON )
if ( NOT "${CMAKE_Fortran_COMPILER_ID}" STREQUAL "${CMAKE_C_COMPILER_ID}" OR
NOT "${CMAKE_Fortran_COMPILER_ID}" STREQUAL "${CMAKE_CXX_COMPILER_ID}" )
message ( STATUS " " )
message ( STATUS "Incompatible Fortran/C/C++ compilers detected:" )
message ( STATUS " Fortran: ${CMAKE_Fortran_COMPILER}" )
message ( STATUS " Fortran id: ${CMAKE_Fortran_COMPILER_ID}" )
message ( STATUS " C ${CMAKE_C_COMPILER}" )
message ( STATUS " C id: ${CMAKE_C_COMPILER_ID}" )
message ( STATUS " C++ ${CMAKE_CXX_COMPILER}" )
message ( STATUS " C++ id: ${CMAKE_CXX_COMPILER_ID}" )
if ( "${CMAKE_C_COMPILER_ID}" STREQUAL "IntelLLVM" )
message ( STATUS " " )
message ( STATUS "Incompatible Fortran/C/C++ compilers detected:" )
message ( STATUS " Fortran: ${CMAKE_Fortran_COMPILER}" )
message ( STATUS " Fortran id: ${CMAKE_Fortran_COMPILER_ID}" )
message ( STATUS " C ${CMAKE_C_COMPILER}" )
message ( STATUS " C id: ${CMAKE_C_COMPILER_ID}" )
message ( STATUS " C++ ${CMAKE_CXX_COMPILER}" )
message ( STATUS " C++ id: ${CMAKE_CXX_COMPILER_ID}" )
# icx/icpx cannot be used with gfortran: this is a fatal error
message ( FATAL_ERROR "ERROR: Using Fortran with SuiteSparse requires that "
" it has the same compiler ID as the C/C++ compilers."
" Use a compatible Fortran compiler, or set SUITESPARSE_USE_FORTRAN to OFF." )
else ( )
# other cases: just issue a warning and hope it works.
message ( WARNING "Warning: Using Fortran with SuiteSparse requires that "
" it has the same compiler ID as the C/C++ compilers."
" Use a compatible Fortran compiler, or set SUITESPARSE_USE_FORTRAN to OFF." )
endif ( )
endif ( )
message ( STATUS "Fortran: enabled" )
Expand Down Expand Up @@ -401,7 +396,7 @@ endif ( )

if ( SUITESPARSE_HAS_CUDA )
message ( STATUS "CUDA: enabled" )
set ( SUITESPARSE_CUDA_ARCHITECTURES "52;75;80" CACHE STRING "CUDA architectures" )
set ( SUITESPARSE_CUDA_ARCHITECTURES "all" CACHE STRING "CUDA architectures" )
set ( CMAKE_CUDA_ARCHITECTURES ${SUITESPARSE_CUDA_ARCHITECTURES} )
else ( )
message ( STATUS "CUDA: not enabled" )
Expand Down
Loading