From 538273cfd53720a10e34a3d80d3779b607e1ac26 Mon Sep 17 00:00:00 2001 From: Tim Davis Date: Tue, 18 May 2021 08:01:16 -0500 Subject: [PATCH] GraphBLAS v5.0.5 --- CHOLMOD/Tcov/Makefile | 2 +- ChangeLog | 6 ++ GraphBLAS/CMakeLists.txt | 4 +- GraphBLAS/Doc/ChangeLog | 9 ++ GraphBLAS/Doc/GraphBLAS_UserGuide.pdf | Bin 905802 -> 906308 bytes GraphBLAS/Doc/GraphBLAS_UserGuide.tex | 12 +++ GraphBLAS/Doc/GraphBLAS_version.tex | 4 +- GraphBLAS/GraphBLAS/CMakeLists.txt | 4 +- GraphBLAS/Include/GraphBLAS.h | 4 +- GraphBLAS/README.md | 2 +- GraphBLAS/Source/GB_AxB_meta.c | 95 ++++++++++++++---- GraphBLAS/Source/GB_AxB_saxpy_sparsity.c | 2 +- GraphBLAS/Tcov/log_13May2021.txt | 120 ----------------------- GraphBLAS/Tcov/log_17May2021.txt | 120 +++++++++++++++++++++++ GraphBLAS/Tcov/log_5May2021.txt | 120 ----------------------- GraphBLAS/Tcov/log_8May2021.txt | 120 ----------------------- GraphBLAS/Test/test195.m | 14 ++- LICENSE.txt | 48 ++++++--- README.md | 24 ++++- SuiteSparse_config/Makefile | 2 +- SuiteSparse_config/SuiteSparse_config.h | 4 +- SuiteSparse_config/SuiteSparse_config.mk | 7 +- metis-5.1.0/programs/CMakeLists.txt | 2 +- 23 files changed, 307 insertions(+), 418 deletions(-) delete mode 100644 GraphBLAS/Tcov/log_13May2021.txt create mode 100644 GraphBLAS/Tcov/log_17May2021.txt delete mode 100644 GraphBLAS/Tcov/log_5May2021.txt delete mode 100644 GraphBLAS/Tcov/log_8May2021.txt diff --git a/CHOLMOD/Tcov/Makefile b/CHOLMOD/Tcov/Makefile index 6f40ec6bc6..9ec539cbcc 100644 --- a/CHOLMOD/Tcov/Makefile +++ b/CHOLMOD/Tcov/Makefile @@ -1252,7 +1252,7 @@ l_super_solve.o: ../Supernodal/cholmod_super_solve.c cholmod_gpu_kernels.o: ../GPU/cholmod_gpu_kernels.c \ ../GPU/cholmod_gpu_kernels.cu $(C) -DDLONG -c $(I) $< - $(NVCC) -I../../SuiteSparse_config -Xcompiler -fPIC -O3 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35 -c ../GPU/cholmod_gpu_kernels.cu + $(NVCC) -I../../SuiteSparse_config -Xcompiler -fPIC -O3 -c ../GPU/cholmod_gpu_kernels.cu #------------------------------------------------------------------------------- diff --git a/ChangeLog b/ChangeLog index cad0dc7c60..ac46d9de05 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +May 17, 2021, SuiteSparse 5.10.1 + + * CUDA: remove sm_30 from SuiteSparse_config.mk + * GraphBLAS v5.0.5: minor bug fix + * minor changes to Makefiles + May 16, 2021, SuiteSparse 5.10.0 * GraphBLAS v5.0.4: many new features, much faster performance diff --git a/GraphBLAS/CMakeLists.txt b/GraphBLAS/CMakeLists.txt index 2e3db106df..7eb999189d 100644 --- a/GraphBLAS/CMakeLists.txt +++ b/GraphBLAS/CMakeLists.txt @@ -24,10 +24,10 @@ endif ( ) set ( CMAKE_MACOSX_RPATH TRUE ) # version of SuiteSparse:GraphBLAS -set ( GraphBLAS_DATE "May 13, 2021") +set ( GraphBLAS_DATE "May 17, 2021") set ( GraphBLAS_VERSION_MAJOR 5 ) set ( GraphBLAS_VERSION_MINOR 0 ) -set ( GraphBLAS_VERSION_SUB 4 ) +set ( GraphBLAS_VERSION_SUB 5 ) # GraphBLAS C API Specification version, at graphblas.org set ( GraphBLAS_API_DATE "Sept 25, 2019" ) diff --git a/GraphBLAS/Doc/ChangeLog b/GraphBLAS/Doc/ChangeLog index 15a798ba2a..affb0a1c57 100644 --- a/GraphBLAS/Doc/ChangeLog +++ b/GraphBLAS/Doc/ChangeLog @@ -1,3 +1,12 @@ +Version 5.0.5, May 17, 2021 + + * (26) performance bug fix: reduce-to-vector where A is hypersparse CSR + with a transposed descriptor (or CSC with no transpose), and some cases + for GrB_mxm/mxv/vxm when computing C=A*B with A hypersparse CSC and B + bitmap/full (or A bitmap/full and B hypersparse CSR), the wrong + internal method was being selected via the auto-selection strategy, + resulting in a significant slowdown in some cases. + Version 5.0.4, May 13, 2021 * @GrB MATLAB interface: changed license from Apache-2.0 diff --git a/GraphBLAS/Doc/GraphBLAS_UserGuide.pdf b/GraphBLAS/Doc/GraphBLAS_UserGuide.pdf index ab7f64f2f94e307c0c67baf0800e7364ba41ec50..e5112b20502fcd73e5a792961970693936d7baab 100644 GIT binary patch delta 36298 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 Q%9xs(%AioTPIfZ?0`KA7xBvhE delta 35758 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 diff --git a/GraphBLAS/Doc/GraphBLAS_UserGuide.tex b/GraphBLAS/Doc/GraphBLAS_UserGuide.tex index d4508d475b..e18c08aece 100644 --- a/GraphBLAS/Doc/GraphBLAS_UserGuide.tex +++ b/GraphBLAS/Doc/GraphBLAS_UserGuide.tex @@ -139,6 +139,18 @@ \subsection{Release Notes} \begin{itemize} +\item Version 5.0.5 (May 17, 2021) + + \begin{packed_itemize} + \item (26) performance bug fix: reduce-to-vector where \verb'A' is + hypersparse CSR with a transposed descriptor (or CSC with no + transpose), and some cases for \verb'GrB_mxm/mxv/vxm' when computing + \verb'C=A*B' with A hypersparse CSC and \verb'B' bitmap/full (or + \verb'A' bitmap/full and \verb'B' hypersparse CSR), the wrong internal + method was being selected via the auto-selection strategy, resulting in + a significant slowdown in some cases. + \end{packed_itemize} + \item Version 5.0.4 (May 13, 2021) \begin{packed_itemize} diff --git a/GraphBLAS/Doc/GraphBLAS_version.tex b/GraphBLAS/Doc/GraphBLAS_version.tex index 5c5b0ec260..575062b31c 100644 --- a/GraphBLAS/Doc/GraphBLAS_version.tex +++ b/GraphBLAS/Doc/GraphBLAS_version.tex @@ -1,5 +1,5 @@ % version of SuiteSparse:GraphBLAS \date{VERSION -5.0.4, -May 13, 2021} +5.0.5, +May 17, 2021} diff --git a/GraphBLAS/GraphBLAS/CMakeLists.txt b/GraphBLAS/GraphBLAS/CMakeLists.txt index 85463d5c75..f365251db2 100644 --- a/GraphBLAS/GraphBLAS/CMakeLists.txt +++ b/GraphBLAS/GraphBLAS/CMakeLists.txt @@ -29,10 +29,10 @@ endif ( ) set ( CMAKE_MACOSX_RPATH TRUE ) # version of SuiteSparse:GraphBLAS -set ( GraphBLAS_DATE "May 13, 2021") +set ( GraphBLAS_DATE "May 17, 2021") set ( GraphBLAS_VERSION_MAJOR 5 ) set ( GraphBLAS_VERSION_MINOR 0 ) -set ( GraphBLAS_VERSION_SUB 4 ) +set ( GraphBLAS_VERSION_SUB 5 ) # GraphBLAS C API Specification version, at graphblas.org set ( GraphBLAS_API_DATE "Sept 25, 2019" ) diff --git a/GraphBLAS/Include/GraphBLAS.h b/GraphBLAS/Include/GraphBLAS.h index 095adb3fc2..73293b9149 100644 --- a/GraphBLAS/Include/GraphBLAS.h +++ b/GraphBLAS/Include/GraphBLAS.h @@ -204,10 +204,10 @@ // The version of this implementation, and the GraphBLAS API version: #define GxB_IMPLEMENTATION_NAME "SuiteSparse:GraphBLAS" -#define GxB_IMPLEMENTATION_DATE "May 13, 2021" +#define GxB_IMPLEMENTATION_DATE "May 17, 2021" #define GxB_IMPLEMENTATION_MAJOR 5 #define GxB_IMPLEMENTATION_MINOR 0 -#define GxB_IMPLEMENTATION_SUB 4 +#define GxB_IMPLEMENTATION_SUB 5 #define GxB_SPEC_DATE "Sept 25, 2019" #define GxB_SPEC_MAJOR 1 #define GxB_SPEC_MINOR 3 diff --git a/GraphBLAS/README.md b/GraphBLAS/README.md index 8060e17ce9..31ad3d3989 100644 --- a/GraphBLAS/README.md +++ b/GraphBLAS/README.md @@ -4,7 +4,7 @@ SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. SPDX-License-Identifier: Apache-2.0 -VERSION 5.0.4, May 13, 2021 +VERSION 5.0.5, May 17, 2021 SuiteSparse:GraphBLAS is a complete implementation of the GraphBLAS standard, which defines a set of sparse matrix operations on an extended algebra of diff --git a/GraphBLAS/Source/GB_AxB_meta.c b/GraphBLAS/Source/GB_AxB_meta.c index 693d57b098..21032281ba 100644 --- a/GraphBLAS/Source/GB_AxB_meta.c +++ b/GraphBLAS/Source/GB_AxB_meta.c @@ -628,7 +628,7 @@ GrB_Info GB_AxB_meta // C=A*B meta algorithm { //---------------------------------------------------------------------- - // C = A*B + // select the method for C = A*B //---------------------------------------------------------------------- if (allow_scale && M == NULL @@ -636,35 +636,94 @@ GrB_Info GB_AxB_meta // C=A*B meta algorithm && GB_is_diagonal (B, Context)) { // C = A*D, column scale - GBURBLE ("C%s=A*B, colscale ", M_str) ; - GB_OK (GB_AxB_colscale (C, A, B, semiring, flipxy, Context)) ; + axb_method = GB_USE_COLSCALE ; } else if (allow_scale && M == NULL && !GB_IS_BITMAP (B) // TODO: D*B rowscale with B bitmap && GB_is_diagonal (A, Context)) { // C = D*B, row scale - GBURBLE ("C%s=A*B, rowscale ", M_str) ; - GB_OK (GB_AxB_rowscale (C, A, B, semiring, flipxy, Context)) ; + axb_method = GB_USE_ROWSCALE ; } else if (AxB_method == GxB_AxB_DOT) { // C=A*B via dot product, or C_in+=A*B if in-place. - // only use the dot product method if explicitly requested - GBURBLE ("C%s=A*B', dot_product (transposed %s) ", M_str, A_str) ; - GB_OK (GB_transpose (&AT, atype_required, true, A, // AT static - NULL, NULL, NULL, false, Context)) ; - GB_OK (GB_AxB_dot (C, (can_do_in_place) ? C_in : NULL, - M, Mask_comp, Mask_struct, AT, B, semiring, flipxy, - mask_applied, done_in_place, Context)) ; + axb_method = GB_USE_DOT ; } - else + else if (AxB_method == GxB_AxB_SAXPY + || AxB_method == GxB_AxB_HASH + || AxB_method == GxB_AxB_GUSTAVSON) { - // C = A*B via saxpy: Gustavson + Hash method - GBURBLE ("C%s=A*B, saxpy ", M_str) ; - GB_OK (GB_AxB_saxpy (C, M, Mask_comp, Mask_struct, - A, B, semiring, flipxy, mask_applied, AxB_method, do_sort, - Context)) ; + // C=A*B via saxpy + axb_method = GB_USE_SAXPY ; + } + else + { + // C = A*B: auto selection: select saxpy or dot + if (GB_IS_HYPERSPARSE (A) && (GB_IS_BITMAP (B) || GB_IS_FULL (B))) + { + // If A is hyper and B is bitmap/full, then saxpy will compute + // C as sparse or bitmap. If bitmap, use saxpy; if sparse, use + // dot product instead. + int ignore, saxpy_method ; + GB_AxB_saxpy_sparsity (&ignore, &saxpy_method, M, Mask_comp, + A, B, Context) ; + if (saxpy_method == GB_SAXPY_METHOD_BITMAP) + { + // bitmap = hyper * (bitmap or full) is very efficient + // to do via GB_bitmap_AxB_saxpy. + axb_method = GB_USE_SAXPY ; + } + else + { + // sparse = hyper * (bitmap or full) would use + // GB_AxB_saxpy3, which can be slow, so use dot instead. + axb_method = GB_USE_DOT ; + } + } + else + { + // otherwise, always use GB_AxB_saxpy + axb_method = GB_USE_SAXPY ; + } + } + + //---------------------------------------------------------------------- + // C = A*B + //---------------------------------------------------------------------- + + switch (axb_method) + { + case GB_USE_COLSCALE : + // C = A*D, column scale + GBURBLE ("C%s=A*B, colscale ", M_str) ; + GB_OK (GB_AxB_colscale (C, A, B, semiring, flipxy, Context)) ; + break ; + + case GB_USE_ROWSCALE : + // C = D*B, row scale + GBURBLE ("C%s=A*B, rowscale ", M_str) ; + GB_OK (GB_AxB_rowscale (C, A, B, semiring, flipxy, Context)) ; + break ; + + case GB_USE_DOT : + // C=A*B via dot product, or C_in+=A*B if in-place. + GBURBLE ("C%s=A*B', dot_product (transposed %s) ", + M_str, A_str) ; + GB_OK (GB_transpose (&AT, atype_required, true, A, // AT static + NULL, NULL, NULL, false, Context)) ; + GB_OK (GB_AxB_dot (C, (can_do_in_place) ? C_in : NULL, + M, Mask_comp, Mask_struct, AT, B, semiring, flipxy, + mask_applied, done_in_place, Context)) ; + break ; + + default : + // C = A*B via saxpy: Gustavson + Hash method + GBURBLE ("C%s=A*B, saxpy ", M_str) ; + GB_OK (GB_AxB_saxpy (C, M, Mask_comp, Mask_struct, + A, B, semiring, flipxy, mask_applied, AxB_method, do_sort, + Context)) ; + break ; } } diff --git a/GraphBLAS/Source/GB_AxB_saxpy_sparsity.c b/GraphBLAS/Source/GB_AxB_saxpy_sparsity.c index 31f093a0ab..23a2b82a44 100644 --- a/GraphBLAS/Source/GB_AxB_saxpy_sparsity.c +++ b/GraphBLAS/Source/GB_AxB_saxpy_sparsity.c @@ -208,7 +208,7 @@ void GB_AxB_saxpy_sparsity // determine C_sparsity and method to use case GxB_SPARSE : // S = {S,H} * {B,F} : if A is very sparse // B = {S,H} * {B,F} : otherwise C is bitmap - (*C_sparsity) = (anz < m) ? GxB_SPARSE : GxB_BITMAP ; + (*C_sparsity) = (anz < m/20) ? GxB_SPARSE : GxB_BITMAP ; break ; case GxB_BITMAP : case GxB_FULL : diff --git a/GraphBLAS/Tcov/log_13May2021.txt b/GraphBLAS/Tcov/log_13May2021.txt deleted file mode 100644 index 4d64f3cd0c..0000000000 --- a/GraphBLAS/Tcov/log_13May2021.txt +++ /dev/null @@ -1,120 +0,0 @@ - ----------------------------------------------- [malloc] [cover] -13-May 18:54:44 test192 3.8 sec 311: 311 of 17360 1.8% 81.33/sec -13-May 18:54:49 test191 5.0 sec 188: 499 of 17360 2.9% 37.89/sec -13-May 18:55:11 test188 22.5 sec 402: 901 of 17360 5.2% 17.88/sec -13-May 18:55:18 test187 6.5 sec 70: 971 of 17360 5.6% 10.78/sec -13-May 18:55:19 test186 0.6 sec 158: 1129 of 17360 6.5% 268.98/sec -13-May 18:55:19 test186 0.4 sec 24: 1153 of 17360 6.6% 57.10/sec -13-May 18:56:21 test185 62.2 sec 177: 1330 of 17360 7.7% 2.85/sec -13-May 18:56:25 test184 3.6 sec 69: 1399 of 17360 8.1% 19.40/sec -13-May 18:56:38 test181 13.8 sec 244: 1643 of 17360 9.5% 17.66/sec -13-May 18:56:44 test180 5.2 sec 204: 1847 of 17360 10.6% 39.07/sec -13-May 18:56:58 test180 14.4 sec 34: 1881 of 17360 10.8% 2.37/sec -13-May 18:56:58 test150 0.1 sec 46: 1927 of 17360 11.1% 364.74/sec -13-May 18:57:08 test14 9.4 sec 725: 2652 of 17360 15.3% 77.42/sec -13-May 18:58:38 test154 90.7 sec 2048: 4700 of 17360 27.1% 22.57/sec -13-May 18:58:53 test151b 14.9 sec 187: 4887 of 17360 28.2% 12.55/sec -13-May 18:59:34 test195 40.7 sec 93: 4980 of 17360 28.7% 2.29/sec -13-May 19:00:28 test194 53.9 sec 162: 5142 of 17360 29.6% 3.01/sec -13-May 19:00:41 test193 13.6 sec 9: 5151 of 17360 29.7% 0.66/sec -13-May 19:00:41 test190 0.0 sec 0: 5151 of 17360 29.7% 0.00/sec -13-May 19:00:50 test189 9.0 sec 11: 5162 of 17360 29.7% 1.22/sec -13-May 19:00:50 test183 0.0 sec 7: 5169 of 17360 29.8% 210.70/sec -13-May 19:00:51 test182 0.5 sec 23: 5192 of 17360 29.9% 43.51/sec -13-May 19:00:51 test179 0.1 sec 71: 5263 of 17360 30.3% 909.81/sec -13-May 19:00:51 test165 0.0 sec 3: 5266 of 17360 30.3% 641.99/sec -13-May 19:00:51 test01 0.3 sec 686: 5952 of 17360 34.3% 2107.09/sec -13-May 19:00:52 test01 0.1 sec 3: 5955 of 17360 34.3% 22.58/sec -13-May 19:00:52 test07b 0.0 sec 8: 5963 of 17360 34.3% 2020.20/sec -13-May 19:00:52 test83 0.0 sec 1: 5964 of 17360 34.4% 545.26/sec -13-May 19:00:52 test176 0.1 sec 7: 5971 of 17360 34.4% 61.49/sec -13-May 19:00:52 test174 0.0 sec 11: 5982 of 17360 34.5% 442.09/sec -13-May 19:00:52 test170 0.0 sec 1: 5983 of 17360 34.5% 23.33/sec -13-May 19:00:52 test169 0.0 sec 2: 5985 of 17360 34.5% 290.82/sec -13-May 19:00:52 test166 0.1 sec 51: 6036 of 17360 34.8% 653.69/sec -13-May 19:00:52 test164 0.0 sec 6: 6042 of 17360 34.8% 245.68/sec -13-May 19:00:52 test152 0.4 sec 424: 6466 of 17360 37.2% 942.60/sec -13-May 19:00:52 test155 0.1 sec 12: 6478 of 17360 37.3% 139.28/sec -13-May 19:00:53 test156 0.5 sec 2: 6480 of 17360 37.3% 3.68/sec -13-May 19:00:53 test136 0.0 sec 21: 6501 of 17360 37.4% 476.46/sec -13-May 19:00:53 test02 0.2 sec 151: 6652 of 17360 38.3% 669.30/sec -13-May 19:00:53 test109 0.1 sec 2: 6654 of 17360 38.3% 36.18/sec -13-May 19:00:53 test109 0.0 sec 3: 6657 of 17360 38.3% 1377.41/sec -13-May 19:00:53 test110 0.1 sec 5: 6662 of 17360 38.4% 71.58/sec -13-May 19:00:53 test04 0.0 sec 9: 6671 of 17360 38.4% 393.27/sec -13-May 19:01:00 test142 6.3 sec 737: 7408 of 17360 42.7% 116.35/sec -13-May 19:01:00 test162 0.1 sec 2: 7410 of 17360 42.7% 28.99/sec -13-May 19:01:00 test161 0.1 sec 2: 7412 of 17360 42.7% 25.26/sec -13-May 19:01:01 test159 0.9 sec 106: 7518 of 17360 43.3% 123.48/sec -13-May 19:01:01 test137 0.1 sec 9: 7527 of 17360 43.4% 86.88/sec -13-May 19:01:01 test139 0.3 sec 2: 7529 of 17360 43.4% 7.17/sec -13-May 19:01:01 test09 0.0 sec 1: 7530 of 17360 43.4% 183.79/sec -13-May 19:01:01 test132 0.1 sec 5: 7535 of 17360 43.4% 90.23/sec -13-May 19:01:01 test167 0.2 sec 13: 7548 of 17360 43.5% 79.60/sec -13-May 19:01:02 test177 1.0 sec 3: 7551 of 17360 43.5% 3.10/sec -13-May 19:01:03 test94 0.1 sec 10: 7561 of 17360 43.6% 68.32/sec -13-May 19:01:03 test94 0.1 sec 2: 7563 of 17360 43.6% 20.67/sec -13-May 19:01:06 test141 3.1 sec 441: 8004 of 17360 46.1% 144.39/sec -13-May 19:01:06 test144 0.5 sec 1: 8005 of 17360 46.1% 1.98/sec -13-May 19:01:06 test145 0.1 sec 5: 8010 of 17360 46.1% 46.71/sec -13-May 19:01:06 test92 0.0 sec 4: 8014 of 17360 46.2% 85.02/sec -13-May 19:01:07 test108 0.2 sec 2: 8016 of 17360 46.2% 8.10/sec -13-May 19:01:07 test172 0.1 sec 3: 8019 of 17360 46.2% 42.47/sec -13-May 19:01:07 test26 0.4 sec 34: 8053 of 17360 46.4% 89.15/sec -13-May 19:01:07 test148 0.3 sec 8: 8061 of 17360 46.4% 30.30/sec -13-May 19:01:08 testc2(1) 0.2 sec 10: 8071 of 17360 46.5% 47.13/sec -13-May 19:01:08 test163 0.1 sec 2: 8073 of 17360 46.5% 15.71/sec -13-May 19:01:08 test146 0.0 sec 1: 8074 of 17360 46.5% 20.14/sec -13-May 19:01:09 test173 1.1 sec 14: 8088 of 17360 46.6% 12.89/sec -13-May 19:01:10 test157 0.8 sec 14: 8102 of 17360 46.7% 17.47/sec -13-May 19:01:14 test29 4.2 sec 1: 8103 of 17360 46.7% 0.24/sec -13-May 19:02:38 test74 84.4 sec 4121: 12224 of 17360 70.4% 48.82/sec -13-May 19:02:38 test03 0.1 sec 3: 12227 of 17360 70.4% 21.60/sec -13-May 19:02:39 test03 0.1 sec 2: 12229 of 17360 70.4% 18.40/sec -13-May 19:02:39 test128 0.2 sec 15: 12244 of 17360 70.5% 78.74/sec -13-May 19:03:03 test125 24.1 sec 660: 12904 of 17360 74.3% 27.41/sec -13-May 19:03:03 test131 0.0 sec 1: 12905 of 17360 74.3% 21.45/sec -13-May 19:03:03 test82 0.1 sec 6: 12911 of 17360 74.4% 60.53/sec -13-May 19:03:11 test158 8.1 sec 17: 12928 of 17360 74.5% 2.10/sec -13-May 19:03:13 test84 1.7 sec 22: 12950 of 17360 74.6% 13.33/sec -13-May 19:03:14 test130 1.0 sec 20: 12970 of 17360 74.7% 19.35/sec -13-May 19:03:22 test19b 7.7 sec 50: 13020 of 17360 75.0% 6.47/sec -13-May 19:03:25 test19b 3.7 sec 5: 13025 of 17360 75.0% 1.34/sec -13-May 19:03:25 test101 0.2 sec 1: 13026 of 17360 75.0% 6.24/sec -13-May 19:03:26 test133 0.4 sec 6: 13032 of 17360 75.1% 13.71/sec -13-May 19:03:26 test72 0.1 sec 1: 13033 of 17360 75.1% 6.91/sec -13-May 19:03:30 test80 3.8 sec 2: 13035 of 17360 75.1% 0.53/sec -13-May 19:03:43 test151 13.3 sec 74: 13109 of 17360 75.5% 5.58/sec -13-May 19:03:43 test124 0.3 sec 3: 13112 of 17360 75.5% 11.34/sec -13-May 19:03:56 test23 12.9 sec 88: 13200 of 17360 76.0% 6.80/sec -13-May 19:04:04 test175 8.1 sec 1: 13201 of 17360 76.0% 0.12/sec -13-May 19:04:28 test160 23.8 sec 10: 13211 of 17360 76.1% 0.42/sec -13-May 19:04:52 test160 23.6 sec 1: 13212 of 17360 76.1% 0.04/sec -13-May 19:06:22 test134 90.5 sec 414: 13626 of 17360 78.5% 4.57/sec -13-May 19:06:25 test00 3.1 sec 8: 13634 of 17360 78.5% 2.60/sec -13-May 19:06:35 test54 9.4 sec 20: 13654 of 17360 78.7% 2.12/sec -13-May 19:06:38 test104 3.5 sec 29: 13683 of 17360 78.8% 8.37/sec -13-May 19:06:41 test11 2.9 sec 4: 13687 of 17360 78.8% 1.40/sec -13-May 19:06:42 test28 0.4 sec 0: 13687 of 17360 78.8% 0.00/sec -13-May 19:06:43 test129 1.0 sec 1: 13688 of 17360 78.8% 0.96/sec -13-May 19:06:43 test138 0.1 sec 1: 13689 of 17360 78.9% 11.42/sec -13-May 19:10:55 test127 251.8 sec 1673: 15362 of 17360 88.5% 6.64/sec -13-May 19:11:03 test76 8.9 sec 14: 15376 of 17360 88.6% 1.57/sec -13-May 19:11:05 test107 1.3 sec 6: 15382 of 17360 88.6% 4.70/sec -13-May 19:11:10 test69 5.3 sec 3: 15385 of 17360 88.6% 0.56/sec -13-May 19:11:12 test135 1.4 sec 1: 15386 of 17360 88.6% 0.70/sec -13-May 19:11:37 test17 25.8 sec 4: 15390 of 17360 88.7% 0.15/sec -13-May 19:11:50 test143 12.3 sec 1: 15391 of 17360 88.7% 0.08/sec -13-May 19:12:03 test27 13.5 sec 2: 15393 of 17360 88.7% 0.15/sec -13-May 19:12:30 test53 27.2 sec 2: 15395 of 17360 88.7% 0.07/sec -13-May 19:21:34 test77 543.7 sec 34: 15429 of 17360 88.9% 0.06/sec -13-May 19:24:20 test19 165.8 sec 11: 15440 of 17360 88.9% 0.07/sec -[malloc debugging turned off] -13-May 19:34:45 test10 625.6 sec 786: 16226 of 17360 93.5% 1.26/sec -13-May 19:41:29 test75b 403.2 sec 1086: 17312 of 17360 99.7% 2.69/sec -13-May 19:44:05 test16 156.5 sec 12: 17324 of 17360 99.8% 0.08/sec -13-May 19:45:34 test81 89.2 sec 6: 17330 of 17360 99.8% 0.07/sec -13-May 19:47:06 test21b 91.4 sec 18: 17348 of 17360 99.9% 0.20/sec -13-May 19:52:42 test18 336.1 sec 12: all 17360 full 100% 0.04/sec -[malloc debugging turned back on] diff --git a/GraphBLAS/Tcov/log_17May2021.txt b/GraphBLAS/Tcov/log_17May2021.txt new file mode 100644 index 0000000000..21881bcba4 --- /dev/null +++ b/GraphBLAS/Tcov/log_17May2021.txt @@ -0,0 +1,120 @@ + +---------------------------------------------- [malloc] [cover] +17-May 18:03:49 test192 4.7 sec 311: 311 of 17367 1.8% 65.65/sec +17-May 18:03:53 test191 4.8 sec 188: 499 of 17367 2.9% 39.38/sec +17-May 18:04:15 test188 22.1 sec 402: 901 of 17367 5.2% 18.22/sec +17-May 18:04:22 test187 6.6 sec 70: 971 of 17367 5.6% 10.64/sec +17-May 18:04:23 test186 0.8 sec 160: 1131 of 17367 6.5% 202.38/sec +17-May 18:04:23 test186 0.4 sec 24: 1155 of 17367 6.7% 56.35/sec +17-May 18:05:26 test185 62.5 sec 173: 1328 of 17367 7.6% 2.77/sec +17-May 18:05:29 test184 3.4 sec 69: 1397 of 17367 8.0% 20.09/sec +17-May 18:05:43 test181 14.0 sec 244: 1641 of 17367 9.4% 17.38/sec +17-May 18:05:49 test180 5.3 sec 204: 1845 of 17367 10.6% 38.42/sec +17-May 18:06:03 test180 14.6 sec 34: 1879 of 17367 10.8% 2.33/sec +17-May 18:06:03 test150 0.1 sec 48: 1927 of 17367 11.1% 410.10/sec +17-May 18:06:13 test14 9.6 sec 724: 2651 of 17367 15.3% 75.60/sec +17-May 18:07:42 test154 89.6 sec 2048: 4699 of 17367 27.1% 22.85/sec +17-May 18:07:58 test151b 15.6 sec 187: 4886 of 17367 28.1% 11.96/sec +17-May 18:09:56 test195 117.7 sec 92: 4978 of 17367 28.7% 0.78/sec +17-May 18:14:17 test194 261.0 sec 162: 5140 of 17367 29.6% 0.62/sec +17-May 18:16:47 test193 150.5 sec 9: 5149 of 17367 29.6% 0.06/sec +17-May 18:16:47 test190 0.0 sec 0: 5149 of 17367 29.6% 0.00/sec +17-May 18:17:08 test189 21.0 sec 11: 5160 of 17367 29.7% 0.52/sec +17-May 18:17:09 test183 0.1 sec 7: 5167 of 17367 29.8% 66.75/sec +17-May 18:17:11 test182 2.0 sec 20: 5187 of 17367 29.9% 9.80/sec +17-May 18:17:11 test179 0.7 sec 71: 5258 of 17367 30.3% 105.50/sec +17-May 18:17:11 test165 0.0 sec 5: 5263 of 17367 30.3% 301.62/sec +17-May 18:17:14 test01 2.2 sec 686: 5949 of 17367 34.3% 308.71/sec +17-May 18:17:14 test01 0.6 sec 3: 5952 of 17367 34.3% 4.64/sec +17-May 18:17:14 test07b 0.0 sec 8: 5960 of 17367 34.3% 189.87/sec +17-May 18:17:14 test83 0.0 sec 1: 5961 of 17367 34.3% 67.68/sec +17-May 18:17:19 test176 4.4 sec 7: 5968 of 17367 34.4% 1.57/sec +17-May 18:17:19 test174 0.1 sec 11: 5979 of 17367 34.4% 73.83/sec +17-May 18:17:19 test170 0.3 sec 1: 5980 of 17367 34.4% 2.89/sec +17-May 18:17:19 test169 0.0 sec 2: 5982 of 17367 34.4% 41.08/sec +17-May 18:17:20 test166 0.6 sec 51: 6033 of 17367 34.7% 88.35/sec +17-May 18:17:20 test164 0.1 sec 6: 6039 of 17367 34.8% 61.80/sec +17-May 18:17:22 test152 2.4 sec 424: 6463 of 17367 37.2% 178.95/sec +17-May 18:17:23 test155 0.9 sec 12: 6475 of 17367 37.3% 13.80/sec +17-May 18:17:27 test156 3.3 sec 2: 6477 of 17367 37.3% 0.61/sec +17-May 18:17:27 test136 0.1 sec 21: 6498 of 17367 37.4% 170.25/sec +17-May 18:17:30 test02 3.8 sec 151: 6649 of 17367 38.3% 40.04/sec +17-May 18:17:31 test109 0.4 sec 2: 6651 of 17367 38.3% 5.31/sec +17-May 18:17:31 test109 0.0 sec 3: 6654 of 17367 38.3% 247.38/sec +17-May 18:17:31 test110 0.5 sec 6: 6660 of 17367 38.3% 11.58/sec +17-May 18:17:32 test04 0.2 sec 9: 6669 of 17367 38.4% 45.57/sec +17-May 18:18:06 test142 34.0 sec 737: 7406 of 17367 42.6% 21.69/sec +17-May 18:18:06 test162 0.2 sec 1: 7407 of 17367 42.6% 4.47/sec +17-May 18:18:06 test161 0.4 sec 1: 7408 of 17367 42.7% 2.71/sec +17-May 18:18:15 test159 8.6 sec 106: 7514 of 17367 43.3% 12.39/sec +17-May 18:18:15 test137 0.7 sec 9: 7523 of 17367 43.3% 13.57/sec +17-May 18:18:17 test139 1.2 sec 2: 7525 of 17367 43.3% 1.67/sec +17-May 18:18:17 test09 0.1 sec 1: 7526 of 17367 43.3% 10.81/sec +17-May 18:18:17 test132 0.4 sec 5: 7531 of 17367 43.4% 11.29/sec +17-May 18:18:18 test167 1.0 sec 13: 7544 of 17367 43.4% 13.10/sec +17-May 18:18:22 test177 3.7 sec 3: 7547 of 17367 43.5% 0.81/sec +17-May 18:18:23 test94 0.8 sec 11: 7558 of 17367 43.5% 13.12/sec +17-May 18:18:23 test94 0.3 sec 2: 7560 of 17367 43.5% 6.09/sec +17-May 18:18:44 test141 20.3 sec 441: 8001 of 17367 46.1% 21.69/sec +17-May 18:18:45 test144 1.5 sec 1: 8002 of 17367 46.1% 0.68/sec +17-May 18:18:46 test145 0.8 sec 5: 8007 of 17367 46.1% 6.18/sec +17-May 18:18:46 test92 0.4 sec 4: 8011 of 17367 46.1% 10.86/sec +17-May 18:18:48 test108 1.6 sec 2: 8013 of 17367 46.1% 1.29/sec +17-May 18:18:48 test172 0.2 sec 3: 8016 of 17367 46.2% 15.11/sec +17-May 18:18:51 test26 2.4 sec 34: 8050 of 17367 46.4% 14.09/sec +17-May 18:18:53 test148 2.1 sec 8: 8058 of 17367 46.4% 3.80/sec +17-May 18:18:55 testc2(1) 2.5 sec 10: 8068 of 17367 46.5% 4.06/sec +17-May 18:18:55 test163 0.3 sec 2: 8070 of 17367 46.5% 6.04/sec +17-May 18:18:56 test146 0.3 sec 1: 8071 of 17367 46.5% 2.94/sec +17-May 18:19:13 test173 17.0 sec 14: 8085 of 17367 46.6% 0.82/sec +17-May 18:19:18 test157 4.9 sec 14: 8099 of 17367 46.6% 2.86/sec +17-May 18:20:00 test29 42.1 sec 1: 8100 of 17367 46.6% 0.02/sec +17-May 18:30:32 test74 632.1 sec 4122: 12222 of 17367 70.4% 6.52/sec +17-May 18:30:33 test03 1.2 sec 3: 12225 of 17367 70.4% 2.47/sec +17-May 18:30:34 test03 0.5 sec 2: 12227 of 17367 70.4% 4.26/sec +17-May 18:30:35 test128 1.5 sec 15: 12242 of 17367 70.5% 10.18/sec +17-May 18:32:01 test125 86.2 sec 661: 12903 of 17367 74.3% 7.67/sec +17-May 18:32:02 test131 0.3 sec 1: 12904 of 17367 74.3% 3.39/sec +17-May 18:32:03 test82 1.3 sec 6: 12910 of 17367 74.3% 4.57/sec +17-May 18:32:38 test158 35.3 sec 17: 12927 of 17367 74.4% 0.48/sec +17-May 18:33:17 test84 39.0 sec 22: 12949 of 17367 74.6% 0.56/sec +17-May 18:33:46 test130 29.0 sec 20: 12969 of 17367 74.7% 0.69/sec +17-May 18:37:03 test19b 197.2 sec 51: 13020 of 17367 75.0% 0.26/sec +17-May 18:37:16 test19b 13.0 sec 5: 13025 of 17367 75.0% 0.38/sec +17-May 18:37:21 test101 4.4 sec 1: 13026 of 17367 75.0% 0.23/sec +17-May 18:37:22 test133 1.6 sec 6: 13032 of 17367 75.0% 3.78/sec +17-May 18:37:23 test72 0.5 sec 3: 13035 of 17367 75.1% 5.96/sec +17-May 18:37:37 test80 13.8 sec 2: 13037 of 17367 75.1% 0.14/sec +17-May 18:39:13 test151 95.9 sec 74: 13111 of 17367 75.5% 0.77/sec +17-May 18:39:13 test124 0.7 sec 3: 13114 of 17367 75.5% 4.37/sec +17-May 18:40:22 test23 68.9 sec 88: 13202 of 17367 76.0% 1.28/sec +17-May 18:41:22 test175 60.1 sec 1: 13203 of 17367 76.0% 0.02/sec +17-May 18:42:41 test160 79.0 sec 16: 13219 of 17367 76.1% 0.20/sec +17-May 18:43:05 test160 23.2 sec 1: 13220 of 17367 76.1% 0.04/sec +17-May 18:44:34 test134 89.5 sec 414: 13634 of 17367 78.5% 4.63/sec +17-May 18:44:37 test00 3.1 sec 8: 13642 of 17367 78.6% 2.60/sec +17-May 18:44:47 test54 9.3 sec 20: 13662 of 17367 78.7% 2.14/sec +17-May 18:44:50 test104 3.4 sec 29: 13691 of 17367 78.8% 8.42/sec +17-May 18:44:53 test11 2.7 sec 4: 13695 of 17367 78.9% 1.47/sec +17-May 18:44:53 test28 0.4 sec 0: 13695 of 17367 78.9% 0.00/sec +17-May 18:44:54 test129 1.0 sec 1: 13696 of 17367 78.9% 1.01/sec +17-May 18:44:54 test138 0.1 sec 1: 13697 of 17367 78.9% 15.06/sec +17-May 18:49:02 test127 247.6 sec 1673: 15370 of 17367 88.5% 6.76/sec +17-May 18:49:10 test76 8.5 sec 14: 15384 of 17367 88.6% 1.65/sec +17-May 18:49:12 test107 1.4 sec 6: 15390 of 17367 88.6% 4.29/sec +17-May 18:49:17 test69 4.9 sec 3: 15393 of 17367 88.6% 0.62/sec +17-May 18:49:18 test135 1.4 sec 1: 15394 of 17367 88.6% 0.71/sec +17-May 18:49:41 test17 23.4 sec 4: 15398 of 17367 88.7% 0.17/sec +17-May 18:49:54 test143 12.3 sec 0: 15398 of 17367 88.7% 0.00/sec +17-May 18:50:06 test27 12.0 sec 2: 15400 of 17367 88.7% 0.17/sec +17-May 18:50:30 test53 24.4 sec 2: 15402 of 17367 88.7% 0.08/sec +17-May 18:58:34 test77 483.7 sec 34: 15436 of 17367 88.9% 0.07/sec +17-May 19:01:05 test19 151.4 sec 11: 15447 of 17367 88.9% 0.07/sec +[malloc debugging turned off] +17-May 19:10:45 test10 579.6 sec 786: 16233 of 17367 93.5% 1.36/sec +17-May 19:17:26 test75b 401.2 sec 1086: 17319 of 17367 99.7% 2.71/sec +17-May 19:19:45 test16 139.3 sec 12: 17331 of 17367 99.8% 0.09/sec +17-May 19:21:01 test81 75.7 sec 6: 17337 of 17367 99.8% 0.08/sec +17-May 19:22:11 test21b 69.8 sec 18: 17355 of 17367 99.9% 0.26/sec +17-May 19:26:13 test18 242.2 sec 12: all 17367 full 100% 0.05/sec +[malloc debugging turned back on] diff --git a/GraphBLAS/Tcov/log_5May2021.txt b/GraphBLAS/Tcov/log_5May2021.txt deleted file mode 100644 index ccebfe01e9..0000000000 --- a/GraphBLAS/Tcov/log_5May2021.txt +++ /dev/null @@ -1,120 +0,0 @@ - ----------------------------------------------- [malloc] [cover] -05-May 09:41:22 test192 19.1 sec 311: 311 of 17266 1.8% 16.29/sec -05-May 09:41:38 test191 16.4 sec 188: 499 of 17266 2.9% 11.48/sec -05-May 09:42:54 test188 75.7 sec 402: 901 of 17266 5.2% 5.31/sec -05-May 09:43:20 test187 25.7 sec 70: 971 of 17266 5.6% 2.72/sec -05-May 09:43:22 test186 2.2 sec 157: 1128 of 17266 6.5% 70.75/sec -05-May 09:43:23 test186 1.2 sec 24: 1152 of 17266 6.7% 20.22/sec -05-May 09:46:57 test185 213.5 sec 177: 1329 of 17266 7.7% 0.83/sec -05-May 09:47:06 test184 9.1 sec 69: 1398 of 17266 8.1% 7.56/sec -05-May 09:48:06 test181 60.1 sec 244: 1642 of 17266 9.5% 4.06/sec -05-May 09:48:28 test180 22.2 sec 204: 1846 of 17266 10.7% 9.19/sec -05-May 09:49:12 test180 43.3 sec 34: 1880 of 17266 10.9% 0.79/sec -05-May 09:49:12 test150 0.4 sec 46: 1926 of 17266 11.2% 126.04/sec -05-May 09:49:45 test14 32.8 sec 647: 2573 of 17266 14.9% 19.75/sec -05-May 09:55:27 test154 342.2 sec 2048: 4621 of 17266 26.8% 5.98/sec -05-May 09:56:22 test151b 54.5 sec 187: 4808 of 17266 27.8% 3.43/sec -05-May 09:58:47 test195 145.4 sec 93: 4901 of 17266 28.4% 0.64/sec -05-May 10:02:18 test194 211.2 sec 162: 5063 of 17266 29.3% 0.77/sec -05-May 10:03:09 test193 50.4 sec 9: 5072 of 17266 29.4% 0.18/sec -05-May 10:03:09 test190 0.0 sec 0: 5072 of 17266 29.4% 0.00/sec -05-May 10:03:29 test189 20.1 sec 11: 5083 of 17266 29.4% 0.55/sec -05-May 10:03:29 test183 0.1 sec 7: 5090 of 17266 29.5% 90.65/sec -05-May 10:03:31 test182 1.7 sec 23: 5113 of 17266 29.6% 13.90/sec -05-May 10:03:31 test179 0.6 sec 71: 5184 of 17266 30.0% 121.25/sec -05-May 10:03:31 test165 0.0 sec 3: 5187 of 17266 30.0% 175.00/sec -05-May 10:03:33 test01 1.7 sec 683: 5870 of 17266 34.0% 400.67/sec -05-May 10:03:33 test01 0.3 sec 3: 5873 of 17266 34.0% 10.50/sec -05-May 10:03:33 test07b 0.0 sec 8: 5881 of 17266 34.1% 280.20/sec -05-May 10:03:33 test83 0.0 sec 1: 5882 of 17266 34.1% 66.72/sec -05-May 10:03:34 test176 0.6 sec 7: 5889 of 17266 34.1% 12.58/sec -05-May 10:03:34 test174 0.1 sec 11: 5900 of 17266 34.2% 84.22/sec -05-May 10:03:34 test170 0.4 sec 1: 5901 of 17266 34.2% 2.49/sec -05-May 10:03:34 test169 0.1 sec 2: 5903 of 17266 34.2% 38.89/sec -05-May 10:03:35 test166 0.6 sec 51: 5954 of 17266 34.5% 80.58/sec -05-May 10:03:35 test164 0.1 sec 6: 5960 of 17266 34.5% 61.48/sec -05-May 10:03:38 test152 2.6 sec 424: 6384 of 17266 37.0% 160.09/sec -05-May 10:03:38 test155 0.6 sec 12: 6396 of 17266 37.0% 20.71/sec -05-May 10:03:41 test156 2.4 sec 2: 6398 of 17266 37.1% 0.83/sec -05-May 10:03:41 test136 0.2 sec 21: 6419 of 17266 37.2% 128.29/sec -05-May 10:03:42 test02 1.1 sec 151: 6570 of 17266 38.1% 140.90/sec -05-May 10:03:43 test109 0.4 sec 2: 6572 of 17266 38.1% 5.14/sec -05-May 10:03:43 test109 0.0 sec 3: 6575 of 17266 38.1% 249.42/sec -05-May 10:03:43 test110 0.5 sec 5: 6580 of 17266 38.1% 10.75/sec -05-May 10:03:43 test04 0.1 sec 9: 6589 of 17266 38.2% 82.90/sec -05-May 10:04:05 test142 21.9 sec 737: 7326 of 17266 42.4% 33.62/sec -05-May 10:04:05 test162 0.2 sec 2: 7328 of 17266 42.4% 10.25/sec -05-May 10:04:06 test161 0.5 sec 2: 7330 of 17266 42.5% 4.19/sec -05-May 10:04:10 test159 3.9 sec 106: 7436 of 17266 43.1% 27.32/sec -05-May 10:04:11 test137 0.8 sec 9: 7445 of 17266 43.1% 11.56/sec -05-May 10:04:12 test139 1.3 sec 2: 7447 of 17266 43.1% 1.60/sec -05-May 10:04:12 test09 0.0 sec 1: 7448 of 17266 43.1% 30.81/sec -05-May 10:04:12 test132 0.4 sec 5: 7453 of 17266 43.2% 12.21/sec -05-May 10:04:13 test167 0.4 sec 13: 7466 of 17266 43.2% 31.32/sec -05-May 10:04:16 test177 3.3 sec 3: 7469 of 17266 43.3% 0.91/sec -05-May 10:04:17 test94 0.7 sec 10: 7479 of 17266 43.3% 13.51/sec -05-May 10:04:17 test94 0.3 sec 2: 7481 of 17266 43.3% 6.06/sec -05-May 10:04:29 test141 12.4 sec 441: 7922 of 17266 45.9% 35.65/sec -05-May 10:04:31 test144 2.0 sec 1: 7923 of 17266 45.9% 0.50/sec -05-May 10:04:32 test145 0.7 sec 5: 7928 of 17266 45.9% 6.94/sec -05-May 10:04:33 test92 0.4 sec 4: 7932 of 17266 45.9% 9.61/sec -05-May 10:04:34 test108 1.1 sec 2: 7934 of 17266 46.0% 1.79/sec -05-May 10:04:34 test172 0.3 sec 3: 7937 of 17266 46.0% 9.99/sec -05-May 10:04:37 test26 2.6 sec 34: 7971 of 17266 46.2% 13.26/sec -05-May 10:04:39 test148 2.2 sec 8: 7979 of 17266 46.2% 3.63/sec -05-May 10:04:41 testc2(1) 1.7 sec 10: 7989 of 17266 46.3% 5.84/sec -05-May 10:04:41 test163 0.3 sec 2: 7991 of 17266 46.3% 6.30/sec -05-May 10:04:41 test146 0.3 sec 1: 7992 of 17266 46.3% 2.89/sec -05-May 10:04:45 test173 3.9 sec 14: 8006 of 17266 46.4% 3.55/sec -05-May 10:04:49 test157 3.2 sec 14: 8020 of 17266 46.4% 4.33/sec -05-May 10:05:06 test29 18.0 sec 1: 8021 of 17266 46.5% 0.06/sec -05-May 10:10:22 test74 315.4 sec 4109: 12130 of 17266 70.3% 13.03/sec -05-May 10:10:22 test03 0.4 sec 3: 12133 of 17266 70.3% 6.72/sec -05-May 10:10:23 test03 0.7 sec 2: 12135 of 17266 70.3% 3.06/sec -05-May 10:10:24 test128 1.0 sec 15: 12150 of 17266 70.4% 15.55/sec -05-May 10:12:03 test125 99.4 sec 660: 12810 of 17266 74.2% 6.64/sec -05-May 10:12:04 test131 0.4 sec 1: 12811 of 17266 74.2% 2.69/sec -05-May 10:12:04 test82 0.6 sec 6: 12817 of 17266 74.2% 10.35/sec -05-May 10:12:35 test158 30.3 sec 17: 12834 of 17266 74.3% 0.56/sec -05-May 10:12:41 test84 6.4 sec 22: 12856 of 17266 74.5% 3.45/sec -05-May 10:12:45 test130 4.3 sec 20: 12876 of 17266 74.6% 4.70/sec -05-May 10:13:11 test19b 25.5 sec 50: 12926 of 17266 74.9% 1.96/sec -05-May 10:13:26 test19b 14.9 sec 5: 12931 of 17266 74.9% 0.34/sec -05-May 10:13:27 test101 1.0 sec 1: 12932 of 17266 74.9% 0.98/sec -05-May 10:13:28 test133 1.6 sec 6: 12938 of 17266 74.9% 3.72/sec -05-May 10:13:29 test72 0.4 sec 1: 12939 of 17266 74.9% 2.74/sec -05-May 10:13:40 test80 11.5 sec 2: 12941 of 17266 75.0% 0.17/sec -05-May 10:14:30 test151 49.7 sec 74: 13015 of 17266 75.4% 1.49/sec -05-May 10:14:31 test124 0.9 sec 3: 13018 of 17266 75.4% 3.39/sec -05-May 10:15:15 test23 43.9 sec 88: 13106 of 17266 75.9% 2.00/sec -05-May 10:15:44 test175 28.7 sec 1: 13107 of 17266 75.9% 0.03/sec -05-May 10:17:09 test160 85.5 sec 10: 13117 of 17266 76.0% 0.12/sec -05-May 10:18:29 test160 80.3 sec 1: 13118 of 17266 76.0% 0.01/sec -05-May 10:21:57 test134 207.2 sec 414: 13532 of 17266 78.4% 2.00/sec -05-May 10:22:00 test00 3.5 sec 8: 13540 of 17266 78.4% 2.30/sec -05-May 10:22:11 test54 10.6 sec 20: 13560 of 17266 78.5% 1.88/sec -05-May 10:22:15 test104 4.2 sec 29: 13589 of 17266 78.7% 6.97/sec -05-May 10:22:18 test11 3.2 sec 4: 13593 of 17266 78.7% 1.27/sec -05-May 10:22:18 test28 0.4 sec 0: 13593 of 17266 78.7% 0.00/sec -05-May 10:22:20 test129 1.1 sec 1: 13594 of 17266 78.7% 0.87/sec -05-May 10:22:20 test138 0.1 sec 1: 13595 of 17266 78.7% 11.94/sec -05-May 10:27:01 test127 281.5 sec 1673: 15268 of 17266 88.4% 5.94/sec -05-May 10:27:10 test76 9.1 sec 14: 15282 of 17266 88.5% 1.54/sec -05-May 10:27:12 test107 1.5 sec 6: 15288 of 17266 88.5% 3.88/sec -05-May 10:27:17 test69 5.5 sec 3: 15291 of 17266 88.6% 0.54/sec -05-May 10:27:19 test135 1.5 sec 1: 15292 of 17266 88.6% 0.68/sec -05-May 10:27:45 test17 25.7 sec 4: 15296 of 17266 88.6% 0.16/sec -05-May 10:27:57 test143 12.6 sec 1: 15297 of 17266 88.6% 0.08/sec -05-May 10:28:11 test27 13.6 sec 2: 15299 of 17266 88.6% 0.15/sec -05-May 10:28:38 test53 26.8 sec 2: 15301 of 17266 88.6% 0.07/sec -05-May 10:37:45 test77 547.8 sec 34: 15335 of 17266 88.8% 0.06/sec -05-May 10:40:22 test19 156.5 sec 11: 15346 of 17266 88.9% 0.07/sec -[malloc debugging turned off] -05-May 10:51:40 test10 678.3 sec 786: 16132 of 17266 93.4% 1.16/sec -05-May 10:59:05 test75b 444.6 sec 1086: 17218 of 17266 99.7% 2.44/sec -05-May 11:01:45 test16 160.6 sec 12: 17230 of 17266 99.8% 0.07/sec -05-May 11:03:21 test81 95.9 sec 6: 17236 of 17266 99.8% 0.06/sec -05-May 11:04:56 test21b 94.9 sec 18: 17254 of 17266 99.9% 0.19/sec -05-May 11:10:15 test18 318.6 sec 12: all 17266 full 100% 0.04/sec -[malloc debugging turned back on] diff --git a/GraphBLAS/Tcov/log_8May2021.txt b/GraphBLAS/Tcov/log_8May2021.txt deleted file mode 100644 index d0084f89f6..0000000000 --- a/GraphBLAS/Tcov/log_8May2021.txt +++ /dev/null @@ -1,120 +0,0 @@ - ----------------------------------------------- [malloc] [cover] -08-May 17:22:46 test192 5.1 sec 311: 311 of 17347 1.8% 60.68/sec -08-May 17:22:51 test191 5.2 sec 188: 499 of 17347 2.9% 36.14/sec -08-May 17:23:15 test188 23.7 sec 402: 901 of 17347 5.2% 16.95/sec -08-May 17:23:22 test187 7.2 sec 70: 971 of 17347 5.6% 9.76/sec -08-May 17:23:23 test186 0.8 sec 157: 1128 of 17347 6.5% 188.48/sec -08-May 17:23:23 test186 0.5 sec 24: 1152 of 17347 6.6% 52.48/sec -08-May 17:24:32 test185 68.8 sec 177: 1329 of 17347 7.7% 2.57/sec -08-May 17:24:35 test184 3.2 sec 69: 1398 of 17347 8.1% 21.90/sec -08-May 17:24:50 test181 14.4 sec 244: 1642 of 17347 9.5% 16.91/sec -08-May 17:24:55 test180 5.4 sec 204: 1846 of 17347 10.6% 37.75/sec -08-May 17:25:10 test180 14.7 sec 34: 1880 of 17347 10.8% 2.31/sec -08-May 17:25:10 test150 0.1 sec 46: 1926 of 17347 11.1% 354.71/sec -08-May 17:25:19 test14 9.5 sec 725: 2651 of 17347 15.3% 76.53/sec -08-May 17:26:54 test154 94.1 sec 2048: 4699 of 17347 27.1% 21.77/sec -08-May 17:27:10 test151b 16.2 sec 187: 4886 of 17347 28.2% 11.57/sec -08-May 17:27:56 test195 46.3 sec 93: 4979 of 17347 28.7% 2.01/sec -08-May 17:28:55 test194 58.9 sec 162: 5141 of 17347 29.6% 2.75/sec -08-May 17:29:09 test193 14.4 sec 9: 5150 of 17347 29.7% 0.62/sec -08-May 17:29:09 test190 0.0 sec 0: 5150 of 17347 29.7% 0.00/sec -08-May 17:29:19 test189 9.6 sec 11: 5161 of 17347 29.8% 1.14/sec -08-May 17:29:19 test183 0.0 sec 7: 5168 of 17347 29.8% 173.93/sec -08-May 17:29:20 test182 0.6 sec 23: 5191 of 17347 29.9% 37.78/sec -08-May 17:29:20 test179 0.2 sec 71: 5262 of 17347 30.3% 459.60/sec -08-May 17:29:20 test165 0.0 sec 3: 5265 of 17347 30.4% 375.28/sec -08-May 17:29:20 test01 0.6 sec 686: 5951 of 17347 34.3% 1243.67/sec -08-May 17:29:21 test01 0.1 sec 3: 5954 of 17347 34.3% 20.49/sec -08-May 17:29:21 test07b 0.0 sec 8: 5962 of 17347 34.4% 1145.48/sec -08-May 17:29:21 test83 0.0 sec 1: 5963 of 17347 34.4% 321.44/sec -08-May 17:29:21 test176 0.1 sec 7: 5970 of 17347 34.4% 55.91/sec -08-May 17:29:21 test174 0.0 sec 11: 5981 of 17347 34.5% 275.58/sec -08-May 17:29:21 test170 0.1 sec 1: 5982 of 17347 34.5% 8.68/sec -08-May 17:29:21 test169 0.0 sec 2: 5984 of 17347 34.5% 195.14/sec -08-May 17:29:21 test166 0.1 sec 51: 6035 of 17347 34.8% 347.38/sec -08-May 17:29:21 test164 0.0 sec 6: 6041 of 17347 34.8% 161.83/sec -08-May 17:29:22 test152 0.5 sec 424: 6465 of 17347 37.3% 790.40/sec -08-May 17:29:22 test155 0.2 sec 12: 6477 of 17347 37.3% 63.81/sec -08-May 17:29:22 test156 0.6 sec 2: 6479 of 17347 37.3% 3.32/sec -08-May 17:29:22 test136 0.1 sec 21: 6500 of 17347 37.5% 378.29/sec -08-May 17:29:23 test02 0.3 sec 151: 6651 of 17347 38.3% 544.70/sec -08-May 17:29:23 test109 0.2 sec 2: 6653 of 17347 38.4% 13.28/sec -08-May 17:29:23 test109 0.0 sec 3: 6656 of 17347 38.4% 1613.77/sec -08-May 17:29:23 test110 0.1 sec 5: 6661 of 17347 38.4% 40.46/sec -08-May 17:29:23 test04 0.0 sec 9: 6670 of 17347 38.5% 381.78/sec -08-May 17:29:30 test142 7.1 sec 737: 7407 of 17347 42.7% 104.47/sec -08-May 17:29:30 test162 0.1 sec 2: 7409 of 17347 42.7% 26.64/sec -08-May 17:29:30 test161 0.1 sec 2: 7411 of 17347 42.7% 13.45/sec -08-May 17:29:32 test159 1.2 sec 106: 7517 of 17347 43.3% 91.37/sec -08-May 17:29:32 test137 0.3 sec 9: 7526 of 17347 43.4% 34.24/sec -08-May 17:29:32 test139 0.4 sec 2: 7528 of 17347 43.4% 4.90/sec -08-May 17:29:32 test09 0.0 sec 1: 7529 of 17347 43.4% 101.45/sec -08-May 17:29:32 test132 0.1 sec 5: 7534 of 17347 43.4% 45.32/sec -08-May 17:29:33 test167 0.2 sec 13: 7547 of 17347 43.5% 70.88/sec -08-May 17:29:34 test177 1.0 sec 3: 7550 of 17347 43.5% 3.03/sec -08-May 17:29:34 test94 0.2 sec 10: 7560 of 17347 43.6% 50.14/sec -08-May 17:29:34 test94 0.1 sec 2: 7562 of 17347 43.6% 24.16/sec -08-May 17:29:37 test141 3.6 sec 441: 8003 of 17347 46.1% 123.77/sec -08-May 17:29:38 test144 0.6 sec 1: 8004 of 17347 46.1% 1.58/sec -08-May 17:29:38 test145 0.3 sec 5: 8009 of 17347 46.2% 19.88/sec -08-May 17:29:38 test92 0.1 sec 4: 8013 of 17347 46.2% 37.52/sec -08-May 17:29:39 test108 0.3 sec 2: 8015 of 17347 46.2% 7.26/sec -08-May 17:29:39 test172 0.1 sec 3: 8018 of 17347 46.2% 37.74/sec -08-May 17:29:39 test26 0.7 sec 34: 8052 of 17347 46.4% 47.22/sec -08-May 17:29:40 test148 0.6 sec 8: 8060 of 17347 46.5% 13.48/sec -08-May 17:29:41 testc2(1) 0.5 sec 10: 8070 of 17347 46.5% 19.37/sec -08-May 17:29:41 test163 0.1 sec 2: 8072 of 17347 46.5% 16.88/sec -08-May 17:29:41 test146 0.1 sec 1: 8073 of 17347 46.5% 8.29/sec -08-May 17:29:42 test173 1.2 sec 14: 8087 of 17347 46.6% 11.44/sec -08-May 17:29:43 test157 0.9 sec 14: 8101 of 17347 46.7% 15.62/sec -08-May 17:29:48 test29 4.9 sec 1: 8102 of 17347 46.7% 0.21/sec -08-May 17:31:21 test74 93.1 sec 4109: 12211 of 17347 70.4% 44.13/sec -08-May 17:31:21 test03 0.2 sec 3: 12214 of 17347 70.4% 17.35/sec -08-May 17:31:21 test03 0.1 sec 2: 12216 of 17347 70.4% 15.95/sec -08-May 17:31:22 test128 0.2 sec 15: 12231 of 17347 70.5% 73.68/sec -08-May 17:31:47 test125 25.1 sec 660: 12891 of 17347 74.3% 26.27/sec -08-May 17:31:47 test131 0.1 sec 1: 12892 of 17347 74.3% 8.81/sec -08-May 17:31:47 test82 0.2 sec 6: 12898 of 17347 74.4% 34.41/sec -08-May 17:31:55 test158 8.5 sec 17: 12915 of 17347 74.5% 2.01/sec -08-May 17:31:57 test84 2.0 sec 22: 12937 of 17347 74.6% 10.84/sec -08-May 17:31:59 test130 1.3 sec 20: 12957 of 17347 74.7% 15.96/sec -08-May 17:32:06 test19b 7.8 sec 50: 13007 of 17347 75.0% 6.44/sec -08-May 17:32:11 test19b 4.6 sec 5: 13012 of 17347 75.0% 1.10/sec -08-May 17:32:11 test101 0.3 sec 1: 13013 of 17347 75.0% 3.80/sec -08-May 17:32:12 test133 0.6 sec 6: 13019 of 17347 75.1% 9.75/sec -08-May 17:32:12 test72 0.2 sec 1: 13020 of 17347 75.1% 5.99/sec -08-May 17:32:16 test80 4.1 sec 2: 13022 of 17347 75.1% 0.49/sec -08-May 17:32:32 test151 15.3 sec 74: 13096 of 17347 75.5% 4.82/sec -08-May 17:32:32 test124 0.3 sec 3: 13099 of 17347 75.5% 11.63/sec -08-May 17:32:48 test23 16.2 sec 88: 13187 of 17347 76.0% 5.42/sec -08-May 17:32:57 test175 9.0 sec 1: 13188 of 17347 76.0% 0.11/sec -08-May 17:33:27 test160 30.1 sec 10: 13198 of 17347 76.1% 0.33/sec -08-May 17:33:58 test160 30.7 sec 1: 13199 of 17347 76.1% 0.03/sec -08-May 17:35:37 test134 98.9 sec 414: 13613 of 17347 78.5% 4.18/sec -08-May 17:35:40 test00 3.2 sec 8: 13621 of 17347 78.5% 2.54/sec -08-May 17:35:50 test54 9.6 sec 20: 13641 of 17347 78.6% 2.09/sec -08-May 17:35:53 test104 3.7 sec 29: 13670 of 17347 78.8% 7.87/sec -08-May 17:35:56 test11 2.9 sec 4: 13674 of 17347 78.8% 1.36/sec -08-May 17:35:57 test28 0.4 sec 0: 13674 of 17347 78.8% 0.00/sec -08-May 17:35:58 test129 1.0 sec 1: 13675 of 17347 78.8% 0.97/sec -08-May 17:35:58 test138 0.1 sec 1: 13676 of 17347 78.8% 13.19/sec -08-May 17:40:16 test127 258.7 sec 1673: 15349 of 17347 88.5% 6.47/sec -08-May 17:40:25 test76 8.9 sec 14: 15363 of 17347 88.6% 1.57/sec -08-May 17:40:27 test107 1.4 sec 6: 15369 of 17347 88.6% 4.22/sec -08-May 17:40:32 test69 5.0 sec 3: 15372 of 17347 88.6% 0.60/sec -08-May 17:40:33 test135 1.4 sec 1: 15373 of 17347 88.6% 0.71/sec -08-May 17:40:57 test17 23.7 sec 4: 15377 of 17347 88.6% 0.17/sec -08-May 17:41:10 test143 12.7 sec 1: 15378 of 17347 88.6% 0.08/sec -08-May 17:41:22 test27 12.2 sec 2: 15380 of 17347 88.7% 0.16/sec -08-May 17:41:47 test53 24.7 sec 2: 15382 of 17347 88.7% 0.08/sec -08-May 17:49:58 test77 491.7 sec 34: 15416 of 17347 88.9% 0.07/sec -08-May 17:52:34 test19 155.7 sec 11: 15427 of 17347 88.9% 0.07/sec -[malloc debugging turned off] -08-May 18:01:46 test10 552.4 sec 786: 16213 of 17347 93.5% 1.42/sec -08-May 18:08:17 test75b 390.5 sec 1086: 17299 of 17347 99.7% 2.78/sec -08-May 18:10:30 test16 133.5 sec 12: 17311 of 17347 99.8% 0.09/sec -08-May 18:11:42 test81 71.7 sec 6: 17317 of 17347 99.8% 0.08/sec -08-May 18:12:49 test21b 66.7 sec 18: 17335 of 17347 99.9% 0.27/sec -08-May 18:16:37 test18 228.3 sec 12: all 17347 full 100% 0.05/sec -[malloc debugging turned back on] diff --git a/GraphBLAS/Test/test195.m b/GraphBLAS/Test/test195.m index 6b09d40676..8123ac129d 100644 --- a/GraphBLAS/Test/test195.m +++ b/GraphBLAS/Test/test195.m @@ -4,7 +4,9 @@ % SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. % SPDX-License-Identifier: Apache-2.0 -n = 10 ; +k = 3 ; +n = 4 ; +m = 200 ; desc.axb = 'hash' ; desc_s.axb = 'hash' ; desc_s.mask = 'structural' ; dnot.axb = 'hash' ; dnot.mask = 'complement' ; @@ -13,7 +15,6 @@ semiring.multiply = 'times' ; semiring.add = 'plus' ; semiring.class = 'double' ; -% GrB.burble (1) ; for asparsity = [1 2 4 8] fprintf ('\nA: %s ', GB_sparsity (asparsity)) ; @@ -22,17 +23,15 @@ for msparsity = [1 2 4 8] fprintf ('\n M: %s ', GB_sparsity (msparsity)) ; for da = [0.01 .1 inf] - A = GB_spec_random (n, n, da) ; A.sparsity = asparsity ; + A = GB_spec_random (m, k, da) ; A.sparsity = asparsity ; for db = [0.01 .1 inf] - B = GB_spec_random (n, n, db) ; B.sparsity = bsparsity ; + B = GB_spec_random (k, n, db) ; B.sparsity = bsparsity ; for dm = [0.01 .1 inf] fprintf ('.') ; - M = GB_spec_random (n, n, dm) ; M.sparsity = msparsity ; + M = GB_spec_random (m, n, dm) ; M.sparsity = msparsity ; M.matrix = spones (M.matrix) ; C0 = sparse (n, n) ; -% save gunk A B M C0 desc semiring desc_s dnot dnot_s n da db dm - % C = A*B C0 = A.matrix * B.matrix ; C1 = GB_spec_mxm (C0, [ ], [ ], semiring, A, B, desc) ; @@ -80,5 +79,4 @@ end end -GrB.burble (0) ; fprintf ('\ntest195: all tests passed\n') ; diff --git a/LICENSE.txt b/LICENSE.txt index cee77d323d..c60e932a16 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -963,24 +963,48 @@ found in the lists below. OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -==> GraphBLAS/Doc/License.txt <== - SuiteSparse:GraphBLAS, Copyright 2017, Timothy A. Davis +==> GraphBLAS/LICENSE <== - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use SuiteSparse:GraphBLAS except in compliance with the - License. You may obtain a copy of the License at + SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. + The following Apache-2.0 applies to all of SuiteSparse:GraphBLAS except for the + @GrB MATLAB interface: - http://www.apache.org/licenses/LICENSE-2.0 + SPDX-License-Identifier: Apache-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use SuiteSparse:GraphBLAS except in compliance with the + License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + No files that are compiled and packaged as part of the libgraphblas.so or + libgraphblas.a libraries are licensed under the GNU GPLv3. All of those files + are licensed under the Apache-2.0 license. + + ================================================================================ + + The @GrB MATLAB interface, including its test suite and demos (all files in the + GraphBLAS/GraphBLAS folder) are not under the above Apache-2.0 license, but + under the GNU GPLv3 (or later) license instead. Refer to the file + GraphBLAS/GraphBLAS/@GrB/LICENSE for details. + + All files throughout this package and the @GrB MATLAB interface are tagged + with an SPDX license identifier, file by file. Either: + + SPDX-License-Identifier: Apache-2.0 + + or, for the @GrB MATLAB interface, its test suite, and demos: + + SPDX-License-Identifier: GPL-3.0-or-later ==> Mongoose License <== Mongoose, Copyright 2018, Timothy A. Davis, Scott P. Kolodziej, William W. Hager, S. Nuri Yeralan Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007 - diff --git a/README.md b/README.md index f0fb1639c7..344b2578ea 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ SuiteSparse: A Suite of Sparse matrix packages at http://suitesparse.com ----------------------------------------------------------------------------- -May 16, 2021. SuiteSparse VERSION 5.10.0 +May 17, 2021. SuiteSparse VERSION 5.10.1 Now includes GraphBLAS, SLIP_LU, and a new interface to the SuiteSparse Matrix Collection (ssget), via MATLAB and a Java GUI, to @@ -302,6 +302,10 @@ created and copied into SuiteSparse/lib. All include files need by the applications that use SuiteSparse are copied into SuiteSparse/include. All user documenation is copied into SuiteSparse/share/doc. +Be sure to first install all required libraries: BLAS and LAPACK for UMFPACK, +CHOLMOD, and SPQR, and GMP and MPFR for SLIP_LU. Be sure to use the latest +libraries; SLIP_LU requires MPFR 4.0 for example. + When compiling the libraries, do NOT use the INSTALL=... options for installing. Just do: @@ -355,10 +359,26 @@ SuiteSparse/lib (libraries), SuiteSparse/include (include .h files), and SuiteSparse/doc/suitesparse-VERSION (documentation). To install in /usr/local, the default location for Linux, do: + make library sudo make install INSTALL=/usr/local -If you want to install elsewhere, do: +If you want to install elsewhere, say in /my/path, first ensure that /my/path +is in your LD_LIBRARY_PATH. How to do that depends on your system, but in the +bash shell, add this to your ~/.bashrc file: + + LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my/path + export LD_LIBRARY_PATH + +You may also need to add SuiteSparse/lib to your path. If your copy of +SuiteSparse is in /home/me/SuiteSparse, for example, then add this to your +~/.bashrc file: + LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib:/my/path + export LD_LIBRARY_PATH + +Then do the following (use "sudo make ..." if needed): + + make library make install INSTALL=/my/path which puts the files in /my/path/lib, /my/path/include, and /my/path/doc. diff --git a/SuiteSparse_config/Makefile b/SuiteSparse_config/Makefile index b355a18bff..6a5814d490 100644 --- a/SuiteSparse_config/Makefile +++ b/SuiteSparse_config/Makefile @@ -7,7 +7,7 @@ export SUITESPARSE # version of SuiteSparse_config is also version of SuiteSparse meta-package LIBRARY = libsuitesparseconfig -VERSION = 5.10.0 +VERSION = 5.10.1 SO_VERSION = 5 default: library diff --git a/SuiteSparse_config/SuiteSparse_config.h b/SuiteSparse_config/SuiteSparse_config.h index 4614f094a5..f0456dc828 100644 --- a/SuiteSparse_config/SuiteSparse_config.h +++ b/SuiteSparse_config/SuiteSparse_config.h @@ -202,11 +202,11 @@ int SuiteSparse_version /* returns SUITESPARSE_VERSION */ */ #define SUITESPARSE_HAS_VERSION_FUNCTION -#define SUITESPARSE_DATE "May 16, 2021" +#define SUITESPARSE_DATE "May 17, 2021" #define SUITESPARSE_VER_CODE(main,sub) ((main) * 1000 + (sub)) #define SUITESPARSE_MAIN_VERSION 5 #define SUITESPARSE_SUB_VERSION 10 -#define SUITESPARSE_SUBSUB_VERSION 0 +#define SUITESPARSE_SUBSUB_VERSION 1 #define SUITESPARSE_VERSION \ SUITESPARSE_VER_CODE(SUITESPARSE_MAIN_VERSION,SUITESPARSE_SUB_VERSION) diff --git a/SuiteSparse_config/SuiteSparse_config.mk b/SuiteSparse_config/SuiteSparse_config.mk index 5bddec8d1b..2fe1ab09c3 100644 --- a/SuiteSparse_config/SuiteSparse_config.mk +++ b/SuiteSparse_config/SuiteSparse_config.mk @@ -7,7 +7,7 @@ # and GraphBLAS. The configuration settings for GraphBLAS are determined by # GraphBLAS/CMakeLists.txt -SUITESPARSE_VERSION = 5.10.0 +SUITESPARSE_VERSION = 5.10.1 #--------------------------------------------------------------------------- # determine what system we are on @@ -229,6 +229,8 @@ SUITESPARSE_VERSION = 5.10.0 ifneq ($(CUDA),no) CUDA_PATH = $(shell which nvcc 2>/dev/null | sed "s/\/bin\/nvcc//") + else + CUDA_PATH = endif ifeq ($(wildcard $(CUDA_PATH)),) @@ -259,8 +261,6 @@ SUITESPARSE_VERSION = 5.10.0 MAGMA_LIB = -L/opt/magma-2.4.0/lib/ -lmagma NVCC = $(CUDA_PATH)/bin/nvcc NVCCFLAGS = -Xcompiler -fPIC -O3 \ - -gencode=arch=compute_30,code=sm_30 \ - -gencode=arch=compute_35,code=sm_35 \ -gencode=arch=compute_50,code=sm_50 \ -gencode=arch=compute_53,code=sm_53 \ -gencode=arch=compute_53,code=sm_53 \ @@ -595,6 +595,7 @@ config: @echo 'pretty (for Tcov tests): PRETTY= ' '$(PRETTY)' @echo 'C compiler: CC= ' '$(CC)' @echo 'C++ compiler: CXX= ' '$(CXX)' + @echo 'CUDA enabled: CUDA= ' '$(CUDA)' @echo 'CUDA compiler: NVCC= ' '$(NVCC)' @echo 'CUDA root directory: CUDA_PATH= ' '$(CUDA_PATH)' @echo 'OpenMP flags: CFOPENMP= ' '$(CFOPENMP)' diff --git a/metis-5.1.0/programs/CMakeLists.txt b/metis-5.1.0/programs/CMakeLists.txt index 3aaf3577da..c77d1a2b84 100644 --- a/metis-5.1.0/programs/CMakeLists.txt +++ b/metis-5.1.0/programs/CMakeLists.txt @@ -1,6 +1,6 @@ # These programs use internal metis data structures. include_directories(../libmetis) -link_directories(/home/karypis/local/lib) +# link_directories(/home/karypis/local/lib) # Build program. add_executable(gpmetis gpmetis.c cmdline_gpmetis.c io.c stat.c) add_executable(ndmetis ndmetis.c cmdline_ndmetis.c io.c smbfactor.c)