1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
function dmperm_test
%DMPERM_TEST test cs_dmperm
%
% Example:
% dmperm_test
% See also: testall
% CXSparse, Copyright (c) 2006-2022, Timothy A. Davis. All Rights Reserved.
% SPDX-License-Identifier: LGPL-2.1+
index = ssget ;
f = find (index.nrows ~= index.ncols) ;
[ignore i] = sort (index.nrows(f) ./ index.ncols(f)) ;
f = [209:211 f(i)] ;
nmat = length(f) ;
tt1 = zeros (1,nmat) ;
tt2 = zeros (1,nmat) ;
tt3 = zeros (1,nmat) ;
tt4 = zeros (1,nmat) ;
mm = zeros (1,nmat) ;
nn = zeros (1,nmat) ;
ss = zeros (1,nmat) ;
me = zeros (1,nmat) ;
ne = zeros (1,nmat) ;
p = cs_dmperm (sparse (1)) ;
for k = 1:length(f)
i = f(k) ;
Prob = ssget (i) %#ok
A = Prob.A ;
[m n] = size (A) ;
if (m > n)
% make sure A is short and fat
A = A' ;
end
% C is tall and thin
C = A' ;
[m n] = size (A) ;
k1 = 0 ;
t1 = 0 ;
while (t1 < 1)
tic
p = cs_dmperm (A) ;
t = toc ;
t1 = t1 + t ;
k1 = k1 + 1 ;
end
t1 = t1 / k1 ;
s1 = sum (p > 0) ;
k2 = 0 ;
t2 = 0 ;
while (t2 < 1)
tic
p = cs_dmperm (C) ;
t = toc ;
t2 = t2 + t ;
k2 = k2 + 1 ;
end
t2 = t2 / k2 ;
s2 = sum (p > 0) ;
k3 = 0 ;
t3 = 0 ;
while (t3 < 1)
tic
p = cs_dmperm_orig (A) ;
t = toc ;
t3 = t3 + t ;
k3 = k3 + 1 ;
end
t3 = t3 / k3 ;
k4 = 0 ;
t4 = 0 ;
while (t4 < 1)
tic
p = cs_dmperm_orig (A') ;
t = toc ;
t4 = t4 + t ;
k4 = k4 + 1 ;
end
t4 = t4 / k4 ;
sprnk = sum (p > 0) ;
nempty = full (sum (sum (spones (A)) == 0)) ;
mempty = full (sum (sum (spones (C)) == 0)) ;
fprintf ('[m %d:%d n %d:%d (%d)]:\n', m, mempty, n, nempty, sprnk) ;
fprintf (' A: t1 %10.6f (%6d) C: t2 %10.6f (%6d) new\n', ...
t1, k1, t2, k2) ;
fprintf (' A: t3 %10.6f (%6d) C: t4 %10.6f (%6d) orig\n', ...
t3, k3, t4, k4) ;
if (s1 ~= sprnk | s2 ~= sprnk) %#ok
s1 %#ok
s2 %#ok
sprnk %#ok
error ('!') ;
end
tt1 (k) = t1 ;
tt2 (k) = t2 ;
tt3 (k) = t3 ;
tt4 (k) = t4 ;
mm (k) = m ;
nn (k) = n ;
ss (k) = sprnk ;
me (k) = mempty ;
ne (k) = nempty ;
clear A C
semilogy (ss(1:k) ./ nn(1:k), tt1(1:k) ./ tt3(1:k), 'o', ...
[0 1], [1 1], 'r-') ;
drawnow
end
|