1function test58 (cover) 2%TEST58 test GrB_eWiseAdd 3 4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. 5% SPDX-License-Identifier: Apache-2.0 6 7if (nargin < 1) 8 cover = 1 ; 9end 10 11fprintf ('\ntest58: ----- quick performance for GB_mex_Matrix_eWiseAdd\n') ; 12 13[save save_chunk] = nthreads_get ; 14chunk = 4096 ; 15nthreads = feature ('numcores') ; 16nthreads_set (nthreads, chunk) ; 17 18 19add = 'plus' ; 20Mask = [ ] ; 21accum = 'plus' ; 22 23if (~cover) 24 Prob = ssget (939) ; 25 A = Prob.A ; 26 B = 2*A ; 27 Cin = A .* (A < 0) ; 28 29 tic 30 C = Cin + (A+B) ; 31 t1 =toc ; 32 33 C2 = GB_mex_Matrix_eWiseAdd (Cin, Mask, accum, add, A, B, [ ]) ; 34 t2 = grbresults ; 35 assert (isequal (C2.matrix, C)) 36 37 fprintf ('MATLAB: %g GB: %g speedup: %g\n', t1, t2, t1/t2) ; 38end 39 40if (cover) 41 nn = [10 100 ] ; 42else 43 nn = [10 100 1000 10000 50000] ; 44end 45 46for m = nn 47 for n = nn 48 A = sprandn (m, n, 0.01) ; 49 B = sprandn (m, n, 0.01) ; 50 Cin = sprandn (m, n, 0.01) ; 51 AT = A' ; 52 BT = B' ; 53 54 if (min (m,n) >= 10000) 55 trials = 1 ; 56 else 57 trials = 20 ; 58 end 59 60 Dnn = struct ; 61 Dtn = struct ('inp0', 'tran') ; 62 Dnt = struct ('inp1', 'tran') ; 63 Dtt = struct ('inp0', 'tran', 'inp1', 'tran') ; 64 65 % C += A+B 66 tic 67 for k = 1:trials 68 C1 = Cin + (A+B) ; 69 end 70 t1 = toc / trials ; 71 72 tg = 0 ; 73 for k = 1:trials 74 C2 = GB_mex_Matrix_eWiseAdd (Cin, [ ], accum, add, A, B, [ ]) ; 75 tg = tg + grbresults ; 76 end 77 t2 = tg /trials ; 78 assert (isequal (C1, C2.matrix)) ; 79 80 fprintf ('A+B: ') ; 81 fprintf ('m %6d n %6d nz %8d: MATLAB %8.4f GrB %8.4f', ... 82 m, n, nnz (C1), t1, t2) ; 83 % fprintf (' Cs: %8.4f', t3) ; 84 fprintf (' speedup %g\n', t1/t2) ; 85 86 % C += A+B' 87 tic 88 for k = 1:trials 89 C1 = Cin + (A+BT') ; 90 end 91 t1 = toc / trials ; 92 93 tg = 0 ; 94 for k = 1:trials 95 C2 = GB_mex_Matrix_eWiseAdd (Cin, [ ], accum, add, A, BT, Dnt) ; 96 tg = tg + grbresults ; 97 end 98 t2 = tg /trials ; 99 assert (isequal (C1, C2.matrix)) ; 100 101 fprintf ('A+B'': ') ; 102 fprintf ('m %6d n %6d nz %8d: MATLAB %8.4f GrB %8.4f', ... 103 m, n, nnz (C1), t1, t2) ; 104 % fprintf (' Cs: %8.4f', t3) ; 105 fprintf (' speedup %g\n', t1/t2) ; 106 107 % C += A'+B 108 tic 109 for k = 1:trials 110 C1 = Cin + (AT'+B) ; 111 end 112 t1 = toc / trials ; 113 114 tg = 0 ; 115 for k = 1:trials 116 C2 = GB_mex_Matrix_eWiseAdd (Cin, [ ], accum, add, AT, B, Dtn) ; 117 tg = tg + grbresults ; 118 end 119 t2 = tg /trials ; 120 assert (isequal (C1, C2.matrix)) ; 121 122 fprintf ('A''+B: ') ; 123 fprintf ('m %6d n %6d nz %8d: MATLAB %8.4f GrB %8.4f', ... 124 m, n, nnz (C1), t1, t2) ; 125 % fprintf (' Cs: %8.4f', t3) ; 126 fprintf (' speedup %g\n', t1/t2) ; 127 128 % C += A'+B' 129 tic 130 for k = 1:trials 131 C1 = Cin + (AT'+BT') ; 132 end 133 t1 = toc / trials ; 134 135 tg = 0 ; 136 for k = 1:trials 137 C2 = GB_mex_Matrix_eWiseAdd (Cin, [ ], accum, add, AT, BT, Dtt) ; 138 tg = tg + grbresults ; 139 end 140 t2 = tg /trials ; 141 assert (isequal (C1, C2.matrix)) ; 142 143 fprintf ('A''+B'': ') ; 144 fprintf ('m %6d n %6d nz %8d: MATLAB %8.4f GrB %8.4f', ... 145 m, n, nnz (C1), t1, t2) ; 146 % fprintf (' Cs: %8.4f', t3) ; 147 fprintf (' speedup %g\n', t1/t2) ; 148 149 end 150end 151 152fprintf ('\ntest58: all tests passed\n') ; 153 154nthreads_set (save, save_chunk) ; 155