Benchmark
This page shows some benchmarking based on Mark Stock's RADIANCE benchmark. Since all test were run on the same machine, I created this extra page to not clutter up Mark's page too much.
The idea of this page was to show how different compiler settings and LINUX distributions affect the speed of the simulation. I was particularly interested in determining whether the move from a 32-bit to a 64-bit distribution resulted in significant improvements.
System Spec
- Processor: AMD Sempron 3100+
- L2 cache: 256 kB
- Clock speed: 1.8 GHz
- RAM: 1 GB
Except for the Gentoo distribution, the box-standard kernels were used. No attempt was made to compile a more optimised kernel. This should reflect the setup of a typical user that wants his system to 'just work'.
Bar Graph
To make a 'bigger-is-better' plot, the number of rays per second is shown, rather than the acual time taken. The fastest result is taken as 100%.
Fedora Core 4 i386 | opt | 75% | |
o3 | 63% | ||
o2 | 59% | ||
Fedora Core 5 i386 | opt | 76% | |
o3 | 65% | ||
o2 | 63% | ||
Fedora Core 6 i386 | opt | 74% | |
o3 | 64% | ||
o2 | 62% | ||
Fedora 7 i386 | opt | 75% | |
o3 | 64% | ||
o2 | 63% | ||
Gentoo 2005.1 AMD64 | opt | 79% | |
o3 | 73% | ||
o2 | 72% | ||
Fedora Core 5 x86_64 | opt | 78% | |
o3 | 77% | ||
o2 | 70% | ||
Fedora 7 x86_64 | opt | 79% | |
o3 | 80% | ||
o2 | 73% | ||
Fedora 8 x86_64 | opt | 77% | |
o3 | 81% | ||
o2 | 73% | ||
Fedora 9 x86_64 | opt | 0% | |
o3 | 79% | ||
o2 | 74% | ||
Fedora 10 x86_64 | opt | 82% | |
o3 | 79% | ||
o2 | 73% | ||
Fedora 11 x86_64 | opt | 99% | |
o3 | 98% | ||
o2 | 77% | ||
Fedora 12 x86_64 | opt | 100% | |
o3 | 97% | ||
o2 | 77% | ||
Fedora 13 x86_64 | opt | 99% | |
o3 | 98% | ||
o2 | 81% | ||
Fedora 14 x86_64 | opt | 98% | |
o3 | 98% | ||
o2 | 78% |
Tabulated Results
# | Time | OS/kernel | 32/64bit | Compiler | Compile options | Rays |
---|---|---|---|---|---|---|
1 | 5957 | Fedora Core 4 i386 linux-2.6.15 |
32bit | gcc 4.0.2 | -O3 -ffast-math -funroll-loops -march=k8 -mno-ieee-fp | 695760045 |
2 | 7141 | Fedora Core 4 i386 linux-2.6.15 |
32bit | gcc 4.0.2 | -O3 | 696104914 |
3 | 7568 | Fedora Core 4 i386 linux-2.6.15 |
32bit | gcc 4.0.2 | -O2 | 695716037 |
4 | 5896 | Fedora Core 5 i386 linux-2.6.16 |
32bit | gcc 4.1.0 | -O3 -ffast-math -funroll-loops -march=k8 -mno-ieee-fp | 695178782 |
5 | 6942 | Fedora Core 5 i386 linux-2.6.16 |
32bit | gcc 4.1.0 | -O3 | 695178782 |
6 | 7098 | Fedora Core 5 i386 linux-2.6.16 |
32bit | gcc 4.1.0 | -O2 | 695277522 |
7 | 6065 | Fedora Core 6 i386 linux-2.6.20 |
32bit | gcc 4.1.1 | -O3 -ffast-math -funroll-loops -march=k8 -mno-ieee-fp | 698372481 |
8 | 7058 | Fedora Core 6 i386 linux-2.6.20 |
32bit | gcc 4.1.1 | -O3 | 695898438 |
9 | 7233 | Fedora Core 6 i386 linux-2.6.20 |
32bit | gcc 4.1.1 | -O2 | 695763368 |
10 | 5961 | Fedora 7 i386 linux-2.6.22-4 |
32bit | gcc 4.1.2 | -O3 -ffast-math -funroll-loops -march=k8 -mno-ieee-fp | 695926154 |
11 | 7011 | Fedora 7 i386 linux-2.6.22-4 |
32bit | gcc 4.1.2 | -O3 | 695637160 |
12 | 7173 | Fedora 7 i386 linux-2.6.22-4 |
32bit | gcc 4.1.2 | -O2 | 695763368 |
13 | 5706 | Gentoo 2005.1 AMD64 linux-2.6.15 |
64bit | gcc 3.4.4 | -O3 -ffast-math -funroll-loops -march=k8 -mno-ieee-fp | 697785041 |
14 | 6159 | Gentoo 2005.1 AMD64 linux-2.6.15 |
64bit | gcc 3.4.4 | -O3 | 696849482 |
15 | 6252 | Gentoo 2005.1 AMD64 linux-2.6.15 |
64bit | gcc 3.4.4 | -O2 | 696849482 |
16 | 5782 | Fedora Core 5 x86_64 linux-2.6.16 |
64bit | gcc 4.1.0 | -O3 -ffast-math -funroll-loops -march=k8 -mno-ieee-fp | 695444172 |
17 | 5826 | Fedora Core 5 x86_64 linux-2.6.16 |
64bit | gcc 4.1.0 | -O3 | 697679551 |
18 | 6448 | Fedora Core 5 x86_64 linux-2.6.16 |
64bit | gcc 4.1.0 | -O2 | 697679551 |
19 | 5698 | Fedora 7 x86_64 linux-2.6.21 |
64bit | gcc 4.1.2 | -O3 -ffast-math -funroll-loops -march=k8 -mno-ieee-fp | 697823005 |
20 | 5615 | Fedora 7 x86_64 linux-2.6.21 |
64bit | gcc 4.1.2 | -O3 | 695866152 |
21 | 6162 | Fedora 7 x86_64 linux-2.6.21 |
64bit | gcc 4.1.2 | -O2 | 695866152 |
22 | 5851 | Fedora 8 x86_64 linux-2.6.21 |
64bit | gcc 4.1.2 | -O3 -ffast-math -funroll-loops -march=k8 -mno-ieee-fp | 695625100 |
23 | 5548 | Fedora 8 x86_64 linux-2.6.21 |
64bit | gcc 4.1.2 | -O3 | 695866152 |
24 | 6173 | Fedora 8 x86_64 linux-2.6.21 |
64bit | gcc 4.1.2 | -O2 | 695866152 |
25 | 1 | Fedora 9 x86_64 linux-2.6.26.5 |
64bit | gcc 4.3.0 | -O3 | - |
26 | 5648 | Fedora 9 x86_64 linux-2.6.26.5 |
64bit | gcc 4.3.0 | -O3 | 695361517 |
27 | 6076 | Fedora 9 x86_64 linux-2.6.26.5 |
64bit | gcc 4.3.0 | -O2 | 695361517 |
28 | 5486 | Fedora 10 x86_64 linux-2.6.27.25 |
64bit | gcc 4.3.2 | -O3 -march=native -ffast-math -funroll-loops | 694551575 |
29 | 5823 | Fedora 10 x86_64 linux-2.6.27.25 |
64bit | gcc 4.3.2 | -O3 | 708175724 |
30 | 6255 | Fedora 10 x86_64 linux-2.6.27.25 |
64bit | gcc 4.3.2 | -O2 | 708175724 |
31 | 4531 | Fedora 11 x86_64 linux-2.6.30.10 |
64bit | gcc 4.4.1 | -O3 -march=native -ffast-math -funroll-loops | 692711826 |
32 | 4644 | Fedora 11 x86_64 linux-2.6.30.10 |
64bit | gcc 4.4.1 | -O3 | 708175724 |
33 | 5942 | Fedora 11 x86_64 linux-2.6.30.10 |
64bit | gcc 4.4.1 | -O2 | 708175724 |
34 | 4473 | Fedora 12 x86_64 linux-2.6.31.9 |
64bit | gcc 4.4.2 | -O3 -march=native -ffast-math -funroll-loops | 692711826 |
35 | 4710 | Fedora 12 x86_64 linux-2.6.31.9 |
64bit | gcc 4.4.2 | -O3 | 708175724 |
36 | 5921 | Fedora 12 x86_64 linux-2.6.31.9 |
64bit | gcc 4.4.2 | -O2 | 708175724 |
37 | 4504 | Fedora 13 x86_64 linux-2.6.33.4 |
64bit | gcc 4.4.4 | -O3 -march=native -ffast-math -funroll-loops | 692711826 |
38 | 4659 | Fedora 13 x86_64 linux-2.6.33.4 |
64bit | gcc 4.4.4 | -O3 | 708175724 |
39 | 5640 | Fedora 13 x86_64 linux-2.6.33.4 |
64bit | gcc 4.4.4 | -O2 | 708175724 |
40 | 4543 | Fedora 14 x86_64 linux-2.6.35.6 |
64bit | gcc 4.5.1 | -O3 -march=native -ffast-math -funroll-loops | 692990693 |
41 | 4552 | Fedora 14 x86_64 linux-2.6.35.6 |
64bit | gcc 4.5.1 | -O3 | 690557585 |
42 | 5739 | Fedora 14 x86_64 linux-2.6.35.6 |
64bit | gcc 4.5.1 | -O2 | 690557585 |
Conclusions
Apologies for only having qualitative thoughts on the results. You may do your own maths with the results from the table above.
- The biggest speed improvement shows up when changing the RADIANCE compile options from the default -O2 to -O3. Additional processor-specific compile flags will result in even better performance on most systems. The optimum settings were taken from an AMD Opteron from Mark's page.
- 32-bit vs 64-bit: 64-bit is generally faster.
- GCC 4.1 for 64-bit already produces highly optimised code by just enabling -O3. Additional tweaking might actually reduce the speed of rendering, unless you really know what you're doing.