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