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