1function test86 2%TEST86 performance test of of GrB_Matrix_extract 3 4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. 5% SPDX-License-Identifier: Apache-2.0 6 7fprintf ('test86: performance test of of GrB_Matrix_extract\n') ; 8 9[save save_chunk] = nthreads_get ; 10chunk = 4096 ; 11 12rng ('default') ; 13nthreads_max = 2*GB_mex_omp_max_threads ; 14nthread_list = [1 2 3 4 8 16 32 40 64 128 160 256] ; 15nthread_list = nthread_list (nthread_list <= nthreads_max) ; 16 17Prob = ssget (2662) 18 19A = Prob.A ; 20n = size (A,1) ; 21 22fprintf ('\nrandperm==========================================================:\n') ; 23J = randperm (n) ; 24I = randperm (n) ; 25for subset = [n 1e6 1e4 100] 26 fprintf ('\nC = A (length %d randperm, length %d randperm)\n', subset, subset) ; 27 I2 = I (1:subset) ; 28 J2 = J (1:subset) ; 29 tic ; 30 C = A (I2,J2) ; 31 t1 = toc ; 32 fprintf (' MATLAB %12.6f\n', t1) ; 33 [cm cn] = size (C) ; 34 S = sparse (cm, cn) ; 35 I0 = uint64 (I2) - 1 ; 36 J0 = uint64 (J2) - 1 ; 37 for nthreads = nthread_list 38 nthreads_set (nthreads, chunk) ; 39 C2 = GB_mex_Matrix_extract (S, [ ], [ ], A, I0, J0) ; 40 t2 = grbresults ; 41 assert (isequal (C, C2.matrix)) ; 42 fprintf (' GraphBLAS nthreads %2d %12.6f speedup %8.2f\n', nthreads, t2, t1/t2) ; 43 end 44end 45 46clear I0 J0 I2 J2 47 48fprintf ('\nrandperm==========================================================:\n') ; 49for subset = [n 1e6 1e4 100] 50 fprintf ('\nC = A (length %d randperm, :)\n', subset) ; 51 I2 = I (1:subset) ; 52 tic ; 53 C = A (I2,:) ; 54 t1 = toc ; 55 fprintf (' MATLAB %12.6f\n', t1) ; 56 [cm cn] = size (C) ; 57 S = sparse (cm, cn) ; 58 I0 = uint64 (I2) - 1 ; 59 J0.begin = 0 ; J0.inc = 1 ; J0.end = n-1 ; 60 for nthreads = nthread_list 61 nthreads_set (nthreads, chunk) ; 62 C2 = GB_mex_Matrix_extract (S, [ ], [ ], A, I0, J0) ; 63 t2 = grbresults ; 64 assert (isequal (C, C2.matrix)) ; 65 fprintf (' GraphBLAS nthreads %2d %12.6f speedup %8.2f\n', nthreads, t2, t1/t2) ; 66 end 67end 68 69clear I J I0 J0 I2 J2 70 71fprintf ('\nC = A (1:inc:n, :) ===============================================:\n') ; 72for inc = [1:10 16 64 128 256 1024 100000 1e6 2e6] 73 % fprintf ('\nC = A (1:%7d:n, 1:%7d:n)\n', inc, inc) ; 74 fprintf ('\nC = A (1:%7d:n, :)\n', inc) ; 75 tic 76 % C = A (1:inc:n, 1:inc:n) ; 77 C = A (1:inc:n, :) ; 78 t1 = toc ; 79 fprintf (' MATLAB %12.6f\n', t1) ; 80 clear I J 81 I.begin = 0 ; I.inc = inc ; I.end = n-1 ; 82 J.begin = 0 ; J.inc = 1 ; J.end = n-1 ; 83 [cm cn] = size (C) ; 84 S = sparse (cm, cn) ; 85 for nthreads = nthread_list 86 nthreads_set (nthreads, chunk) ; 87 % C2 = GB_mex_Matrix_extract (S, [ ], [ ], A, I, I) ; 88 C2 = GB_mex_Matrix_extract (S, [ ], [ ], A, I, J) ; 89 t2 = grbresults ; 90 GB_spok (C2.matrix) ; 91 assert (isequal (C, C2.matrix)) ; 92 fprintf (' GraphBLAS nthreads %2d %12.6f speedup %8.2f\n', nthreads, t2, t1/t2) ; 93 end 94end 95 96fprintf ('\nC = A (1:k, 1:k) =================================================:\n') ; 97 98for hi = [1:10 16 64 128 256 1024 100000 1e6 2e6] 99 fprintf ('\nC = A (1:%7d, 1:%7d)\n', hi, hi) ; 100 tic 101 C = A (1:hi, 1:hi) ; 102 t1 = toc ; 103 fprintf (' MATLAB %12.6f\n', t1) ; 104 I.begin = 0 ; 105 I.inc = 1 ; 106 I.end = hi-1 ; 107 [cm cn] = size (C) ; 108 S = sparse (cm, cn) ; 109 for nthreads = nthread_list 110 nthreads_set (nthreads, chunk) ; 111 C2 = GB_mex_Matrix_extract (S, [ ], [ ], A, I, I) ; 112 t2 = grbresults ; 113 assert (isequal (C, C2.matrix)) ; 114 fprintf (' GraphBLAS nthreads %2d %12.6f speedup %8.2f\n', nthreads, t2, t1/t2) ; 115 end 116end 117 118fprintf ('\nC = A (lo:hi, lo:hi) =============================================:\n') ; 119 120for lo = [1:10 16 64 128 256 1024 100000 1e6 2e6] 121 for delta = [1 10000 1e6] 122 hi = lo + delta ; 123 hi = min (n, hi) ; 124 fprintf ('\nC = A (%7d:%7d, %7d:%7d)\n', lo, hi, lo, hi) ; 125 tic 126 C = A (lo:hi, lo:hi) ; 127 t1 = toc ; 128 fprintf (' MATLAB %12.6f\n', t1) ; 129 I.begin = lo-1 ; 130 I.inc = 1 ; 131 I.end = hi-1 ; 132 [cm cn] = size (C) ; 133 S = sparse (cm, cn) ; 134 for nthreads = nthread_list 135 nthreads_set (nthreads, chunk) ; 136 C2 = GB_mex_Matrix_extract (S, [ ], [ ], A, I, I) ; 137 t2 = grbresults ; 138 assert (isequal (C, C2.matrix)) ; 139 fprintf (' GraphBLAS nthreads %2d %12.6f speedup %8.2f\n', nthreads, t2, t1/t2) ; 140 end 141 end 142end 143 144fprintf ('\nC = A (hi:-1:lo, hi:-1:lo) =======================================:\n') ; 145 146for lo = [1:10 16 64 128 256 1024 100000 1e6 2e6] 147 for delta = [1 10000 1e6] 148 hi = lo + delta ; 149 hi = min (n, hi) ; 150 fprintf ('\nC = A (%7d:-1:%7d, %7d:-1:%7d)\n', hi, lo, hi, lo) ; 151 tic 152 C = A (hi:-1:lo, hi:-1:lo) ; 153 t1 = toc ; 154 fprintf (' MATLAB %12.6f\n', t1) ; 155 I.begin = hi-1 ; 156 I.inc = -1 ; 157 I.end = lo-1 ; 158 [cm cn] = size (C) ; 159 S = sparse (cm, cn) ; 160 for nthreads = nthread_list 161 nthreads_set (nthreads, chunk) ; 162 C2 = GB_mex_Matrix_extract (S, [ ], [ ], A, I, I) ; 163 t2 = grbresults ; 164 assert (isequal (C, C2.matrix)) ; 165 fprintf (' GraphBLAS nthreads %2d %12.6f speedup %8.2f\n', nthreads, t2, t1/t2) ; 166 end 167 end 168end 169 170fprintf ('\nC = A (n:-inc:1, n:-inc:1) =======================================:\n') ; 171 172for inc = [1:10 16 64 128 256 1024 100000 1e6 2e6] 173 fprintf ('\nC = A (n:%7d:1, n:%7d:1)\n', -inc, -inc) ; 174 tic 175 C = A (n:(-inc):1, n:(-inc):1) ; 176 t1 = toc ; 177 fprintf (' MATLAB %12.6f\n', t1) ; 178 I.begin = n-1 ; 179 I.inc = -inc ; 180 I.end = 0 ; 181 [cm cn] = size (C) ; 182 S = sparse (cm, cn) ; 183 for nthreads = nthread_list 184 nthreads_set (nthreads, chunk) ; 185 C2 = GB_mex_Matrix_extract (S, [ ], [ ], A, I, I) ; 186 t2 = grbresults ; 187 assert (isequal (C, C2.matrix)) ; 188 fprintf (' GraphBLAS nthreads %2d %12.6f speedup %8.2f\n', nthreads, t2, t1/t2) ; 189 end 190end 191 192fprintf ('test86: all tests passed\n') ; 193 194nthreads_set (save, save_chunk) ; 195