Fix nonreg test bug_614 (mexlib), update ref (windows), create ref (linux)
[scilab.git] / tests / Benchmarks / benchmark.sce
1 //###########################################################################
2 // Benchmarks 
3 //
4 //
5 // Auteur : Pierre MARECHAL
6 // Date : 03 Fev 2005
7 //
8 //###########################################################################
9
10 cd SCI;
11 lines(0);
12
13 stacksize(30000000)
14 runs = 3;                       // Number of times the tests are executed
15 times = zeros(5,3);
16
17
18 u=file('open','benchmark.ini','new');
19 write(u,'[Benchmark]');
20 write(u,'');
21
22 disp(' Scilab Benchmark 2')
23 disp('==================')
24 disp('Number of times each test is run__________________________: ' + string(runs))
25 disp(' ')
26
27 //###########################################################################
28 disp('   I. Matrix calculation')
29 disp('   ---------------------')
30 //###########################################################################
31
32
33 //***************************************************************************
34 // (1)
35 //***************************************************************************
36
37 cumulate = 0; a = 0; b = 0;
38 for i = 1:runs
39   timer();
40     a = abs(rand(1500, 1500, 'n')/10);
41     b = a';
42     a = matrix(b, 750, 3000);
43     b = a';
44   timing = timer();
45   cumulate = cumulate + timing;
46 end;
47 timing = cumulate/runs;
48 times(1, 1) = timing;
49
50 write(u,'test1 = ' + string(timing));
51
52 disp('Creation, transp., deformation of a 1500x1500 matrix (sec): ' + string(timing));
53 clear('a'); clear('b');
54
55
56 //***************************************************************************
57 // (2)
58 //***************************************************************************
59
60 cumulate = 0; b = 0;
61 for i = 1:runs
62   a = abs(rand(800, 800, 'n')/2);
63   timer(); 
64     b = a.^1000; 
65   timing = timer();
66   cumulate = cumulate + timing;
67 end
68 timing = cumulate/runs;
69 times(2, 1) = timing;
70
71 write(u,'test2 = ' + string(timing));
72
73 disp('800x800 normal distributed random matrix ^1000______ (sec): ' + string(timing))
74 clear('a'); clear('b');
75
76
77 //***************************************************************************
78 // (3)
79 //***************************************************************************
80
81 cumulate = 0; b = 0;
82 for i = 1:runs
83   a = rand(2000000, 1, 'n');
84   timer();
85     b = -sort(-a);
86   timing = timer();
87   cumulate = cumulate + timing;
88 end
89 timing = cumulate/runs;
90 times(3, 1) = timing;
91
92 write(u,'test3 = ' + string(timing));
93
94 disp('Sorting of 2,000,000 random values__________________ (sec): ' + string(timing))
95 clear('a'); clear('b'); 
96
97
98 //***************************************************************************
99 // (4)
100 //***************************************************************************
101
102 cumulate = 0; b = 0;
103 for i = 1:runs
104   a = rand(700, 700, 'n');
105   timer();
106     b = a'*a;
107   timing = timer();
108   cumulate = cumulate + timing;
109 end
110 timing = cumulate/runs;
111 times(4, 1) = timing;
112
113 write(u,'test4 = ' + string(timing));
114
115 disp('700x700 cross-product matrix (b = a'' * a)___________ (sec): ' + string(timing))
116 clear('a'); clear('b');
117
118
119 //***************************************************************************
120 // (5)
121 //***************************************************************************
122
123 cumulate = 0; c = 0;
124 for i = 1:runs
125   a = rand(600, 600, 'n');
126   b = 1:600;
127   timer();
128     c = a\b';
129   timing = timer();
130   cumulate = cumulate + timing;
131 end
132 timing = cumulate/runs;
133 times(5, 1) = timing;
134
135 write(u,'test5 = ' + string(timing));
136
137 disp('Linear regression over a 600x600 matrix (c = a \ b'') (sec): ' + string(timing))
138 clear('a'); clear('b'); clear('c');
139
140 //***************************************************************************
141 // Moyenne
142 //***************************************************************************
143
144 times = sort(times, 'r');
145 disp('                --------------------------------------------------')
146 disp('                Trimmed geom. mean (2 extremes eliminated): ' +  string(exp(mean(log(times(2:4,1))))))
147 disp(' ')
148
149 write(u,'');
150 write(u,'mean1 = ' + string(exp(mean(log(times(2:4,1))))));
151 write(u,'');
152
153
154 //###########################################################################
155 disp('   II. Matrix functions')
156 disp('   --------------------')
157 //###########################################################################
158
159 //***************************************************************************
160 // (1)
161 //***************************************************************************
162
163 cumulate = 0; b = 0;
164 for i = 1:runs
165   a = rand(800000, 1, 'n');
166   timer();
167     b = fft(a, -1);
168   timing = timer();
169   cumulate = cumulate + timing;
170 end
171 timing = cumulate/runs;
172 times(1, 2) = timing;
173
174 write(u,'test6 = ' + string(timing));
175
176 disp('FFT over 800,000 random values______________________ (sec): ' +  string(timing))
177 clear('a'); clear('b');
178
179 //***************************************************************************
180 // (2)
181 //***************************************************************************
182
183 cumulate = 0; b = 0;
184 for i = 1:runs
185   a = rand(320, 320, 'n');
186   timer();
187     b = spec(a);
188   timing = timer();
189   cumulate = cumulate + timing;
190 end
191 timing = cumulate/runs;
192 times(2, 2) = timing;
193
194 write(u,'test7 = ' + string(timing));
195
196 disp('Eigenvalues of a 320x320 random matrix______________ (sec): ' + string(timing))
197 clear('a'); clear('b');
198
199 //***************************************************************************
200 // (3)
201 //***************************************************************************
202
203 cumulate = 0; b = 0;
204 for i = 1:runs
205   a = rand(650, 650, 'n');
206   timer();
207     b = det(a);
208   timing = timer();
209   cumulate = cumulate + timing;
210 end
211 timing = cumulate/runs;
212 times(3, 2) = timing;
213
214 write(u,'test8 = ' + string(timing));
215
216 disp('Determinant of a 650x650 random matrix______________ (sec): ' +  string(timing))
217 clear('a'); clear('b');
218
219 //***************************************************************************
220 // (4)
221 //***************************************************************************
222
223 cumulate = 0; b = 0;
224 for i = 1:runs
225   a = rand(900, 900, 'n');
226   a = a'*a;
227   timer();
228     b = chol(a);
229   timing = timer();
230   cumulate = cumulate + timing;
231 end
232 timing = cumulate/runs;
233 times(4, 2) = timing;
234
235 write(u,'test9 = ' + string(timing));
236
237 disp('Cholesky decomposition of a 900x900 matrix__________ (sec): ' + string(timing))
238 clear('a'); clear('b');
239
240 //***************************************************************************
241 // (5)
242 //***************************************************************************
243
244 cumulate = 0; b = 0;
245 for i = 1:runs
246   a = rand(400, 400, 'n');
247   timer();
248     b = inv(a);
249   timing = timer();
250   cumulate = cumulate + timing;
251 end
252 timing = cumulate/runs;
253 times(5, 2) = timing;
254
255 write(u,'test10 = ' + string(timing));
256
257 disp('Inverse of a 400x400 random matrix__________________ (sec): ' + string(timing))
258 clear('a'); clear('b');
259
260
261 //***************************************************************************
262 // Moyenne
263 //***************************************************************************
264
265 times = sort(times, 'r');
266 disp('                --------------------------------------------------')
267 disp('                Trimmed geom. mean (2 extremes eliminated): ' +  string(exp(mean(log(times(2:4,2))))))
268 disp(' ')
269
270 write(u,'');
271 write(u,'mean2 = ' + string(exp(mean(log(times(2:4,2))))));
272 write(u,'');
273
274
275 //###########################################################################
276 disp('   III. Programmation')
277 disp('   ------------------')
278 //###########################################################################
279
280
281 //***************************************************************************
282 // (1)
283 //***************************************************************************
284
285 cumulate = 0; a = 0; b = 0; phi = 1.6180339887498949;
286 for i = 1:runs
287   a = floor(1000 * rand(750000, 1, 'u'));
288   timer();        
289     b = (phi.^a - (-phi).^(-a)) / sqrt(5);
290   timing = timer();
291   cumulate = cumulate + timing;
292 end
293 timing = cumulate/runs;
294 times(1, 3) = timing;
295
296 write(u,'test11 = ' + string(timing));
297
298 disp('750,000 Fibonacci numbers calculation (vector calc)_ (sec): ' + string(timing))
299 clear('a'); clear('b'); clear('phi');
300
301
302 //***************************************************************************
303 // (2)
304 //***************************************************************************
305
306 cumulate = 0; a = 2250; b = 0;
307 for i = 1:runs
308   timer();
309     b = ones(a, a)./((1:a)' * ones(1, a) + ones(a, 1) * (0:(a-1)));    
310   timing = timer();
311   cumulate = cumulate + timing;
312 end
313 timing = cumulate/runs;
314 times(2, 3) = timing;
315
316 write(u,'test12 = ' + string(timing));
317
318 disp('Creation of a 2250x2250 Hilbert matrix (matrix calc) (sec): ' + string(timing))
319 clear('a'); clear('b');
320
321
322 //***************************************************************************
323 // (3)
324 //***************************************************************************
325
326 cumulate = 0; c = 0;
327 deff('[c]=gcd2(a, b)',['if b <= 1.0E-4'; 'c = a;'; 'else'; 'b(b == 0) = a(b == 0);'; 'c = gcd2(b, modulo(a, b));'; 'end'])
328 for i = 1:runs
329   a = ceil(1000 * rand(70000, 1, 'u'));
330   b = ceil(1000 * rand(70000, 1, 'u'));
331   timer();        
332   c = gcd2(a, b);                            // gcd2 is a recursive function
333   timing = timer();
334   cumulate = cumulate + timing;
335 end
336 timing = cumulate/runs;
337 times(3, 3) = timing;
338
339 write(u,'test13 = ' + string(timing));
340
341 disp('Grand common divisors of 70,000 pairs (recursion)___ (sec): ' +  string(timing))
342 clear('a'); clear('b'); clear('c');
343
344
345 //***************************************************************************
346 // (4)
347 //***************************************************************************
348
349 cumulate = 0; b = 0;
350 for i = 1:runs
351   b = zeros(220, 220);
352   timer();
353     for j = 1:220
354       for k = 1:220
355         b(k,j) = abs(j - k) + 1;
356       end
357     end
358   timing = timer();
359   cumulate = cumulate + timing;
360 end
361 timing = cumulate/runs;
362 times(4, 3) = timing;
363
364 write(u,'test14 = ' + string(timing));
365
366 disp('Creation of a 220x220 Toeplitz matrix (loops)_______ (sec): ' + string(timing))
367 clear('b'); clear('j'); clear('k');
368
369
370 //***************************************************************************
371 // (5)
372 //***************************************************************************
373
374 cumulate = 0; p = 0; q = 0; vt = 0; vr = 0; vrt = 0; rvt = 0; RV = 0; j = 0; k = 0;
375 x2 = 0; R = 0; Rxx = 0; Ryy = 0; Rxy = 0; Ryx = 0; Rvmax = 0; f = 0;, c= 0; d = 0;
376 for i = 1:runs
377   x = abs(rand(37, 37, 'n'));
378   timer();
379     // Calculation of Escoufier's equivalent vectors
380     p = size(x, 2);
381     vt = [1:p];                                // Variables to test
382     vr = [];                                   // Result: ordered variables
383     RV = [1:p];                                // Result: correlations
384     for j = 1:p                                // loop on the variable number
385       Rvmax = 0;
386       for k = 1:(p-j+1)                        // loop on the variables
387         x2 = [x, x(:, vr), x(:, vt(k))];       // New table to test
388         // R = corrcoef(x2);                   // Correlations table
389         // Not in scilab, so the 5 following lines do it
390         q = size(x2, 1);
391         x2 = x2 - ones (q, 1) * sum (x2, 'r') / q;
392         c = conj(x2' * x2 / (q - 1));
393         d=diag(c);
394         R = c ./ sqrt(d * d');
395         Ryy = R(1:p, 1:p);
396         Rxx = R(p+1:p+j, p+1:p+j);
397         Rxy = R(p+1:p+j, 1:p);
398         Ryx = Rxy';
399         rvt = trace(Ryx*Rxy)/((trace(Ryy^2)*trace(Rxx^2))^0.5); // RV calculation
400         if rvt > Rvmax
401           Rvmax = rvt;                         // test of RV
402           vrt(j) = vt(k);                      // temporary held variable
403         end
404       end
405       vr(j) = vrt(j);                          // Result: variable
406       RV(j) = Rvmax;                           // Result: correlation
407       f = find(vt~=vr(j));                     // identify the held variable
408       vt = vt(f);                              // reidentify variables to test
409     end
410   timing = timer();
411   cumulate = cumulate + timing;
412 end
413 times(5, 3) = timing;
414
415 write(u,'test15 = ' + string(timing));
416
417 disp('Escoufier''s method on a 37x37 matrix (mixed)________ (sec): ' + string(timing))
418 clear('x'); clear('p'); clear('q'); clear('vt'); clear('vr'); clear('vrt'); clear('rvt'); clear('RV'); clear('j'); clear('k');
419 clear('x2'); clear('R'); clear('Rxx'); clear('Ryy'); clear('Rxy'); clear('Ryx'); clear('Rvmax'); clear('f'); clear('c'); clear('d'); 
420
421
422 //***************************************************************************
423 // Moyenne
424 //***************************************************************************
425
426 times = sort(times, 'r');
427 disp('                --------------------------------------------------')
428 disp('                Trimmed geom. mean (2 extremes eliminated): ' +  string(exp(mean(log(times(2:4,3))))))
429 disp(' ')
430
431 write(u,'');
432 write(u,'mean3 = ' + string(exp(mean(log(times(2:4,3))))));
433 write(u,'');
434
435 //###########################################################################
436 //###########################################################################
437
438 disp(' ')
439 disp('Total time for all 15 tests_________________________ (sec): ' + string(sum(times)))
440 disp('Overall mean (sum of I, II and III trimmed means/3)_ (sec): ' + string(exp(mean(log(times(2:4,:))))))
441 disp('                      --- End of test ---')
442
443 write(u,'');
444 write(u,'total = ' + string(sum(times)));
445 write(u,'mean4 = ' + string(exp(mean(log(times(2:4,:))))));
446 file('close',u);
447
448 clear('cumulate'); clear('timing'); clear('times'); clear('runs'); clear('i');
449
450 exit