Difference between revisions of "Example fbench"

From wiki.emacinc.com
Jump to: navigation, search
(Using fbench)
 
(37 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{todo|InProgress(11.14.13-09:25->JG+)|Jgreene|project=oe 4,oe 5,jg,md,InProgress}}
+
{{todo|SEOKWREV (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+);(01.03.14-18:55->MD+);(04.02.14-17:00->BS+);(04.10.14-13:45->BS+)|Jgreene|project=oe 4,oe 5,jg,md,SEOKWREV,mw,bs}}
This is a guide to the '''fbench''' C example project included in the EMAC OE SDK.
 
  
How fast is your machine? How accurate is your floating-point math library? The '''fbench''' project creates 2 executables for measuring just that: '''fbench''' and '''ffbench'''.
+
{{#seo:
 +
|title=Example fbench
 +
|titlemode=append
 +
|keywords=Floating Point Operation,Floating Benchmark,Floating Point Unit
 +
|description=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.
  
'''fbench''' is a complete optical design raytracing algorithm. It is based on the Marinchip Interactive Lens Design System written by John Walker of Fourmilab. We chopped off the ui, however, so you won't be doing any optical design with it. We just use it because it's an extremely sensitive floating-point and CPU-intensive algorithm. It's wonderful for testing your CPU to it's limits and determining if your floating-point library harbors any bugs.  Run it and regard it's output. A perusal of the source-comments will show you how your system stacks up against the competition.
+
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 <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.
  
'''ffbench''' does the same job as '''fbench''' except it does it by looping through a fast Fourier transform of a square matrix of complex numbers, reversing that transform, and then checking the results.
+
The <code>fbench</code> project builds two executables: <code>fbench</code> and <code>ffbench</code>.
  
Of course, '''fbench''' is also an example of high-performance C programming that's hard to beat.  
+
<code>fbench</code> is a trigonometry intensive floating point benchmark. It is a complete optical design raytracing algorithm without the user interface.
 +
 
 +
<code>ffbench</code> 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 ==
 
== Opening, Building and Uploading the Project Files ==
  
<big>1. Open the C/C++ editing perspective.</big>
+
For information on opening the project from within Eclipse, please see [[Importing the EMAC OE SDK Projects with Eclipse]].  Then, follow [[Using the EMAC OE SDK Projects with Eclipse]] for information on how to build, upload and execute the example.
 +
 
 +
Alternatively, the <code>Makefile</code> can be used with the <code>make</code> command from the commandline to build and upload the example.  For information on this method, please see [[Using EMAC OE SDK Example Projects]].
 +
 
 +
====EMAC SDK 5.X====
 +
 
 +
For information on opening the project from within QtCreator, please see [[Getting_Started_With_Qt_Creator#Adding_Source_Files | QtCreator: Adding Source Files]].  Then, follow [[Getting Started With Qt Creator]] for information on how to build, upload and execute the example.
 +
 
 +
Alternatively, the <code>CMakefile.txt</code> can be used with the <code>cmake</code> command from the commandline to build and upload the example. For information on this method, please see [[Getting_Started_with_the_EMAC_OE_SDK#Target_Machine_Compiling | Getting Started with the EMAC OE SDK]].
 +
 
 +
Code can be found at http://git.emacinc.com/OE/example-projects
 +
==Usage and Behavior==
 +
 
 +
===Hardware Requirements===
 +
 
 +
The <code>fbench</code> project is intended for use on C implementations that define <code>int</code> as 32 bits or longer and permit allocation and direct addressing of arrays larger than one megabyte.
 +
 
 +
===Using fbench===
 +
 
 +
The <code>fbench</code> program is executed from the console. It takes a single optional parameter.
 +
 
 +
<code>./fbench <itercount></code>
 +
 
 +
Where <itercount> specifies the number of iterations to be performed, with 1,000 being the default.<br />
 +
For archival purposes you'll want to use a value slightly higher than 1,000.
 +
 
 +
====Usage Example====
  
stub
+
<syntaxhighlight lang="text">
 +
root@som9g20:/tmp# ./fbench 2000
 +
Ready to begin John Walker's floating point accuracy
 +
and performance benchmark.  2000 iterations will be made.
  
<big>2. Open the fbench project files.</big>
 
  
stub
+
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.
  
<big>3. Build the fbench project.</big>
+
Press return to begin benchmark:
 +
</syntaxhighlight>
  
stub
+
After <code>fbench</code> has finished it prompts the user to stop the timer (by pressing return).
  
<big>4. Upload the fbench binary to the target machine.</big>
+
<syntaxhighlight lang="console">
 +
Stop the timer:
 +
</syntaxhighlight>
  
stub
+
Press return...
  
==Usage and Behavior==
+
<syntaxhighlight lang="console">
 +
No errors in results.
 +
</syntaxhighlight>
 +
 
 +
...and <code>fbench</code> reports that no errors were found in the floating point operations.
  
===Hardware Requirements===
+
====A Note on Suspicious Systems====
  
Given the appropriate compiler it should make and run for any hardware target with no problems.  
+
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, <code>fbench</code> can be compiled with <code>ACCURACY</code> 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 fbench===
+
===Using ffbench===
  
The '''fbench''' project creates 2 programs : '''fbench''' and '''ffbench'''.
+
The <code>ffbench</code> program is executed from the console. It takes no parameters.
  
'''fbench'''
+
./ffbench
  
fbench <itercount><br />
+
====Usage Example====
Where <itercount> is an optional specification for the number of iterations to be executed, 1000 being the default.<br />
 
i.e. : ./fbench 123
 
  
It runs until it is finished and then outputs the results to the terminal. '''hey mike fbench appears to have a bug or something. It's supposed to finish and output some results but it just keeps running until you tell it to "stop the timer". It also gives me a funny message at one point "Measured run time in seconds should be divided by 0". Strange. maybe the board is just slow, I dunno. You want me to track down the problem in the code?'''
+
<syntaxhighlight lang="console">
 +
root@som9g20:/tmp# ./ffbench
 +
20 passes.  No errors in results.
 +
</syntaxhighlight>
  
'''Usage for ffbench:'''
+
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.<br />
 +
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:
 +
<code>time ./fbench</code>
  
ffbench
+
==Summary==
i.e. : ./ffbench
 
  
It runs until it is finished and then outputs to the terminal whether or not errors were detected in it's results.
+
The <code>fbench</code> floating point benchmark C example tests the speed and accuracy of your floating point operations, and is interactive by default. The <code>ffbench</code> 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.

Latest revision as of 13:19, 30 November 2022

TODO: {{#todo:SEOKWREV (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+);(01.03.14-18:55->MD+);(04.02.14-17:00->BS+);(04.10.14-13:45->BS+)|Jgreene|oe 4,oe 5,jg,md,SEOKWREV,mw,bs}}

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.

Opening, Building and Uploading the Project Files

For information on opening the project from within Eclipse, please see Importing the EMAC OE SDK Projects with Eclipse. Then, follow Using the EMAC OE SDK Projects with Eclipse for information on how to build, upload and execute the example.

Alternatively, the Makefile can be used with the make command from the commandline to build and upload the example. For information on this method, please see Using EMAC OE SDK Example Projects.

EMAC SDK 5.X

For information on opening the project from within QtCreator, please see QtCreator: Adding Source Files. Then, follow Getting Started With Qt Creator for information on how to build, upload and execute the example.

Alternatively, the CMakefile.txt can be used with the cmake command from the commandline to build and upload the example. For information on this method, please see Getting Started with the EMAC OE SDK.

Code can be found at http://git.emacinc.com/OE/example-projects

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.