diff --git a/CMakeLists.txt b/CMakeLists.txt index f71856de4a..f74d3efaa9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,10 +59,10 @@ endif ( ) set ( CMAKE_MACOSX_RPATH TRUE ) # version of SuiteSparse:GraphBLAS -set ( GraphBLAS_DATE "July 3, 2020" ) +set ( GraphBLAS_DATE "July 14, 2020" ) set ( GraphBLAS_VERSION_MAJOR 3 ) set ( GraphBLAS_VERSION_MINOR 3 ) -set ( GraphBLAS_VERSION_SUB 2 ) +set ( GraphBLAS_VERSION_SUB 3 ) # GraphBLAS C API Specification version, at graphblas.org set ( GraphBLAS_API_DATE "Sept 25, 2019" ) diff --git a/Doc/ChangeLog b/Doc/ChangeLog index 5be8b02eab..c41cb317c3 100644 --- a/Doc/ChangeLog +++ b/Doc/ChangeLog @@ -5,11 +5,17 @@ Version 4.0.0, FUTURE, 2020 (this list is tentative): * GrB_*_nvals: will no longer guarantee completion; use GrB_wait(&object) or non-polymorphic GrB_*_wait (&object) instead * GrB_error: will have two inputs: a string (char **) and an object - * V4.0.0 will otherwise be identical to V3.3.0. + +Version 3.3.3, July 14, 2020 + + * (20) bug fix: w=A*u with mask non-empty and u empty (issue #13). + affects mxm (A*B when B is a vector), vxm, and mxv. + * GraphBLAS v3.3.3 released as part of SuiteSparse v5.8.1 Version 3.3.2, July 3, 2020 * minor changes to build system + * GraphBLAS v3.3.2 released as part of SuiteSparse v5.8.0 Version 3.3.1, June 30, 2020 diff --git a/Doc/GraphBLAS_UserGuide.pdf b/Doc/GraphBLAS_UserGuide.pdf index 1d820f1b30..47b945e7e2 100644 Binary files a/Doc/GraphBLAS_UserGuide.pdf and b/Doc/GraphBLAS_UserGuide.pdf differ diff --git a/Doc/GraphBLAS_version.tex b/Doc/GraphBLAS_version.tex index 9635efdb47..61d4b97713 100644 --- a/Doc/GraphBLAS_version.tex +++ b/Doc/GraphBLAS_version.tex @@ -1,5 +1,5 @@ % version of SuiteSparse:GraphBLAS \date{VERSION -3.3.2, -July 3, 2020} +3.3.3, +July 14, 2020} diff --git a/Include/GraphBLAS.h b/Include/GraphBLAS.h index 357d8d084d..a64fbd4099 100644 --- a/Include/GraphBLAS.h +++ b/Include/GraphBLAS.h @@ -112,10 +112,10 @@ // The version of this implementation, and the GraphBLAS API version: #define GxB_IMPLEMENTATION_NAME "SuiteSparse:GraphBLAS" -#define GxB_IMPLEMENTATION_DATE "July 3, 2020" +#define GxB_IMPLEMENTATION_DATE "July 14, 2020" #define GxB_IMPLEMENTATION_MAJOR 3 #define GxB_IMPLEMENTATION_MINOR 3 -#define GxB_IMPLEMENTATION_SUB 2 +#define GxB_IMPLEMENTATION_SUB 3 #define GxB_SPEC_DATE "Sept 25, 2019" #define GxB_SPEC_MAJOR 1 #define GxB_SPEC_MINOR 3 diff --git a/README.md b/README.md index fd39eaf2ee..9ab8155b8b 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2020, All Rights Reserved. http://suitesparse.com See GraphBLAS/Doc/License.txt for license. -VERSION 3.3.2, July 3, 2020 +VERSION 3.3.3, July 14, 2020 SuiteSparse:GraphBLAS is an full implementation of the GraphBLAS standard, which defines a set of sparse matrix operations on an extended algebra of diff --git a/Source/GB_AxB_saxpy3_symbolic.c b/Source/GB_AxB_saxpy3_symbolic.c index 4b5365fd52..ad672ac73b 100644 --- a/Source/GB_AxB_saxpy3_symbolic.c +++ b/Source/GB_AxB_saxpy3_symbolic.c @@ -118,6 +118,10 @@ void GB_AxB_saxpy3_symbolic //------------------------------------------------------------------ int64_t kk = TaskList [taskid].vector ; + int64_t bjnz = Bp [kk+1] - Bp [kk] ; + // no work to do if B(:,j) is empty + if (bjnz == 0) continue ; + // partition M(:,j) GB_GET_M_j ; // get M(:,j) int team_size = TaskList [taskid].team_size ; @@ -164,6 +168,7 @@ void GB_AxB_saxpy3_symbolic int64_t *GB_RESTRICT Hf = (int64_t *GB_RESTRICT) TaskList [taskid].Hf ; int64_t hash_bits = (hash_size-1) ; + ASSERT (hash_size >= mjnz) ; for (int64_t pM = mystart ; pM < myend ; pM++) // scan my M(:,j) { GB_GET_M_ij ; // get M(i,j) @@ -553,6 +558,9 @@ void GB_AxB_saxpy3_symbolic { int64_t kk = TaskList [taskid].vector ; ASSERT (kk >= 0 && kk < B->nvec) ; + int64_t bjnz = Bp [kk+1] - Bp [kk] ; + // no work to do if B(:,j) is empty + if (bjnz == 0) continue ; int64_t hash_size = TaskList [taskid].hsize ; bool use_Gustavson = (hash_size == cvlen) ; int master = TaskList [taskid].master ;