1Version 5.0.5, May 17, 2021 2 3 * (26) performance bug fix: reduce-to-vector where A is hypersparse CSR 4 with a transposed descriptor (or CSC with no transpose), and some cases 5 for GrB_mxm/mxv/vxm when computing C=A*B with A hypersparse CSC and B 6 bitmap/full (or A bitmap/full and B hypersparse CSR), the wrong 7 internal method was being selected via the auto-selection strategy, 8 resulting in a significant slowdown in some cases. 9 10Version 5.0.4, May 13, 2021 11 12 * @GrB MATLAB interface: changed license from Apache-2.0 13 to GNU GPLv3 or later. 14 15Version 5.0.3, May 12, 2021 16 17 * (25) bug fix: disabling ANY_PAIR semirings in Source/GB_control.h would 18 cause a segfault if those disabled semirings were used. 19 * demos: no longer built by default 20 * (24) bug fix: GB_PUBLIC added to the new functions in GraphBLAS.h 21 * GrB_Matrix_reduce_BinaryOp: reinstated from v4.0.3; 22 same limit on built-in ops that correspond to known monoids. 23 * Source/GB_control.h: more semirings disabled by default to reduce 24 compile time and binary library size. The semirings still work, but 25 are not as fast since they now use the generic methods. 26 27Version 5.0.2, May 5, 2021 28 29 * GrB_Matrix_reduce_BinaryOp: removed. Use a monoid instead, with 30 GrB_reduce or GrB_Matrix_reduce_Monoid. 31 * (23) bug fix: GrB_Matrix_apply_BinaryOp1st and 2nd were using the 32 wrong descriptors for GrB_INP0 and GrB_INP1. Caught by Erik Welch, 33 Anaconda. 34 * memory pool added for faster memory allocation 35 * calloc no longer used: using malloc+memset(0) instead 36 * realloc option: if not available, uses malloc+memcpy+free 37 * @GrB MATLAB interface ported to MATLAB R2021a. 38 * GxB_Matrix_diag: construct a diagonal matrix from a vector 39 * GxB_Vector_diag: extract a diagonal from a matrix 40 * concat/split: added methods to concatenate and split matrices 41 * import/export: size of arrays now in bytes, not entries. 42 A new parameter, is_uniform, has been added to all import/export 43 methods, which indicates that the matrix values are all the same. 44 * (22) bug fix: SIMD vectorization was missing reduction(+,task_cnvals) 45 in GB_dense_subassign_06d_template.c. Caught by Jeff Huang, Texas A&M, 46 with his software package for race-condition detection. 47 48Version 4.0.3, Jan 19, 2021 49 50 * faster min/max monoids 51 * MATLAB: G=GrB(G) converts G from v3 object to v4 52 53Version 4.0.2, Jan 11, 2021 54 55 * added ability to load *.mat files saved with GraphBLAS v3. 56 * GrB_wait: added #pragma omp flush after any GrB_wait 57 58Version 4.0.1, Jan 4, 2021 59 60 * substantial performance gains: compared with v3.3.3: up to 5x faster in 61 BFS (with LAGraph_bfs_parent2), 2x faster in Betweeness-Centrality (in 62 LAgraph_bc_bactch5); BC now faster than GAP for kron, urand, and 63 twitter (the 3 largest matrices in the GAP benchmark). 64 * GrB_wait(), with no inputs: removed 65 * GrB_wait(&object): polymorphic function added 66 * GrB_*_nvals: no longer guarantees completion; use GrB_wait for that 67 * GrB_error: now has two parameters: a string (char **) and an object 68 The no-input GrB_error(void) method has been deprecated and removed. 69 * GrB_Matrix_reduce_BinaryOp: limited to certain built-in ops. 70 Support for user-defined operators and binary ops that do not 71 correspond to built-in monoids has been deprecated and removed. 72 * GrB_*_extractTuples: may return indices out of order 73 * removed internal features: GBI iterator, slice and hyperslice matrices 74 * bitmap/full matrices and vectors added: faster and lower memory usage 75 when many entries present in a matrix or vector 76 * GxB_SPARSITY_CONTROL, GxB_SPARSITY_STATUS added: for matrix get/set 77 * positional operators and semirings: GxB_FIRSTI_INT32 and related ops 78 * jumbled matrices: sort left pending, like zombies and pending tuples 79 * GxB_get/set: added GxB_SPARSITY_* (hyper, sparse, bitmap, or full) 80 * GxB_HYPER: enum renamed to GxB_HYPER_SWITCH 81 * GxB_BITMAP_SWITCH added: for matrix/vector get/set and global get/set 82 * GxB*import/export: API modified 83 * GxB_SelectOp: nrows and ncols removed from function signature 84 * OpenMP tasking removed from mergesort: just as fast; now ports to Windows 85 * GxB_BURBLE added: for diagnostic output 86 * (21) bug fix: A({lo,hi})=scalar in MATLAB; A(lo:hi)=scalar was OK 87 88Version 3.3.3, July 14, 2020 89 90 * (20) bug fix: w<mask>=A*u with mask non-empty and u empty (issue #13). 91 affects mxm (A*B when B is a vector), vxm, and mxv. 92 93Version 3.3.2, July 3, 2020 94 95 * minor changes to build system 96 * GraphBLAS v3.3.2 released as part of SuiteSparse v5.8.0 97 98Version 3.3.1, June 30, 2020 99 100 * (19) bug fix: incorrect typecasting when GrB_assign or GxB_subassign 101 is simple: C=A where A is sparse or dense, in GB_dense_subassign_24. 102 Bug introduced in v3.2.0. 103 * revised gbmake: to allow GraphBLAS to be compiled in Octave 104 105Version 3.3.0, June 26, 2020 106 107 * GrB_wait( ): with no input arguments, has been deprecated. It will 108 be removed in V4.0. 109 * added complex types: GxB_FC32 and GxB_FC64, many unary operators, 110 binary operators, monoids, and semirings 111 * added GrB_*_apply_BinaryOp1st and 2nd: also GxB version with GxB_Scalar 112 * added bitwise operators: and their monoids and semirings 113 * added predefined GrB* monoids and semirings: from the v1.3 spec. 114 * MATLAB interface: added complex matrices and operators, bitwise 115 operators; improved performance 116 * changed typecasting rules: for casting floating point types to integers 117 * added GrB_*_wait: wait for specific object to complete 118 * added GrB_*_resize: same as prior GxB_*_resize functions 119 * added GrB_kronecker: same as prior GxB_kron 120 * added version methods: GrB_getVersion, GRB_VERSION, GRB_SUBVERSION 121 * added GrB_*_removeElement 122 * (18) bug fix: fixed typecasting in GB_dense_subassign_23, generic case 123 * (17) bug fix: non-polymorphic GrB_eWiseAdd and eWiseMult functions 124 were misnamed. 125 126Version 3.2.2, Apr 2, 2020 127 128 * (16) bug fix to MATLAB interface: for matrices with dimension > 2^53. 129 Note that MATLAB will not display the size correctly in 'whos', which 130 rounds the int64 values of m and n for [m,n]=size(A) of a GrB_matrix to 131 a 'flint', which is a double value, that then gets rounded. This is 132 outside of my control. size(A) is correct, just the 'whos' is wrong. 133 * port to Microsoft Visual Studio: including GraphBLAS/Demo and 134 GraphBLAS/Test, which had not been ported in v3.1.2. 135 * remove dependency on m4: end-users no longer need m4; still needed by 136 the Source/codegen*.m scripts but those are for development only. 137 138Version 3.2.1, Mar 10, 2020 139 140 * GAP benchmarks in MATLAB: in GraphBLAS/GraphBLAS/GAP (all but CC). 141 * atomic read/write: faster atomics for icc (see Source/GB_atomics.h) 142 * install name for Mac: in alternative/Makefile and Tcov/Makefile 143 * enable -DGBCOMPACT from CMake: for faster Travis builds 144 * MATLAB interface: better error message in GrB.reduce 145 * MATLAB triangle count: added sorting heuristic in GrB.tricount. 146 * bug fix for GraphBLAS/Demo/simple_timer: better selection of which 147 timer to use; simple_timer.[ch] made consistent. 148 * no bug fixes needed in primary GraphBLAS library: just in Demo, test, 149 and alternative/Makefile. 150 151Version 3.2.0, Feb 20, 2020 152 153 * GxB_*_define for user-defined compile-time objects: removed. Not 154 compatible with the faster kernels for mxm and dense matrices/vectors. 155 Use the GrB_*_new functions in the GraphBLAS C API Specification 156 instead. 157 * faster saxpy-based matrix multiply (about 5x to 10x for mxv and vxm): 158 removed Sauna workspace. Heap method removed. Hash method added. 159 * better performance for dense matrix and vectors: NOTE: see bug (19) above 160 * faster typecast of the mask matrix M: GB_mcast replaces cast_M 161 * added GB_BURBLE: for development diagnostics 162 * changed default chunk size: from 4K to 64K 163 * added the PAIR binary operator: f(x,y)=1 164 * added the ANY binary operator: f(x,y)=x, or f(x,y)=y ; arbitrary choice 165 * added structural mask: from v1.3 C API Specification 166 * added GrB_DESC_*: predefined descriptor, from v1.3 C API Specification 167 * many atomics added: for the faster matrix multiply. These changes have 168 not been ported to Microsoft Visual Studio, which only supports a 169 subset of "#pragma omp atomic" statements. This will be resolved in a 170 future version; in the meantime, use v3.1.2 with MS Visual Studio 171 instead of v3.2.0. 172 * no bug fixes 173 174Version 3.1.2, Dec 16, 2019 175 176 * (15) bug fix in parallel matrix-matrix multiply: could occur when # of 177 threads is larger than the # of columns of B, for C=A*B, and when 178 B is a standard matrix with one or more empty vectors. 179 * (14) bug fix for MATLAB interface: A(58) and A(:) were conflated. 180 * compiler port: changes to allow GraphBLAS to be compiled with older 181 compilers (pre ANSI C11), and Microsoft Visual Studio. 182 183Version 3.1.1, Oct 21, 2019 184 185 * minor edits: user guide and comments in code 186 187Version 3.1.0, Oct 2, 2019 188 189 * added MATLAB interface: GraphBLAS/GraphBLAS is new. In Source/, added 190 global pointer to printf for MATLAB mexPrintf, pointer to 191 mexMakeMemoryPersistent for Sauna workspace. Changed how GraphBLAS 192 objects are printed with GxB_print. Changed how duplicate indices are 193 handled in assign and extract, to match the MATLAB stadard. Added 194 helper functions for MATLAB (GB_matlab_helper.[ch]). 195 Code size: @GrB is 9.7KLOC, test/ is 4.5KLOC). 196 * bug counter added to this ChangeLog: to count # of bugs that appeared 197 in formal releases that affect production code. The count excludes 198 bug fixes for test code, bugs in the demo codes, bugs introduced 199 in beta versions that were fixed before any formal release, and 200 bugs prior to version 1.0. Code size of Source/, Include/ excluding 201 Source/Generated, and Config/*.m4, is 42,659 lines (not including the 202 new MATLAB interface). 13 bugs / 42K lines is a bug rate of 0.3 bugs 203 per KLOC, much lower than most commercial software, but higher than 204 UMFPACK, CHOLMOD, etc (with about 0.1 bug per KLOC). GraphBLAS is a 205 much more complex library, from the external view, than solving Ax=b. 206 If UMFPACK has a bug, then Ax-b is typically large; there is no 207 'residual' to check for GraphBLAS. Also, in GraphBLAS, the test suite 208 has about the same size as the main library (32K lines in Test/ and 209 Tcov/). For UMFPACK, etc, the test suite is always about 1/3 the size 210 of the library itself. 211 * 'make dox': for doxygen removed (not really that useful) 212 * (13) bug fix to GB_reduce_to_vector: to avoid integer divide-by-zero for 213 a matrix with n=0 columns. 214 * (12) bug fix to GB_accum_mask: when C+=T if C has no entries except 215 pending tuples 216 * (11) bug fix to GB_resize: when pending tuples exist and vdim is growing 217 from vdim <= 1 to vdim > 1, matrix must be finished first. 218 * (10) bug fix to GB_subref_phase1: "int nI" parameter should be int64_t. 219 220Version 3.0.1, July 26, 2019 221 222 * version number: Three changes to the user-visible API are not 223 backward-compatible with V2.x: the added parameters to GxB_init and 224 GxB_SelectOp_new, and the change in the type of the Thunk argument for 225 GxB_select. Thus, the SO version of SuiteSparse:GraphBLAS is now 3, no 226 longer 2. This change only affects SuiteSparse:GraphBLAS GxB_* 227 extenstions, not any GrB_* functions or definitions. 228 * added GxB_Scalar: acts like a GrB_Vector of length 1. 229 * OpenMP parallelism: added nthreads and chunk parameters to GxB_set/get. 230 * added parameter to GxB_init: bool user_malloc_is_thread_safe, 231 for the MATLAB mexFunction interface, or any other malloc library that 232 might not be thread-safe. mxMalloc is not thread-safe. 233 This change is not backward compatible with Version 2.x. 234 * changed thunk parameter of GxB_select: was (void *), now GxB_Scalar. 235 This change is not backward compatible with Version 2.x. 236 * added parameter to GxB_SelectOp_new: to specify the type of the Thunk. 237 This change is not backward compatible with Version 2.x. 238 * added options to GxB_get: determine if a matrix is hypersparse or not, 239 global library, API information, nthreads, and chunk. 240 * added options to GxB_set: nthreads, and chunk. 241 * new operators and semirings: RDIV (f(x,y)=y/x) and RMINUS (y-x) 242 binary operators. 243 244Version 2.3.5, Oct 20, 2019 245 246 * minor update: fix for tests in MATLAB R2019b 247 248Version 2.3.4, July 4, 2019 249 250 * Collected Algorithm of the ACM 251 * (9) minor bug fix to GrB_*_extractTuples: nvals was left unchanged 252 if the matrix or vector had no entries (now returned as zero). 253 254Version 2.3.3, May 27, 2019 255 256 * minor changes to the documentation: no change to the code 257 258Version 2.3.2, Mar 18, 2019 259 260 * GxB_Matrix_Option_set: removed spurious check of input matrix 261 262Version 2.3.1, Mar 9, 2019 263 264 * _Generic: further modifications for 'int' vs 'const int', needed for 265 icc 19.0.0. 266 * (8) bug fix in user_def1.m4: compile-time GxB_Semring_define with 267 terminal monoids 268 269Version 2.3.0, Feb 25, 2019 270 271 * early exit: for integer TIMES monoids (terminal value is 0); 272 cannot use zero for floating-point, to preserve NaN behavior 273 * GrB_assign / GxB_subassign: further exploit of aliased inputs 274 * Test/: MATLAB mexFunctions now link against the dynamic -lgraphblas 275 * bug fix for Demo/mis*: random number generator could create 276 duplicate scores, which leads to a stall 277 * terminal values for user monoids: added GxB_Monoid_terminal_new, 278 GxB_Monoid_terminal_define, and GxB_Monoid_terminal 279 * added GxB_init: GrB_init with malloc/calloc/realloc/free redefinition 280 * _Generic: compilers differ on _Generic(x,int:,const int:). gcc, clang, 281 icc 18.0.0 treat int and const int the same; icc 18.0.3 treats them 282 as different. This is a result of an ambiguity in the ANSI C11 283 specification. Minor update so that the use of _Generic(...) is 284 compatible with all compilers. 285 * early exit: for GrB_reduce 286 287Version 2.3.0 (BETA1), Feb 16, 2019 288 289 * simplified GBI_*_iterators 290 * towards OpenMP: PARALLEL comments added to most files (all upper case) 291 where parallelism will be added in the future. 292 * early exit: for monoids: MIN, MAX, AND, OR, based on terminal values 293 * Demo/bfs*: much faster (prior versions had performance bug) 294 * GrB_assign for accum/mask step: faster, zombies and pending tuples 295 exploited by C<M>=accum(C,T) for any GraphBLAS method, when either the 296 mask M or accum are present. 297 * moved persistent thread-workspace from the matrix to a global array 298 * added isequal function to Demos/ 299 * added import/export method 300 * added nthreads: to descriptor, the matrix, and a global nthreads 301 setting, and added Context as parameter in many internal 302 functions, to pass in Context->nthreads for future parallelism 303 * defined all enum constants explicitly: no change to their values, 304 this just ensures they remain fixed in future versions 305 306Version 2.2.3, Dec 30, 2018 307 308 * added doxygen documentation: minor changes to the code 309 comments to accomodate doxygen. Added Doxyfile settings file. 310 311Version 2.2.2, Dec 18, 2018 312 313 * GxB_print: better output for compile-time user objects 314 * (7) bug fix: for GxB_Type_define, for GrB_*_build. 315 * (6) bug fix: for GxB_Semiring_define, which was unable to access 316 the predefined GxB_*_BOOL_MONOIDs. 317 318Version 2.2.0, Nov 29, 2018 319 320 * identical to 2.2.0 (BETA4): date changed, and "BETA4" removed. 321 Demo/choldemo removed (testing artifact, not needed). 322 323Version 2.2.0 (BETA4), Nov 28, 2018 324 325 * minor change to GxB_get, GxB_set (all functions using va_arg): 326 const removed from parameter definitions to silence spurious warnings 327 from clang version 10.0.0, Mac OSX 10.14. 328 * added Doc/CONTRIBUTOR-LICENSE.txt 329 * added Doc/README_Doc.txt: includes instructions for OpenMP on the Mac 330 * minor changes to comments of GB_subref_template: to match the ACM TOMS 331 paper discussion of GrB_extract 332 * included the GraphBLAS Extras: triangle counting, k-truss, and 333 Kronecker matrix generator 334 * minor changes for gcc -Wall -Wpedantic -Wextra, and icc -w3: to fix or 335 silence warnings. In a few cases, prior versions were relying on 336 extensions to the ANSI C11 standard in gcc, clang, xlc. The extensions 337 are widely supported but best avoided anway. 338 339Version 2.2.0 (BETA3), Nov 23, 2018 340 341 * removed persistent thread-local O(n) workspace: the Mark, 342 Flag, and Work arrays in GB_thread_local in prior versions are removed. 343 Replaced with temporary workspace, except for C=A*B using Gustavson's 344 method, which now uses the C->Sauna workspace, held in the output 345 matrix. 346 * better support for user-application threads: GrB_finalize is now fully 347 compliant with the spec. User applications can use POSIX or OpenMP 348 threads, or no threading, and use GraphBLAS in a thread-safe manner. 349 Added OpenMP and POSIX pthread demos. 350 * bug fix: freeing an object (monoid, matrix, or vector) that is 351 dependent on another user-defined objects (an operator or type) that 352 has already been freed led to the reading of an invalid value: the size 353 of the object. This only affects the memory usage statistics for 354 testing only, not production use. 355 * beta bug fix: memory leak in pagerank_demo program (bug first appears in 356 2.2.0BETA2, not in any non-BETA final release 357 358Version 2.2.0 (BETA2), Nov 15, 2018 359 360 * added additional pagerank example in Demo/ 361 * beta bug fix: GxB_Monoid_define: bug fix for C struct types. bug first 362 appears in Version 2.2.0 (BETA1), not in any non-BETA final release. 363 364Version 2.2.0 (BETA1), Nov 2, 2018 365 366 * added GxB_*_define: to create user-defined objects at compile-time. 367 All internal macros renamed to add the GB_ prefix, to help avoid 368 name conflict with possible user-defined objects and macros. 369 * changed default format to GxB_BY_ROW 370 * performance improvements to GrB*assign* and GrB*extract 371 * added PageRank demos 372 * added GxB_*print: to display all GraphBLAS objects 373 374Version 2.1.0, Oct 14, 2018 375 376 * identical to V2.1.0 BETA2: except for a minor update to the user guide, 377 and date of release 378 379Version 2.1.0 (BETA2), Sept 17, 2018 380 381 * user function z=f(x,y): passed to GrB_BinaryOp_new, may now be called as 382 z=f(z,y), with x and z aliased. This is permitted by the API 383 specification, and greatly improves performance of user-defined 384 semirings. 385 386Version 2.1.0 (BETA1), Sept 11, 2018 387 388 * major update: added hypersparse and CSR formats, colon notation, and 389 user selection of the method used by C=A*B. All changes to the API are 390 backward compatible with Version 2.0, so the SO version does not 391 increase (it is still 2.x). 392 * added GxB_AxB_METHOD: for user selection of C=A*B method 393 * added GxB_RANGE, GxB_STRIDE and GxB_BACKWARDS: for MATLAB-like colon 394 notation: begin:end and begin:inc:end. 395 * added GxB_*Option* functions: to control hypersparsity and CSR/CSC format 396 * added GxB_set and GxB_set: to set/get the descriptor and other options 397 * (5) bug fix: if the accum operator z=f(x,y) was user-defined with 398 different built-in types for x, y, z, the typecasting was wrong 399 * GXB_* macros renamed GxB_*: old ones kept for backward compatibility 400 401Version 2.0.3: July 4, 2018 402 403 * (4) bug fix to GxB_resize 404 * improvements to CMake script: version now defined only in CMakeLists.txt, 405 and then cmake configures Include/GraphBLAS.h, README, and User Guide 406 * bfs5 demo: asymptotically faster using sparse vector v but somewhat 407 slower if entire graph is traversed 408 409Version 2.0.2: June 25, 2018 410 411 * added -lm to library dependency 412 * minor changes to demos and user guide 413 * removed unused code from Generated/* semiring functions 414 415Version 2.0.1: Mar 15, 2018 416 417 * (3) bug fix in GxB_kron: computed C incorrectly when A and B had pending 418 updates on input 419 420Version 2.0.0: Mar 12, 2018 421 422 * moved opaque object definitions from Include/GraphBLAS.h to Source/GB.h 423 * modifications to meet changes in the Nov 14, 2017, API specification: 424 GrB_Monoid_TYPE_new changed to GrB_Monoid_new_TYPE. 425 GrB_Type_new modified: 2nd argument no longer a type, but sizeof(type). 426 This change is not backward compatible with Version 1.x, so this 427 required an increase in the SO version, so the version number increased 428 from 1.x to 2.x. 429 * to allow non-C applications to access all GraphBLAS functions: 430 These were just macros, now defined as both macros and functions: 431 GrB_Type_new, GrB_UnaryOp_new, GrB_BinaryOp_new, and GxB_SelectOp_new. 432 * added GxB_kron, GxB_resize (GxB_Matrix_resize and GxB_Vector_resize) 433 * (2) bug fix to mask: GrB_anymethod (C, C, ... , r_desc) where r_desc.outp 434 is 'replace', and C is aliased to the Mask, was incorrect. 435 436Version 1.1.2: Dec 28, 2017 437 438 * build issues with cmake 439 * performance improvement of dot product method, C=A'*B and v=u'*A, 440 particularly when A, B and u have dense columns, or nearly dense 441 columns. 442 443Version 1.1.1: Dec 17, 2017 444 445 * (1) bug fix to GrB_assign and GxB_subassign: result was incorrect when 446 output C was the same as the input A or Mask. 447 * performance improvement in C<M>=A*B and GrB_reduce to scalar 448 * split AxB built-in semirings into Source/Generated/* for 449 faster compilation 450 * added memory usage statistics 451 452Version 1.1.0: Dec 1, 2017 453 454 * add new feature: GxB_SelectOp operator and GxB_select operation 455 * to clarify which features of SuiteSparse:GraphBLAS are extensions to 456 the spec, the names of functions and objects not in the spec have 457 changed. They are now GxB_* (GXB_ for macros). 458 * modified how the global matrix queue is accessed, for thread safety 459 in case the user application is multi-threaded 460 461Version 1.0.0: Nov 25, 2017 462 463 * transition to CMake 464 * tested on many compilers (gcc 4.9 to 7.2 on Linux, clang 8 and gcc 6.2.0 465 on the Mac, xlc 13.01 on IBM Power) 466 * changed printf formats in Demo/ to silence warnings from older compilers 467 * complex.h in gcc-6.2.0 on the Mac doesn't #define CMPLX; 468 added to usercomplex.h 469 * mergesort removed, quicksort performance improved 470 * performance improvement for masked matrix-matrix multiply 471 * bug fix for masked matrix-matrix multiply. In 0.5.0 only the Mask 472 structure was used, not the values. The spec requires the values of 473 the Mask. This is a bug but into only affects masked matrix multiply 474 when the Mask has explicit zero entries. 475 476Version 0.5.0: Nov 13, 2017 477 478 * resolved icc -O3 segfault: Intel compiler bug fixed icc version 18.0 479 * added triangle-counting demo in C (Demo/tricount.c) and MATLAB 480 (Test/tricount.m). See also Test/test69, Test/test70. and Test/test71. 481 * performance enhancements to GrB_eWiseMult, GrB_assign, GrB_subassign, 482 GrB_extract, and GrB_mxm, reducing time and memory. mxm now exploits 483 the mask during computation, to save memory and often saving time. 484 This is essential for good performance for triangle counting. 485 * reduced Test/testall.m and Tcov/testcov.m testing time from 2 hours to 486 15 minutes, maintained 100% test coverage 487 488Version 0.4.0: Oct 24, 2017 489 490 * SPEC: SuiteSparse:GraphBLAS 0.4.0 fully conforms to 1.1.0 of the spec 491 * GrB_assign functions added; all now conform to the 1.1.0 spec 492 * renamed all prior GrB_*_assign functions to GrB_*_subassign 493 494Version 0.3.0: Oct 14, 2017 495 496 * changes for spec 1.1.0 497 * performance improvement of GrB_mxm, GrB_mxv, transpose, GrB_reduce; 498 added workspace kept internally, reused for subsequent calls to 499 GraphBLAS 500 * performance improvement of bfs in Demo (v held as dense vector) 501 * performance improvement of GrB_assign when A is a scalar 502 * performance improvement of C<M>= ... mask operation 503 * GrB_Column_extract and GrB_Column_assign renamed GrB_Col_* 504 to match changes in the spec 505 * changed GrB_*_setElement and GrB_*_extractTuples to match the spec 506 * added GrB_INSUFFICIENT_SPACE error code for GrB_*_extractTuples 507 * added GrB_INVALID_HANDLE 508 * GrB_assign still does not match the spec (in progress). 509 It differs on how it treats entries outside C(I,J), and it differs 510 in the size and interpretation of the Mask. 511 512Version 0.2.0: Sept 5, 2017 513 514 * No significant change to the code; but preparing for wider release 515 * content of GrB_stddef.h moved into Include/GraphBLAS.h and file removed 516 * User Guide updated (SPEC discussion) 517 * GraphBLAS.h modified (SPEC discussions) 518 * Licensed under Apache 2.0; versions 0.1.x were limited releases 519 * removed wathen_mod.m (to see it do 'type private/wathen' in MATLAB) 520 521Version 0.1.2: Aug 30, 2017 522 523 * added (double) to fpclassify in CAST macro, to silence 524 spurious errors in gcc 525 * minor typos 526 * icc -O3 causes a segfault when compiling GB_AxB_builtin.c, so 527 Lib/GraphBLAS_config.mk now uses -O2 with icc. 528 * some versions of gcc have trouble finding libgraphblas.so.0 529 when compiling the Demo (if GraphBLAS is not installed with 530 'make install'). Instead of requiring a 'make install' 531 static linking is now used for the Demo programs. This 532 has no effect on the GraphBLAS library itself. 533 * changes for GraphBLAS spec 1.0.2 (Aug 10, 2017 version): 534 * GrB_Vector_reduce_Monoid renamed to GrB_Matrix_reduce_Monoid 535 * GrB_Vector_reduce_BinaryOp renamed to GrB_Matrix_reduce_BinaryOp 536 * GrB_Row_extract was renamed in the spec to GrB_Col_extract, but 537 this version keeps the name GrB_Column_extract since it parallels 538 the name GrB_Column_assign. 539 540Version 0.1.1: Aug 28, 2017 541 542 * minor changes to Makefiles and GraphBLAS_config.mk 543 * port to Linux with gcc 4.9.3, 5.40, and 6.3.0 544 * minor code changes to silence spurious gcc warnings; 545 (&Ax[i]) changed to (Ax +(i)). 546 * bug fix to GB_assign1.c (apply_pending_updates variable) 547 548Version 0.1.0: July 31, 2017 549 550 * first version released; only to GraphBLAS API Committee 551 552