Skip to content

Commit 1fd5475

Browse files
Merge pull request #442 from DrTimothyAldenDavis/v10.3.1_branch
GraphBLAS 10.3.1
2 parents fc69d36 + 0380c2b commit 1fd5475

17 files changed

+57
-29
lines changed

Doc/ChangeLog

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
Jan 21, 2026, version 10.3.1
2+
3+
* (67) bug fix: incorrect JIT kernel constructed for R=masker(C,M,Z)
4+
when R is hypersparse. Found by Roi Lipman, FalkorDB.
5+
* (66) bug fix: GB_bitonic did not compile with the MS cl compiler.
6+
Found by Erik Welch, NVIDIA.
7+
18
Dec 3, 2025, version 10.3.0
29

310
* GrB_extract: performance improvement for C=A(I,J) when A is very large

Doc/GraphBLAS_UserGuide.pdf

370 Bytes
Binary file not shown.

Doc/GraphBLAS_version.tex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
% version of SuiteSparse:GraphBLAS
22
\date{VERSION
3-
10.3.0,
4-
Dec 3, 2025}
3+
10.3.1,
4+
Jan 21, 2026}
55

Doc/UserGuide/GrB_release.tex

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,15 @@ \section{Release Notes}
55

66
\begin{itemize}
77

8+
\item Jan 21, 2026: version 10.3.1
9+
10+
\begin{itemize}
11+
\item (67) bug fix: incorrect JIT kernel constructed for R=masker(C,M,Z)
12+
when R is hypersparse. Found by Roi Lipman, FalkorDB.
13+
\item (66) bug fix: \verb'GB_bitonic' did not compile with the MS cl
14+
compiler. Found by Erik Welch, NVIDIA.
15+
\end{itemize}
16+
817
\item Dec 3, 2025: version 10.3.0
918

1019
\begin{itemize}

Include/GraphBLAS.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// SuiteSparse:GraphBLAS 10.3.0
1+
// SuiteSparse:GraphBLAS 10.3.1
22
//------------------------------------------------------------------------------
33
// GraphBLAS.h: definitions for the GraphBLAS package
44
//------------------------------------------------------------------------------
@@ -286,10 +286,10 @@
286286

287287
// The version of this implementation, and the GraphBLAS API version:
288288
#define GxB_IMPLEMENTATION_NAME "SuiteSparse:GraphBLAS"
289-
#define GxB_IMPLEMENTATION_DATE "Dec 3, 2025"
289+
#define GxB_IMPLEMENTATION_DATE "Jan 21, 2026"
290290
#define GxB_IMPLEMENTATION_MAJOR 10
291291
#define GxB_IMPLEMENTATION_MINOR 3
292-
#define GxB_IMPLEMENTATION_SUB 0
292+
#define GxB_IMPLEMENTATION_SUB 1
293293
#define GxB_SPEC_DATE "Dec 22, 2023"
294294
#define GxB_SPEC_MAJOR 2
295295
#define GxB_SPEC_MINOR 1

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2025, All Rights Reserved.
44

55
SPDX-License-Identifier: Apache-2.0
66

7-
VERSION 10.3.0, Dec 3, 2025
7+
VERSION 10.3.1, Jan 21, 2026
88

99
SuiteSparse:GraphBLAS is a complete implementation of the GraphBLAS standard,
1010
which defines a set of sparse matrix operations on an extended algebra of

Source/global/GB_Global.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ static GB_Global_struct GB_Global =
253253
.gpu_count = 0, // # of GPUs in the system
254254

255255
// OpenMP locks
256-
.lock_is_created = {0, 0, 0, 0},
256+
.lock_is_created = {0, 0, 0, 0, 0, 0, 0, 0}, // of size GB_GLOBAL_NLOCKS
257257
} ;
258258

259259
//==============================================================================

