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 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
%NN Compare nesdis with metis, in both quality and run time
%
% Example:
% nn
% See also cholmod_test
% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com
index = ssget ;
f = find (index.amd_lnz > 0) ;
[ignore i] = sort (index.amd_lnz (f)) ;
f = f (i) ;
nmat = length (f) ;
T1 = zeros (1,nmat) ;
T2 = zeros (1,nmat) ;
TM = zeros (1,nmat) ;
Lnz1 = zeros (1,nmat) ;
Lnz2 = zeros (1,nmat) ;
LnzM = zeros (1,nmat) ;
Fl1 = zeros (1,nmat) ;
Fl2 = zeros (1,nmat) ;
FlM = zeros (1,nmat) ;
for k = 1:nmat
i = f (k) ;
Prob = ssget (i,index) ;
A = Prob.A ;
[m n] = size (A) ;
if (m ~= n)
continue ;
end
fprintf ('%35s: ', Prob.name) ;
if (m == n)
mode = 'sym' ;
A = A + A' ;
len = n ;
elseif (m < n)
mode = 'row' ;
len = m ;
else
mode = 'col' ;
len = n ;
end
fprintf (' %s ', mode) ;
% try nesdis using camd, and splitting connected components
tic
[p2 cparent2 cmember2] = nesdis (A, mode, [200 1]) ;
t2 = toc ;
% subplot (3,3,7) ; treeplot (cparent2) ;
% try nesdis using camd
tic
[p1 cparent1 cmember1] = nesdis (A, mode) ;
t1 = toc ;
% subplot (3,3,8) ; treeplot (cparent1) ;
% try metis
tic
pm = metis (A, mode) ;
tm = toc ;
if (any (sort (p1) ~= 1:len))
error ('p1!') ;
end
if (any (sort (p2) ~= 1:len))
error ('p2!') ;
end
% compare ordering quality
if (m == n)
c2 = symbfact2 (A (p2,p2), mode) ; fl2 = sum (c2.^2) ; c2 = sum (c2) ;
c1 = symbfact2 (A (p1,p1), mode) ; fl1 = sum (c1.^2) ; c1 = sum (c1) ;
cm = symbfact2 (A (pm,pm), mode) ; flm = sum (cm.^2) ; cm = sum (cm) ;
elseif (m < n)
c2 = symbfact2 (A (p2, :), mode) ; fl2 = sum (c2.^2) ; c2 = sum (c2) ;
c1 = symbfact2 (A (p1, :), mode) ; fl1 = sum (c1.^2) ; c1 = sum (c1) ;
cm = symbfact2 (A (pm, :), mode) ; flm = sum (cm.^2) ; cm = sum (cm) ;
else
c2 = symbfact2 (A ( :,p2), mode) ; fl2 = sum (c2.^2) ; c2 = sum (c2) ;
c1 = symbfact2 (A ( :,p1), mode) ; fl1 = sum (c1.^2) ; c1 = sum (c1) ;
cm = symbfact2 (A ( :,pm), mode) ; flm = sum (cm.^2) ; cm = sum (cm) ;
end
T1 (k) = t1 ;
T2 (k) = t2 ;
TM (k) = tm ;
Lnz1 (k) = c1 ;
Lnz2 (k) = c2 ;
LnzM (k) = cm ;
Fl1 (k) = fl1 ;
Fl2 (k) = fl2 ;
FlM (k) = flm ;
tmax = max ([max(T1 (1:k)) max(T2 (1:k)) max(TM (1:k))]) ;
tmin = min ([min(T1 (1:k)) min(T2 (1:k)) min(TM (1:k))]) ;
cmax = max ([max(Lnz1 (1:k)) max(Lnz2 (1:k)) max(LnzM (1:k))]) ;
flmax =max ([max(Fl1 (1:k)) max(Fl2 (1:k)) max(FlM (1:k))]) ;
fprintf (...
'time %8.2f %8.2f %8.2f speedup %8.2f flop %8.2e %8.2e %8.2e ratio %8.2f\n', ...
t2, t1, tm, tm/t1, fl2, fl1, flm, flm/fl1) ;
if (mod (k, 20) ~= 0)
continue
end
subplot (3,3,1) ;
x = T1 (1:k) ./ T2 (1:k) ;
semilogy (1:k, x, 'o', [1 k], [1 1], 'r-') ;
axis tight
title (sprintf ('(nesdis default)/(with split) time, median: %g', ...
median (x))) ;
subplot (3,3,2) ;
x = (Lnz1 (1:k) ./ Lnz2 (1:k)) ;
semilogy (1:k, x, 'o', [1 k], [1 1], 'r-') ;
axis tight
title (sprintf ('(nesdis default)/(with split) lnz, median: %g', ...
median (x))) ;
subplot (3,3,3) ;
x = (Fl1 (1:k) ./ Fl2 (1:k)) ;
semilogy (1:k, x, 'o', [1 k], [1 1], 'r-') ;
axis tight
title (sprintf ('(nesdis default)/(with split) flops, median: %g', ...
median (x))) ;
subplot (3,3,4) ;
x = T1 (1:k) ./ TM (1:k) ;
semilogy (1:k, x, 'o', [1 k], [1 1], 'r-') ;
axis tight
title (sprintf ('(nesdis default)/metis time, median %g', median (x))) ;
subplot (3,3,5) ;
x = (Lnz1 (1:k) ./ LnzM (1:k)) ;
semilogy (1:k, x, 'o', [1 k], [1 1], 'r-') ;
axis tight
title (sprintf ('(nesdis default)/metis lnz, median: %g', median (x))) ;
subplot (3,3,6) ;
x = (Fl1 (1:k) ./ FlM (1:k)) ;
semilogy (1:k, x, 'o', [1 k], [1 1], 'r-') ;
axis tight
title (sprintf ('(nesdis default)/metis flops, median: %g', median (x))) ;
drawnow
% pause
end
|