1function gbtest99
2%GBTEST99 test performance of C=A'*B and C=A'
3
4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
5% SPDX-License-Identifier: GPL-3.0-or-later
6
7if (~ispc)
8    feature ('numcores') ;
9end
10fprintf ('# of threads in @GrB: %d\n', GrB.threads) ;
11n = 10 * 1e6 ;
12kset = [1    2    10  32 100 120 150 1000] ;
13nset = [1000 1000 100 10 10  10  10  10  ] ;
14nset = nset/10 ;
15
16for kk = 1:length (kset)
17    ntrials = nset (kk) ;
18    k = kset (kk) ;
19
20    fprintf ('\n======================== k = %d\n', k) ;
21    A = sprand (n, k, 0.001) ;
22    B = sprand (n, k, 0.001) ;
23
24    % MATLAB, with warmup:
25    C1 = A'*B ;
26    tic
27    for trial = 1:ntrials
28        C1 = A'*B ;
29    end
30    t1 = toc / ntrials ;
31    fprintf ('MATLAB time: %g sec\n', t1) ;
32
33    % GrB, with warmup, using the descriptor transpose
34    A = GrB (A) ;
35    B = GrB (B) ;
36    d.in0 = 'transpose' ;
37    C2 = GrB.mxm (A, '+.*', B, d) ;
38    tic
39    for trial = 1:ntrials
40        C2 = GrB.mxm (A, '+.*', B, d) ;
41    end
42    t2 = toc / ntrials ;
43    err = norm (C1-C2, 1) ;
44    fprintf ('@GrB default time: %g sec, speedup %g error: %g\n', ...
45        t2, t1/t2, err) ;
46    assert (err <= 1e-12 * norm (C1,1)) ;
47
48    % GrB, with warmup, using the explicit transpose
49    C2 = A'*B ;
50    tic
51    for trial = 1:ntrials
52        C2 = A'*B ;
53    end
54    t3 = toc / ntrials ;
55    err = norm (C1-C2, 1) ;
56    fprintf ('@GrB saxpy/transpose time: %g sec, speedup %g, error: %g\n', ...
57        t3, t1/t3, err) ;
58    assert (err <= 1e-12 * norm (C1,1)) ;
59
60    % with burble, to see what GraphBLAS is doing
61    GrB.burble (1) ;
62    fprintf ('\nGrB with mxm and descriptor transpose:\n') ;
63    C2 = GrB.mxm (A, '+.*', B, d) ; %#ok<NASGU>
64    fprintf ('\nGrB with A''*B syntax and explicit transpose:\n') ;
65    C2 = A'*B ; %#ok<NASGU>
66    GrB.burble (0) ;
67
68    % MATLAB transpose time
69    A = double (A) ;
70    C1 = A' ;
71    tic
72    for trial = 1:ntrials
73        C1 = A' ;
74    end
75    t1 = toc / ntrials ;
76    fprintf ('\nMATLAB transpose time: %g sec\n', t1) ;
77
78    % GrB transpose time
79    A = GrB (A) ;
80    C2 = A' ;
81    tic
82    for trial = 1:ntrials
83        C2 = A' ;
84    end
85    t2 = toc / ntrials ;
86    assert (isequal (C1, C2)) ;
87    fprintf ('@GrB transpose time: %g sec, speedup %g\n', t2, t1/t2) ;
88
89end
90
91fprintf ('gbtest99: all tests passed\n') ;
92
93