Source/jit_wrappers/GB_masker_phase1_jit.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ GrB_Info GB_masker_phase1_jit // count nnz in each R(:,j)
2929
const int64_t *restrict R_to_Z,
3030
const bool Rp_is_32, // if true, Rp is 32-bit; else 64-bit
3131
const bool Rj_is_32, // if true, Rh is 32-bit; else 64-bit
32+
const int R_sparsity, // GxB_SPARSE or GxB_HYPERSPARSE
3233
// original input:
3334
const GrB_Matrix M, // required mask
3435
const bool Mask_comp, // if true, then M is complemented
@@ -45,7 +46,8 @@ GrB_Info GB_masker_phase1_jit // count nnz in each R(:,j)
4546
GB_jit_encoding encoding ;
4647
char *suffix ;
4748
uint64_t hash = GB_encodify_masker (&encoding, &suffix,
48-
GB_JIT_KERNEL_MASKER_PHASE1, NULL, Rp_is_32, Rj_is_32, false,
49+
GB_JIT_KERNEL_MASKER_PHASE1, R_sparsity, /* rtype: */ NULL,
50+
Rp_is_32, Rj_is_32, /* Ri is not accessed: */ false,
4951
M, Mask_struct, Mask_comp, C, Z) ;
5052

5153
//--------------------------------------------------------------------------

Source/jit_wrappers/GB_masker_phase2_jit.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ GrB_Info GB_masker_phase2_jit // phase2 for R = masker (C,M,Z)
2323
const int64_t *restrict R_to_M,
2424
const int64_t *restrict R_to_C,
2525
const int64_t *restrict R_to_Z,
26+
const int R_sparsity, // any sparsity format
2627
// original input:
2728
const GrB_Matrix M, // required mask
2829
const bool Mask_comp, // if true, then M is complemented
@@ -45,7 +46,8 @@ GrB_Info GB_masker_phase2_jit // phase2 for R = masker (C,M,Z)
4546
GB_jit_encoding encoding ;
4647
char *suffix ;
4748
uint64_t hash = GB_encodify_masker (&encoding, &suffix,
48-
GB_JIT_KERNEL_MASKER_PHASE2, R, R->p_is_32, R->j_is_32, R->i_is_32,
49+
GB_JIT_KERNEL_MASKER_PHASE2, R_sparsity, R->type,
50+
R->p_is_32, R->j_is_32, R->i_is_32,
4951
M, Mask_struct, Mask_comp, C, Z) ;
5052

5153
//--------------------------------------------------------------------------

Source/jitifyer/GB_encodify_masker.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ uint64_t GB_encodify_masker // encode a masker problem
2020
char **suffix, // suffix for user-defined kernel
2121
// input:
2222
const GB_jit_kcode kcode, // kernel to encode
23-
const GrB_Matrix R, // may be NULL, for phase1
23+
const int R_sparsity, // any sparsity format
24+
const GrB_Type rtype,
2425
const bool Rp_is_32, // if true, R->p is 32 bit; else 64 bit
2526
const bool Rj_is_32, // if true, R->h is 32 bit; else 64 bit
2627
const bool Ri_is_32, // if true, R->i is 32 bit; else 64 bit
@@ -33,11 +34,10 @@ uint64_t GB_encodify_masker // encode a masker problem
3334
{
3435

3536
//--------------------------------------------------------------------------
36-
// check if the R->type is JIT'able
37+
// check if the rtype is JIT'able
3738
//--------------------------------------------------------------------------
3839

39-
GrB_Type rtype = (R == NULL) ? NULL : R->type ;
40-
if (R != NULL && rtype->hash == UINT64_MAX)
40+
if (rtype != NULL && rtype->hash == UINT64_MAX)
4141
{
4242
// cannot JIT this type
4343
memset (encoding, 0, sizeof (GB_jit_encoding)) ;
@@ -50,7 +50,8 @@ uint64_t GB_encodify_masker // encode a masker problem
5050
//--------------------------------------------------------------------------
5151

5252
GB_encodify_kcode (encoding, kcode) ;
53-
GB_enumify_masker (&encoding->code, R, Rp_is_32, Rj_is_32, Ri_is_32,
53+
GB_enumify_masker (&encoding->code, R_sparsity, rtype,
54+
Rp_is_32, Rj_is_32, Ri_is_32,
5455
M, Mask_struct, Mask_comp, C, Z) ;
5556

5657
//--------------------------------------------------------------------------

0 commit comments

Comments
 (0)