Difference between revisions of "Example fbench"
Line 1: | Line 1: | ||
− | {{todo| | + | {{todo|FinalDraft(12.03.13-14:18->JG+);(12.04.13-03:15->MD-);(12.04.13-13:56->JG+);(12.10.13-00:10->MD+);(01.03.13-18:41->MW+)|Jgreene|project=oe 4,oe 5,jg,md,FinalDraft}} |
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. | ||
Revision as of 18:42, 3 January 2014
This is a guide to the fbench
C example project included in the EMAC OE SDK.
The project contains a floating point benchmark which tests the accuracy and speed of floating point operations on the target systems. The testing application utilizes floating point intensive ray tracing and Fast Fourier Transform algorithms to stress the processor. This project contains excerpts 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 without the user interface.
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.
Contents
Opening, Building and Uploading the Project Files
1. Open the C/C++ editing perspective.
stub
2. Open the project files.
stub
3. Build the project.
stub
4. Upload the 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.
Usage Example
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
has finished it prompts the user 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 the floating point operations.
A Note on Suspicious Systems
The default functionality as described above is for systems that can be trusted to be reliable. When working with a system that is suspected of having issues, fbench
can be compiled with ACCURACY
defined. This will generate a version that executes as an infinite loop, performs the ray trace and checks the results on every pass. All incorrect results will be reported. It will keep running until it is stopped manually (using, for instance, 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.
It runs until it is finished and reports what it discovered. In this case it performed 20 passes (the default, specified in code) and found no errors.
The time that it takes for this benchmark to run is an indicator of the performance of the board running it. When running it from a Bash shell, the execution time can be measured thusly:
time ./fbench
Summary
The fbench
floating point benchmark C example tests the speed and accuracy of your floating point operations, and is interactive by default. The ffbench
example, on the other hand, is non-interactive by default and can be readily used both for benchmarking a board's floating point performance and to test the accuracy of its FPU.