/*--------------------------------------------------------------------------*/ /* Ox Benchmark program version 5.0 from Stefan Steinhaus */ /* EMAIL : stefan@steinhaus-net.de */ /* */ /* This program is public domain. Feel free to copy it freely. */ /* */ /*--------------------------------------------------------------------------*/ #include main() { decl runs = 3; /* number of repeats */ decl i, k,j,time, a, b, c, x,y,secs,phi,datmat,header; decl LimitsArea, YearData, MinYear, MaxYear, MeanYear, GainLossYear; print("\n\n\n"); print("!!! Ox - Benchmark program !!!\n"); print("==============================\n\n\n"); print("Displaying the avg. timings over ",runs," runs.\n\n"); print("Function / timing result (sec.)\n"); print("--------------------------------------------------------------------------------\n"); format("%8.3f"); /* IO operation */ /* Test of Extraction of submatrices and calculation of descriptive stats */ /* Doing the whole process 2000 times do get higher timings */ LimitsArea={0,260,521,783,1044,1304,1564,1826,2087,2348,2609,2870,3130,3157}; for (i = secs = 0; i < runs; ++i) { time = timer(); decl file = fopen("Currency2.txt", "rb"); fscan(file, "%z", &header); fscan(file, "%#m", 3159, 38, &datmat); fclose(file); for (k=0; k<2000; ++k) { for (j=0;j<13; ++j) { YearData=datmat[LimitsArea[j]:LimitsArea[j+1]-1][4:37]; MinYear=minc(YearData); MaxYear=maxc(YearData); MeanYear=meanc(YearData); GainLossYear=100-(YearData[0][]+0.00000001)./(YearData[rows(YearData)-1][]+0.00000001)*100; } } secs += (timer() - time) / 100; } secs /= runs; print("IO test & descriptive statistics____________________________: ", secs, "\n"); /* Misc. operation */ x=0;y=0;a=1; for (i = secs = 0; i < runs; ++i) { time = timer(); for (x = 0; x < 15000; ++x) { for (y = 0; y < 15000; ++y) { a = a+x+y; } } secs += (timer() - time) / 100; } secs /= runs; delete a; delete b; print("Loop test___________________________________________________: ", secs, "\n"); for (i = secs = 0; i < runs; ++i) { for (j = 0; j < 200; ++j) { b=1+fabs(ranu(2000,2000)/100); time = timer(); a = b .^ 1000; secs += (timer() - time) / 100; } } secs /= runs; delete a; delete b; print("2000x2000 random matrix .^ 1000_____________________________: ", secs, "\n"); for (i = secs = 0; i < runs; ++i) { for (j = 0; j < 100; ++j) { a = ranu(1,1000000); time = timer(); b = sortr(a); secs += (timer() - time) / 100; } } secs /= runs; delete a; delete b; print("Sorting of 1,000,000 random values__________________________: ", secs, "\n"); /* Analysis */ for (i = secs = 0; i < runs; ++i) { for (j = 0; j < 100; ++j) { a = ranu(1, 1048576); time = timer(); b = fft(a); secs += (timer() - time) / 100; } } secs /= runs; delete a; delete b; print("FFT over 1,048,576 random values____________________________: ", secs, "\n"); /* Algebra */ for (i = secs = 0; i < runs; i++) { for (j = 0; j < 100; j++) { a = ranu(1500,1500)/10; time = timer(); b = determinant(a); secs += (timer() - time) / 100; } } secs /= runs; delete a; delete b; print("Determinant of a 1500x1500 random matrix____________________: ", secs, "\n"); for (i = secs = 0; i < runs; ++i) { for (j = 0; j < 100; ++j) { a = ranu(1500,1500); time = timer(); b = invert(a); secs += (timer() - time) / 100; } } secs /= runs; delete a; delete b; print("Inverse of a 1500x1500 random matrix________________________: ", secs, "\n"); for (i = secs = 0; i < runs; ++i) { a = ranu(1200,1200); time = timer(); eigen(a, &b); secs += (timer() - time) / 100; } secs /= runs; delete a; delete b; print("Eigenvalues of a 1200x1200 random matrix____________________: ", secs, "\n"); for (i = secs = 0; i < runs; ++i) { for (j = 0; j < 100; ++j) { a = ranu(1500,1500); a = a'a; time = timer(); b = choleski(a); secs += (timer() - time) / 100; } } secs /= runs; delete a; delete b; print("Choleski decomposition of a 1500x1500 random matrix_________: ", secs, "\n"); for (i = secs = 0; i < runs; ++i) { for (j = 0; j < 100; ++j) { a = ranu(1500,1500); time = timer(); b = a'a; secs += (timer() - time) / 100; } } secs /= runs; delete a; delete b; print("Creation of 1500x1500 cross-product matrix__________________: ", secs, "\n"); /* Number theory */ phi = 1.6180339887498949; for (i = secs = 0; i < runs; i++) { a = floor(1000*ranu(10000000,1)); time = timer(); b = (phi^a-(-phi)^(-a))/sqrt(5); secs += (timer() - time) / 100; } secs /= runs; delete a; delete b; print("Calculation of 10000000 fibonacci numbers___________________: ",secs, "\n"); /* Stochastic-statistic */ // n! = Gamma(n + 1) for (i = secs = 0; i < runs; ++i) { for (j = 0; j < 100; ++j) { b=ranu(1500,1500); time = timer(); a = gammafact(b); secs += (timer() - time) / 100; } } secs /= runs; delete a; delete b; print("Gamma function on a 1500x1500 random matrix_________________: ", secs, "\n"); for (i = secs = 0; i < runs; ++i) { for (j = 0; j < 100; ++j) { a = ranu(1500,1500); time = timer(); b = erf(a); secs += (timer() - time) / 100; } } secs /= runs; delete a; delete b; print("Gaussian error function over a 1500x1500 random matrix______: ", secs, "\n"); for (i = secs = 0; i < runs; ++i) { for (j = 0; j < 100; ++j) { a = ranu(1000,1000); b = range(1,1000); c = 0; time = timer(); ols2r(b, a, &c); secs += (timer() - time) / 100; } } secs /= runs; delete a; delete b; print("Linear regression over a 1000x1000 random matrix____________: ", secs, "\n"); }