1 //###########################################################################
5 // Auteur : Pierre MARECHAL
8 //###########################################################################
14 runs = 3; // Number of times the tests are executed
18 u=file('open','benchmark.ini','new');
19 write(u,'[Benchmark]');
22 disp(' Scilab Benchmark 2')
23 disp('==================')
24 disp('Number of times each test is run__________________________: ' + string(runs))
27 //###########################################################################
28 disp(' I. Matrix calculation')
29 disp(' ---------------------')
30 //###########################################################################
33 //***************************************************************************
35 //***************************************************************************
37 cumulate = 0; a = 0; b = 0;
40 a = abs(rand(1500, 1500, 'n')/10);
42 a = matrix(b, 750, 3000);
45 cumulate = cumulate + timing;
47 timing = cumulate/runs;
50 write(u,'test1 = ' + string(timing));
52 disp('Creation, transp., deformation of a 1500x1500 matrix (sec): ' + string(timing));
53 clear('a'); clear('b');
56 //***************************************************************************
58 //***************************************************************************
62 a = abs(rand(800, 800, 'n')/2);
66 cumulate = cumulate + timing;
68 timing = cumulate/runs;
71 write(u,'test2 = ' + string(timing));
73 disp('800x800 normal distributed random matrix ^1000______ (sec): ' + string(timing))
74 clear('a'); clear('b');
77 //***************************************************************************
79 //***************************************************************************
83 a = rand(2000000, 1, 'n');
87 cumulate = cumulate + timing;
89 timing = cumulate/runs;
92 write(u,'test3 = ' + string(timing));
94 disp('Sorting of 2,000,000 random values__________________ (sec): ' + string(timing))
95 clear('a'); clear('b');
98 //***************************************************************************
100 //***************************************************************************
104 a = rand(700, 700, 'n');
108 cumulate = cumulate + timing;
110 timing = cumulate/runs;
111 times(4, 1) = timing;
113 write(u,'test4 = ' + string(timing));
115 disp('700x700 cross-product matrix (b = a'' * a)___________ (sec): ' + string(timing))
116 clear('a'); clear('b');
119 //***************************************************************************
121 //***************************************************************************
125 a = rand(600, 600, 'n');
130 cumulate = cumulate + timing;
132 timing = cumulate/runs;
133 times(5, 1) = timing;
135 write(u,'test5 = ' + string(timing));
137 disp('Linear regression over a 600x600 matrix (c = a \ b'') (sec): ' + string(timing))
138 clear('a'); clear('b'); clear('c');
140 //***************************************************************************
142 //***************************************************************************
144 times = sort(times, 'r');
145 disp(' --------------------------------------------------')
146 disp(' Trimmed geom. mean (2 extremes eliminated): ' + string(exp(mean(log(times(2:4,1))))))
150 write(u,'mean1 = ' + string(exp(mean(log(times(2:4,1))))));
154 //###########################################################################
155 disp(' II. Matrix functions')
156 disp(' --------------------')
157 //###########################################################################
159 //***************************************************************************
161 //***************************************************************************
165 a = rand(800000, 1, 'n');
169 cumulate = cumulate + timing;
171 timing = cumulate/runs;
172 times(1, 2) = timing;
174 write(u,'test6 = ' + string(timing));
176 disp('FFT over 800,000 random values______________________ (sec): ' + string(timing))
177 clear('a'); clear('b');
179 //***************************************************************************
181 //***************************************************************************
185 a = rand(320, 320, 'n');
189 cumulate = cumulate + timing;
191 timing = cumulate/runs;
192 times(2, 2) = timing;
194 write(u,'test7 = ' + string(timing));
196 disp('Eigenvalues of a 320x320 random matrix______________ (sec): ' + string(timing))
197 clear('a'); clear('b');
199 //***************************************************************************
201 //***************************************************************************
205 a = rand(650, 650, 'n');
209 cumulate = cumulate + timing;
211 timing = cumulate/runs;
212 times(3, 2) = timing;
214 write(u,'test8 = ' + string(timing));
216 disp('Determinant of a 650x650 random matrix______________ (sec): ' + string(timing))
217 clear('a'); clear('b');
219 //***************************************************************************
221 //***************************************************************************
225 a = rand(900, 900, 'n');
230 cumulate = cumulate + timing;
232 timing = cumulate/runs;
233 times(4, 2) = timing;
235 write(u,'test9 = ' + string(timing));
237 disp('Cholesky decomposition of a 900x900 matrix__________ (sec): ' + string(timing))
238 clear('a'); clear('b');
240 //***************************************************************************
242 //***************************************************************************
246 a = rand(400, 400, 'n');
250 cumulate = cumulate + timing;
252 timing = cumulate/runs;
253 times(5, 2) = timing;
255 write(u,'test10 = ' + string(timing));
257 disp('Inverse of a 400x400 random matrix__________________ (sec): ' + string(timing))
258 clear('a'); clear('b');
261 //***************************************************************************
263 //***************************************************************************
265 times = sort(times, 'r');
266 disp(' --------------------------------------------------')
267 disp(' Trimmed geom. mean (2 extremes eliminated): ' + string(exp(mean(log(times(2:4,2))))))
271 write(u,'mean2 = ' + string(exp(mean(log(times(2:4,2))))));
275 //###########################################################################
276 disp(' III. Programmation')
277 disp(' ------------------')
278 //###########################################################################
281 //***************************************************************************
283 //***************************************************************************
285 cumulate = 0; a = 0; b = 0; phi = 1.6180339887498949;
287 a = floor(1000 * rand(750000, 1, 'u'));
289 b = (phi.^a - (-phi).^(-a)) / sqrt(5);
291 cumulate = cumulate + timing;
293 timing = cumulate/runs;
294 times(1, 3) = timing;
296 write(u,'test11 = ' + string(timing));
298 disp('750,000 Fibonacci numbers calculation (vector calc)_ (sec): ' + string(timing))
299 clear('a'); clear('b'); clear('phi');
302 //***************************************************************************
304 //***************************************************************************
306 cumulate = 0; a = 2250; b = 0;
309 b = ones(a, a)./((1:a)' * ones(1, a) + ones(a, 1) * (0:(a-1)));
311 cumulate = cumulate + timing;
313 timing = cumulate/runs;
314 times(2, 3) = timing;
316 write(u,'test12 = ' + string(timing));
318 disp('Creation of a 2250x2250 Hilbert matrix (matrix calc) (sec): ' + string(timing))
319 clear('a'); clear('b');
322 //***************************************************************************
324 //***************************************************************************
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'])
329 a = ceil(1000 * rand(70000, 1, 'u'));
330 b = ceil(1000 * rand(70000, 1, 'u'));
332 c = gcd2(a, b); // gcd2 is a recursive function
334 cumulate = cumulate + timing;
336 timing = cumulate/runs;
337 times(3, 3) = timing;
339 write(u,'test13 = ' + string(timing));
341 disp('Grand common divisors of 70,000 pairs (recursion)___ (sec): ' + string(timing))
342 clear('a'); clear('b'); clear('c');
345 //***************************************************************************
347 //***************************************************************************
355 b(k,j) = abs(j - k) + 1;
359 cumulate = cumulate + timing;
361 timing = cumulate/runs;
362 times(4, 3) = timing;
364 write(u,'test14 = ' + string(timing));
366 disp('Creation of a 220x220 Toeplitz matrix (loops)_______ (sec): ' + string(timing))
367 clear('b'); clear('j'); clear('k');
370 //***************************************************************************
372 //***************************************************************************
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;
377 x = abs(rand(37, 37, 'n'));
379 // Calculation of Escoufier's equivalent vectors
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
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
391 x2 = x2 - ones (q, 1) * sum (x2, 'r') / q;
392 c = conj(x2' * x2 / (q - 1));
394 R = c ./ sqrt(d * d');
396 Rxx = R(p+1:p+j, p+1:p+j);
397 Rxy = R(p+1:p+j, 1:p);
399 rvt = trace(Ryx*Rxy)/((trace(Ryy^2)*trace(Rxx^2))^0.5); // RV calculation
401 Rvmax = rvt; // test of RV
402 vrt(j) = vt(k); // temporary held variable
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
411 cumulate = cumulate + timing;
413 times(5, 3) = timing;
415 write(u,'test15 = ' + string(timing));
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');
422 //***************************************************************************
424 //***************************************************************************
426 times = sort(times, 'r');
427 disp(' --------------------------------------------------')
428 disp(' Trimmed geom. mean (2 extremes eliminated): ' + string(exp(mean(log(times(2:4,3))))))
432 write(u,'mean3 = ' + string(exp(mean(log(times(2:4,3))))));
435 //###########################################################################
436 //###########################################################################
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 ---')
444 write(u,'total = ' + string(sum(times)));
445 write(u,'mean4 = ' + string(exp(mean(log(times(2:4,:))))));
448 clear('cumulate'); clear('timing'); clear('times'); clear('runs'); clear('i');