473,387 Members | 1,497 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,387 software developers and data experts.

Computing Fibonacci numbers as a performance testsuite

An algorithm which computes very long Fibonacci numbers
http://groups.google.com/groups?selm....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.

|================================================= ========
| | 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:\cygwin\bin\cygwin1.dll
C:\WINNT\System32\KERNEL32.dll
C:\WINNT\System32\NTDLL.DLL
* g++ 3.3.1 (Cygwin, Mingw32 interface)
-------------------------------------
C:\WINNT\System32\msvcrt.dll
C:\WINNT\System32\KERNEL32.dll
C:\WINNT\System32\NTDLL.DLL
* gpp 3.2.1 (DJGPP)
-----------------
Unknown
* Digital Mars C/C++ 8.35n
------------------------
C:\WINNT\System32\KERNEL32.DLL
C:\WINNT\System32\NTDLL.DLL
C:\WINNT\System32\USER32.DLL
C:\WINNT\System32\GDI32.DLL

C. Notes.
Note-1. The main() program in
http://groups.google.com/groups?selm....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:al****@connect.to
http://mathforum.org/library/view/10978.html
news://news.gmane.org/gmane.comp.lang.c++.perfometer
=====================================


Jul 19 '05 #1
0 2314

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

28
by: dleecurt | last post by:
Hello, I have a small problem, I am trying to write a program that will calculate the Fibonacci number series, and I have the code complete with one problem. I used a long in to store the numbers,...
0
by: Alex Vinokur | last post by:
One more improvement has been done in the "Computing very large Fibonacci numbers" algorithm. Its new version can be seen at http://groups.google.com/groups?selm=2mk62rFo1mv0U1%40uni-berlin.de ...
0
by: Alex Vinokur | last post by:
=================================== ------------- Sorting ------------- Comparative performance measurement =================================== Testsuite : Comparing Function Objects to...
5
by: Niks | last post by:
Can anybody explain me what is a "Fibonacci search"? even an URL will do. Thanks for reading.
4
by: YS Sze | last post by:
If you know the exact longitude and latitude for a specific location, would anyone think it'd make any sense to find out if this set of location numbers is really part of the Fibonacci series or...
62
by: jugaaru | last post by:
How to generate fibonacci mubers in C ?
13
by: mac | last post by:
Hi, I'm trying to write a fibonacci recursive function that will return the fibonacci string separated by comma. The problem sounds like this: ------------- Write a recursive function that...
6
by: Andrew Tatum | last post by:
I'm having some problems with the below equation. I have no problems when it comes to positives. Negatives create the problem.. C 2 1 4 However, this doesn't work:
8
by: help2008 | last post by:
Hi I have been doing this working on an assignment for the last week and have stumbled across a part which I cant get my head around. I was hoping that someone could explain what I am missing. I...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.