1function test73 2%TEST73 performance of C = A*B, with mask 3 4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. 5% SPDX-License-Identifier: Apache-2.0 6 7fprintf ('\n----------------- C=A*B performance\n') ; 8 9[save save_chunk] = nthreads_get ; 10chunk = 4096 ; 11nthreads = feature ('numcores') ; 12nthreads_set (nthreads, chunk) ; 13 14Prob = ssget (1338) 15A = Prob.A ; 16 17 % remove the diagonal and extract L and U 18 A = spones (A) ; 19 A = spones (A+A') ; 20 L = tril (A,-1) ; 21 U = triu (A,1) ; 22 A = L + U ; 23 n = size (A,1) ; 24 nz = nnz (L) ; 25 26 semiring.multiply = 'times' ; 27 semiring.add = 'plus' ; 28 semiring.class = 'double' ; 29 30Cin = sparse (n, n) ; 31S = spones (L) ; 32 33dnn = [ ] ; 34dtn = struct ('inp0', 'tran') ; 35 36% no mask --------------------------------------------- 37tic 38C1 = GB_mex_mxm (Cin, [ ], [ ], semiring, L, L, dnn); 39t1 = toc ; 40fprintf ('mxm, no mask %g\n', t1) ; 41 42tic 43C1 = GB_mex_mxm (Cin, [ ], [ ], semiring, L, L, dnn); 44t1 = toc ; 45fprintf ('mxm, no mask %g\n', t1) ; 46 47tic 48C2 = L*L ; 49t2 = toc ; 50fprintf ('MATLAB, no mask %g\n', t2) ; 51 52% with mask --------------------------------------------- 53 54tic 55C2b = (L*L) .* L ; 56t2 = toc ; 57fprintf ('MATLAB, mask %g\n', t2) ; 58 59tic 60C3 = GB_mex_mxm (Cin, L, [ ], semiring, L, L, dnn); 61t3 = toc ; 62fprintf ('mxm, with mask %g\n', t3) ; 63 64tic 65C5 = GB_mex_mxm (Cin, [ ], [ ], semiring, L, L, dnn); 66C5.matrix = C5.matrix .* L ; 67t3 = toc ; 68fprintf ('mxm, then emult %g\n', t3) ; 69 70tic 71C4 = GB_mex_mxm (Cin, C2, [ ], semiring, L, L, dnn); 72t4 = toc ; 73fprintf ('mxm, with mask C %g\n', t4) ; 74 75tic 76C5 = GB_mex_mxm (Cin, L, [ ], semiring, U, L, dtn); 77t5 = toc ; 78fprintf ('mxm, with mask L %g (dot)\n', t5) ; 79 80assert (isequal (C2, C1.matrix)) ; 81assert (isequal (C2 .* spones (L), C3.matrix)) ; 82assert (isequal (C2, C4.matrix)) ; 83assert (isequal (C2b, C5.matrix)) ; 84nthreads_set (save, save_chunk) ; 85