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