Chris@248
|
1
|
Chris@248
|
2 program yetilab.matrix.test.speedtest;
|
Chris@248
|
3
|
Chris@248
|
4 mat = load yetilab.matrix.matrix;
|
Chris@248
|
5 vec = load yetilab.vector.vector;
|
Chris@248
|
6
|
Chris@249
|
7 { compare, compareUsing } = load yetilab.test.test;
|
Chris@249
|
8
|
Chris@249
|
9 compareMatrices = compareUsing mat.equal;
|
Chris@249
|
10
|
Chris@248
|
11 time f =
|
Chris@248
|
12 (start = System#currentTimeMillis();
|
Chris@248
|
13 result = f ();
|
Chris@248
|
14 end = System#currentTimeMillis();
|
Chris@248
|
15 println " \(end-start)ms";
|
Chris@248
|
16 result);
|
Chris@248
|
17
|
Chris@248
|
18 makeMatrices sz sparsity =
|
Chris@248
|
19 (print "Making \(sz) * \(sz) random matrix...";
|
Chris@248
|
20 m = time \(mat.randomMatrix { rows = sz, columns = sz });
|
Chris@248
|
21 makeSparse () =
|
Chris@248
|
22 (print "Making \(sparsity * 100)% sparse version (as dense matrix)...";
|
Chris@248
|
23 t = time \(mat.thresholded sparsity m);
|
Chris@249
|
24 println "Reported density: \(mat.density t) (non-zero values: \(mat.nonZeroValues t))";
|
Chris@248
|
25 print "Converting to sparse matrix...";
|
Chris@248
|
26 s = time \(mat.toSparse t);
|
Chris@249
|
27 println "Reported density: \(mat.density s) (non-zero values: \(mat.nonZeroValues s))";
|
Chris@248
|
28 s);
|
Chris@248
|
29 s = makeSparse ();
|
Chris@248
|
30 println "Making types:";
|
Chris@248
|
31 print "Col-major dense...";
|
Chris@248
|
32 cmd = time \(mat.toColumnMajor m);
|
Chris@248
|
33 print "Row-major dense...";
|
Chris@248
|
34 rmd = time \(mat.toRowMajor m);
|
Chris@248
|
35 print "Col-major sparse...";
|
Chris@248
|
36 cms = time \(mat.toColumnMajor s);
|
Chris@248
|
37 print "Row-major sparse...";
|
Chris@248
|
38 rms = time \(mat.toRowMajor s);
|
Chris@248
|
39 println "";
|
Chris@248
|
40 { cmd, rmd, cms, rms });
|
Chris@248
|
41
|
Chris@248
|
42 println "\nR * M multiplies:\n";
|
Chris@248
|
43
|
Chris@248
|
44 sz = 2000;
|
Chris@249
|
45 sparsity = 0.98;
|
Chris@248
|
46
|
Chris@249
|
47 { cmd, rmd, cms, rms } = makeMatrices sz sparsity;
|
Chris@248
|
48
|
Chris@248
|
49 row = mat.newRowVector (vec.fromList (map \(Math#random()) [1..sz]));
|
Chris@248
|
50 col = mat.newColumnVector (vec.fromList (map \(Math#random()) [1..sz]));
|
Chris@248
|
51
|
Chris@248
|
52 print "R * CMD... ";
|
Chris@249
|
53 a = (time \(mat.product row cmd));
|
Chris@248
|
54
|
Chris@248
|
55 print "R * RMD... ";
|
Chris@249
|
56 b = (time \(mat.product row rmd));
|
Chris@248
|
57
|
Chris@248
|
58 print "R * CMS... ";
|
Chris@249
|
59 c = (time \(mat.product row cms));
|
Chris@248
|
60
|
Chris@248
|
61 print "R * RMS... ";
|
Chris@249
|
62 d = (time \(mat.product row rms));
|
Chris@249
|
63
|
Chris@249
|
64 println "\nChecking results: \(compareMatrices a b) \(compareMatrices c d)";
|
Chris@248
|
65
|
Chris@248
|
66 println "\nM * C multiplies:\n";
|
Chris@248
|
67
|
Chris@248
|
68 print "CMD * C... ";
|
Chris@249
|
69 a = (time \(mat.product cmd col));
|
Chris@248
|
70
|
Chris@248
|
71 print "RMD * C... ";
|
Chris@249
|
72 b = (time \(mat.product rmd col));
|
Chris@248
|
73
|
Chris@248
|
74 print "CMS * C... ";
|
Chris@249
|
75 c = (time \(mat.product cms col));
|
Chris@248
|
76
|
Chris@248
|
77 print "RMS * C... ";
|
Chris@249
|
78 d = (time \(mat.product rms col));
|
Chris@248
|
79
|
Chris@249
|
80 println "\nChecking results: \(compareMatrices a b) \(compareMatrices c d)";
|
Chris@248
|
81
|
Chris@248
|
82 println "\nM * M multiplies:\n";
|
Chris@248
|
83
|
Chris@248
|
84 sz = 500;
|
Chris@248
|
85
|
Chris@249
|
86 { cmd, rmd, cms, rms } = makeMatrices sz sparsity;
|
Chris@248
|
87
|
Chris@248
|
88 print "CMS * CMD... ";
|
Chris@248
|
89 \() (time \(mat.product cms cmd));
|
Chris@248
|
90
|
Chris@248
|
91 print "CMS * RMD... ";
|
Chris@248
|
92 \() (time \(mat.product cms rmd));
|
Chris@248
|
93
|
Chris@248
|
94 print "RMS * CMD... ";
|
Chris@248
|
95 \() (time \(mat.product rms cmd));
|
Chris@248
|
96
|
Chris@248
|
97 print "RMS * RMD... ";
|
Chris@248
|
98 \() (time \(mat.product rms rmd));
|
Chris@248
|
99
|
Chris@248
|
100 println "";
|
Chris@248
|
101
|
Chris@248
|
102 print "CMD * CMS... ";
|
Chris@248
|
103 \() (time \(mat.product cmd cms));
|
Chris@248
|
104
|
Chris@248
|
105 print "CMD * RMS... ";
|
Chris@248
|
106 \() (time \(mat.product cmd rms));
|
Chris@248
|
107
|
Chris@248
|
108 print "RMD * CMS... ";
|
Chris@248
|
109 \() (time \(mat.product rmd cms));
|
Chris@248
|
110
|
Chris@248
|
111 print "RMD * RMS... ";
|
Chris@248
|
112 \() (time \(mat.product rmd rms));
|
Chris@248
|
113
|
Chris@248
|
114 println "";
|
Chris@248
|
115
|
Chris@248
|
116 print "CMS * CMS... ";
|
Chris@248
|
117 \() (time \(mat.product cms cms));
|
Chris@248
|
118
|
Chris@248
|
119 print "CMS * RMS... ";
|
Chris@248
|
120 \() (time \(mat.product cms rms));
|
Chris@248
|
121
|
Chris@248
|
122 print "RMS * CMS... ";
|
Chris@248
|
123 \() (time \(mat.product rms cms));
|
Chris@248
|
124
|
Chris@248
|
125 print "RMS * RMS... ";
|
Chris@248
|
126 \() (time \(mat.product rms rms));
|
Chris@248
|
127
|
Chris@249
|
128 println "";
|
Chris@249
|
129
|
Chris@249
|
130 print "CMD * CMD... ";
|
Chris@249
|
131 \() (time \(mat.product cmd cmd));
|
Chris@249
|
132
|
Chris@249
|
133 print "CMD * RMD... ";
|
Chris@249
|
134 \() (time \(mat.product cmd rmd));
|
Chris@249
|
135
|
Chris@249
|
136 print "RMD * CMD... ";
|
Chris@249
|
137 \() (time \(mat.product rmd cmd));
|
Chris@249
|
138
|
Chris@249
|
139 print "RMD * RMD... ";
|
Chris@249
|
140 \() (time \(mat.product rmd rmd));
|
Chris@249
|
141
|
Chris@248
|
142 ();
|