1function test46 2%TEST46 performance test of GxB_subassign 3 4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. 5% SPDX-License-Identifier: Apache-2.0 6 7fprintf ('\n--------------performance test GB_mex_subassign\n') ; 8 9[save save_chunk] = nthreads_get ; 10chunk = 4096 ; 11nthreads = feature ('numcores') ; 12nthreads_set (nthreads, chunk) ; 13debug_off 14 15dt = struct ('inp0', 'tran') ; 16 17rng ('default') ; 18 19A = sparse (rand (3,4)) ; 20I = uint64 (0:2) ; 21J = uint64 (0:3) ; 22C = A ; 23 24C0 = sprandn (length(I), length (J), 0.5) ; 25C1 = C ; 26C1 (I+1,J+1) = C0 ; 27CC = GB_mex_subassign (C, [],[], C0, I, J, []) ; 28assert (isequal (C1, CC.matrix)) 29 30C0 = sprandn (length(I), length (J), 0.5)' ; 31C1 = C ; 32C1 (I+1,J+1) = C0' ; 33CC = GB_mex_subassign (C, [],[], C0, I, J, dt) ; 34assert (isequal (C1, CC.matrix)) 35 36for trial = 1:100 37 38 for m = [1 10 100] 39 for n = [1 10 100] 40 41 C = sprandn (m, n, 0.1) ; 42 43 ni = double (irand (1, m)) ; 44 nj = double (irand (1, n)) ; 45 I = randperm (m) ; 46 J = randperm (n) ; 47 I = I (1:ni) ; 48 J = J (1:nj) ; 49 I0 = uint64 (I-1) ; 50 J0 = uint64 (J-1) ; 51 52 A = sprandn (ni, nj, 0.1) ; 53 54 C1 = C ; 55 C1 (I,J) = A ; 56 C2 = GB_mex_subassign (C, [], '', A, I0, J0, []) ; 57 58 C3 = C ; 59 C3 (I,J) = C3 (I,J) + A ; 60 C4 = GB_mex_subassign (C, [], 'plus', A, I0, J0, []) ; 61 62 assert (isequal (C3, C4.matrix)) 63 end 64 end 65end 66 67 68Prob = ssget (2662) ; 69A = Prob.A ; 70% n = 2^21 ; A = A (1:n,1:n) ; 71% A = A (:) ; 72A = [A A ; A A] ; 73A = [A A ; A A] ; 74% A = [A A ; A A] ; 75%A = [A A ; A A] ; 76%A = [A A ; A A] ; 77C = A ; 78C (1,1) = 1 ; 79[m n] = size (A) ; 80fprintf ('size: %d %d\n', m, n) ; 81 82ni = min (size (A, 1), 5500) ; 83nj = min (size (A, 2), 7000) ; 84B = sprandn (ni, nj, 0.001) ; 85% I = randperm (m) ; I = I (1:ni) ; 86% J = randperm (n) ; J = J (1:nj) ; 87I = randperm (m,ni) ; 88J = randperm (n,nj) ; 89fprintf ('nnzB: %g\n', nnz (B)) ; 90 91fprintf ('\nC(I,J)=B, MATLAB start:\n') 92tic 93C (I,J) = B ; 94toc 95 96I0 = uint64 (I-1) ; 97J0 = uint64 (J-1) ; 98 99C2 = A; 100C2 (1,1) =1 ; 101 102fprintf ('GraphBLAS start:\n') 103 104for nthreads = [1 20 40] 105 nthreads_set (nthreads) ; 106 C3 = GB_mex_subassign (C2, [], [], B, I0, J0, []) ; 107 tg = grbresults ; 108 fprintf ('%d threads, GB time: %g\n', nthreads, tg) ; 109 assert (isequal (C, C3.matrix)) ; 110end 111 112% A = Prob.A ; 113% A = A (:) ; 114% A = [A A] ; 115% n = 2^21 ; A = A (1:n,1:n) ; 116C = A ; 117C (1,1) = 1 ; 118 119fprintf ('\nC(I,J)+=B, MATLAB start:\n') 120tic 121C (I,J) = C (I,J) + B ; 122toc 123 124C2 = A ; 125C2 (1,1) = 1 ; 126 127fprintf ('GraphBLAS start:\n') 128 129for nthreads = [1 20 40] 130 nthreads_set (nthreads) ; 131 C3 = GB_mex_subassign (C2, [], 'plus', B, I0, J0, []) ; 132 tg = grbresults ; 133 fprintf ('%d threads, GB time: %g\n', nthreads, tg) ; 134 assert (isequal (C, C3.matrix)) ; 135end 136 137nthreads_set (save, save_chunk) ; 138 139fprintf ('\ntest46: all tests passed\n') ; 140 141