File: dmperm_test.m

package info (click to toggle)
suitesparse 1%3A7.10.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 254,920 kB
  • sloc: ansic: 1,134,743; cpp: 46,133; makefile: 4,875; fortran: 2,087; java: 1,826; sh: 996; ruby: 725; python: 495; asm: 371; sed: 166; awk: 44
file content (126 lines) | stat: -rw-r--r-- 2,713 bytes parent folder | download | duplicates (2)
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