Difference between revisions of "Example fbench"

From wiki.emacinc.com
Jump to: navigation, search
Line 2: Line 2:
 
This is a guide to the <code>fbench</code> C example project included in the EMAC OE SDK.
 
This is a guide to the <code>fbench</code> C example project included in the EMAC OE SDK.
  
Test the speed and accuracy of a machine's floating point operations. This project is a floating point benchmark and accuracy testing application that utilizes ray tracing algorithms and Fast Fourier Transforms to test your CPU and floating point library to it's limits. It's also a good example of a method of processor performance comparison and compiler optimization testing. It's an excerpt from the <code>fbench</code> project by John Walker of Fourmilab. See [http://www.fourmilab.ch/fbench/ John Walker's '''Floating Point Benchmarks''' project homepage] for more information.
+
Test the speed and accuracy of a system's floating point operations. This project is a floating point benchmark and accuracy testing application that utilizes ray tracing algorithms and Fast Fourier Transforms to test your CPU and floating point library to it's limits. It's also a good example of a method of processor performance comparison and compiler optimization testing. It's an excerpt from the <code>fbench</code> project by John Walker of Fourmilab. See [http://www.fourmilab.ch/fbench/ John Walker's '''Floating Point Benchmarks''' project homepage] for more information.
  
 
The <code>fbench</code> project builds two executables: <code>fbench</code> and <code>ffbench</code>.
 
The <code>fbench</code> project builds two executables: <code>fbench</code> and <code>ffbench</code>.
Line 24: Line 24:
 
stub
 
stub
  
<big>4. Upload the fbench and ffbench executables to the target machine.</big>
+
<big>4. Upload the fbench and ffbench executables to the target system.</big>
  
 
stub
 
stub
Line 57: Line 57:
  
 
After '''fbench''' is finished it prompts us to stop the timer (by pressing return).
 
After '''fbench''' is finished it prompts us to stop the timer (by pressing return).
'''HEY MIKE it successfully runs through all iterations of it's process (I tested it with some debug code) but should it really just hang at the end waiting for your keypress? I doubt it. Further investigation is called for.'''
 
''' NOTE: -----  looking in the code, you will find this bit:'''
 
<syntaxhighlight lang="c">
 
#ifndef ACCURACY
 
        }
 
 
        printf("Stop the timer:\007");
 
        fgets(tbfr, sizeof tbfr, stdin);
 
#endif
 
</syntaxhighlight>
 
''' NOTE: ----- As you can see above, the preprocessor define, ACCURACY, can be used to remove the wait.  You should document both ways of building it. <code>gcc</code> has an argument that can be used to set preprocessor defines without having to modify the c program.'''
 
  
 
<syntaxhighlight lang="console">
 
<syntaxhighlight lang="console">
Line 79: Line 68:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
...and '''fbench''' reports that no errors were found in our floating point operations.
+
...and <code>fbench</code> reports that no errors were found in our floating point operations.
 +
 
 +
'''A note on suspect systems.'''<br />
 +
 
 +
The default functionality of <code>fbench</code> is for systems that you can trust to be basically reliable. If you're working with a system that you suspect has issues then you can compile <code>fbench</code> with <code>ACCURACY</code> defined. This will generate a version which executes as an infinite loop, performing the ray trace and checking the results on every pass. All incorrect results will be reported. It will keep running until you stop it manually (using, say, CTRL-C).
  
 
===Using ffbench===
 
===Using ffbench===
Line 95: Line 88:
  
 
''' NOTE: -----  The important thing to note about how long it takes is that this example is included so that customers can determine the relative speed of our different boards.  The transformation is also not a "dance."'''
 
''' NOTE: -----  The important thing to note about how long it takes is that this example is included so that customers can determine the relative speed of our different boards.  The transformation is also not a "dance."'''
It runs until it is finished (30 seconds or so, depending on the speed of your machine). It performed 20 iterations of our ''Fast Fourier Transform'' dance and discovered no errors.
+
It runs until it is finished (30 seconds or so, depending on the speed of your system). It performed 20 iterations of our ''Fast Fourier Transform'' dance and discovered no errors.
  
 
==Summary==
 
==Summary==
  
 
The ''fbench'' floating point benchmark C example tests the speed and accuracy of your floating point operations. It also provides an excellent example of code addressing processor performance comparison and compiler optimization. We hope this guide was informative.
 
The ''fbench'' floating point benchmark C example tests the speed and accuracy of your floating point operations. It also provides an excellent example of code addressing processor performance comparison and compiler optimization. We hope this guide was informative.

Revision as of 13:37, 4 December 2013

TODO: {{#todo:Review(12.03.13-14:18->JG+);(12.04.13-03:15->MD-);(12.04.13-14:18->JG+)|Jgreene|oe 4,oe 5,jg,md,Buggy}}

This is a guide to the fbench C example project included in the EMAC OE SDK.

Test the speed and accuracy of a system's floating point operations. This project is a floating point benchmark and accuracy testing application that utilizes ray tracing algorithms and Fast Fourier Transforms to test your CPU and floating point library to it's limits. It's also a good example of a method of processor performance comparison and compiler optimization testing. It's an excerpt from the fbench project by John Walker of Fourmilab. See John Walker's Floating Point Benchmarks project homepage for more information.

The fbench project builds two executables: fbench and ffbench.

fbench is a trigonometry intensive floating point benchmark. It is a complete optical design raytracing algorithm, shorn of its ui.

ffbench is a Fast Fourier Transform benchmark. It loops through a fast Fourier transform of a square matrix of complex numbers, reverses the transform and then checks the results.

Opening, Building and Uploading the Project Files

1. Open the C/C++ editing perspective.

stub

2. Open the fbench project files.

stub

3. Build the fbench project.

stub

4. Upload the fbench and ffbench executables to the target system.

stub

Usage and Behavior

Hardware Requirements

The fbench project is intended for use on C implementations that define int as 32 bits or longer and permit allocation and direct addressing of arrays larger than one megabyte.

Using fbench

The fbench program is executed from the console. It takes a single optional parameter.

./fbench <itercount>

Where <itercount> specifies the number of iterations to be performed, with 1,000 being the default.
For archival purposes you'll want to use a value slightly higher than 1,000.

root@som9g20:/tmp# ./fbench 2000
Ready to begin John Walker's floating point accuracy
and performance benchmark.  2000 iterations will be made.


Measured run time in seconds should be divided by 2
to normalise for reporting results.  For archival results,
adjust iteration count so the benchmark runs about five minutes.

Press return to begin benchmark:

After fbench is finished it prompts us to stop the timer (by pressing return).

Stop the timer:

Press return...

No errors in results.

...and fbench reports that no errors were found in our floating point operations.

A note on suspect systems.

The default functionality of fbench is for systems that you can trust to be basically reliable. If you're working with a system that you suspect has issues then you can compile fbench with ACCURACY defined. This will generate a version which executes as an infinite loop, performing the ray trace and checking the results on every pass. All incorrect results will be reported. It will keep running until you stop it manually (using, say, CTRL-C).

Using ffbench

The ffbench program is executed from the console. It takes no parameters.

./ffbench

Usage Example

root@som9g20:/tmp# ./ffbench
20 passes.  No errors in results.

NOTE: ----- The important thing to note about how long it takes is that this example is included so that customers can determine the relative speed of our different boards. The transformation is also not a "dance." It runs until it is finished (30 seconds or so, depending on the speed of your system). It performed 20 iterations of our Fast Fourier Transform dance and discovered no errors.

Summary

The fbench floating point benchmark C example tests the speed and accuracy of your floating point operations. It also provides an excellent example of code addressing processor performance comparison and compiler optimization. We hope this guide was informative.