C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Computing Fibonacci numbers as a performance testsuite

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++)
View previous topic :: View next topic  
Author Message
Alex Vinokur
Guest





PostPosted: Wed Oct 29, 2003 12:07 pm    Post subject: Computing Fibonacci numbers as a performance testsuite Reply with quote



An algorithm which computes very long Fibonacci numbers
http://groups.google.com/groups?selm=bnni5p%2412i47o%241%40ID-79865.news.uni-berlin.de
was used as a performance testsuite
to compare speed of the code produced by various compilers.


===========================================================
Windows 2000 Professional Ver 5.0 Build 2195 Service Pack 2
Intel(R) Celeron(R) CPU 1.70 GHz
GNU time 1.7 (to get the real time used)
===========================================================


A. Real and processor time used to compute Fibonacci[10000] and Fibonacci[25000].

Here are summary results.

Quote:
=========================================================
| Opt | Fib-10000 | Fib-25000 |
Compiler | Lev |-------------|-------------|
| | Real : CPU | Real : CPU |
========================================================|
GNU gcc compiler |
--------------------------------------------------------|
g++ 3.3.1 (Cygwin) | No | 0.45 : 0.41 | 1.86 : 1.81 |
| O1 | 0.28 : 0.24 | 1.03 : 0.99 |
| O2 | 0.27 : 0.23 | 1.02 : 0.98 |
| O3 | 0.27 : 0.24 | 1.02 : 0.98 |
| | : | : |
g++ 3.3.1 (Cygwin) | No | 0.33 : 0.30 | 1.59 : 1.56 |
Mingw32 interface | O1 | 0.20 : 0.16 | 0.87 : 0.84 |
| O2 | 0.19 : 0.16 | 0.85 : 0.82 |
| O3 | 0.19 : 0.16 | 0.85 : 0.82 |
| | : | : |
gpp 3.2.1 (DJGPP) | No | 0.37 : 0.24 | 1.99 : 1.92 |
| O1 | 0.20 : 0.11 | 1.15 : 1.05 |
| O2 | 0.19 : 0.11 | 1.08 : 0.99 |
| O3 | 0.19 : 0.11 | 1.08 : 0.99 |
| | : | : |
--------------------------------------------------------|
Digital Mars C/C++ Compiler, STLport 4.5.3 |
--------------------------------------------------------|
Version 8.35n | - | 0.20 : 0.16 | 0.84 : 0.80 |
| | : | : |
Version 8.36.4n | - | 0.20 : 0.16 | 0.84 : 0.80 |
=========================================================



B. The names of DLL files on which the programs depend :

* g++ 3.3.1 (Cygwin)
------------------
C:cygwinbincygwin1.dll
C:WINNTSystem32KERNEL32.dll
C:WINNTSystem32NTDLL.DLL


* g++ 3.3.1 (Cygwin, Mingw32 interface)
-------------------------------------
C:WINNTSystem32msvcrt.dll
C:WINNTSystem32KERNEL32.dll
C:WINNTSystem32NTDLL.DLL


* gpp 3.2.1 (DJGPP)
-----------------
Unknown


* Digital Mars C/C++ 8.35n
------------------------
C:WINNTSystem32KERNEL32.DLL
C:WINNTSystem32NTDLL.DLL
C:WINNTSystem32USER32.DLL
C:WINNTSystem32GDI32.DLL



C. Notes.
Note-1. The main() program in
http://groups.google.com/groups?selm=bnni5p%2412i47o%241%40ID-79865.news.uni-berlin.de
was slightly changed to get the processor time used.

// ------ Updated main() : BEGIN ------
#include <time.h> // Added
int main (int argc, char **argv)
{
const string option (check (argc, argv));
if (option.empty())
{
usage (argv);
return 1;
}

const uint N = atoi (argv[2]);

const clock_t clock_start = clock(); // Added
assert (clock_start != clock_t (-1)); // Added

if (option == ALL_FIBS)
{
Fibonacci fib(N);
fib.show_all_numbers();
}

if (option == TH_FIB)
{
Fibonacci fib(N);
fib.show_last_number();
}

if (option == SOME_FIBS)
{
Fibonacci fib;
for (int i = 2; i < argc; i++) fib.show_number (atoi(argv[i]));
}

if (option == RAND_FIBS)
{
const int max_rand_fib = (argc == 3) ? MAX_RAND_FIB : atoi (argv[3]);
Fibonacci fib;
for (uint i = 0; i < N; i++) fib.show_number (rand()%max_rand_fib);
}

// ------ Added : BEGIN ------
const clock_t clock_end = clock();
assert (clock_end != clock_t (-1));

cerr << "CPU time used : " << (double (clock_end - clock_start)/CLOCKS_PER_SEC) << " sec" << endl;
// ------ Added : END --------

return 0;
}
// ------ Updated main() : END --------



Note-2. To get the real time used the time() utility was used.



D. Comment.
It seems that there is some inconsistency between real-time and CPU-time
while computing Fibonacci [10000] through the DJGPP gpp compiler :
CPU-time is too small with regard to real-time.
Probably that might be caused by too small CLOCKS_PER_SEC value (91).
Note. In Cygwin, MinGW, Digital Mars : CLOCKS_PER_SEC = 1000.



--
=====================================
Alex Vinokur
mailto:alexvn (AT) connect (DOT) to
http://mathforum.org/library/view/10978.html
news://news.gmane.org/gmane.comp.lang.c++.perfometer
=====================================









Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.