C++ Benchmark Results

Benchmark Descriptions

Our C++ benchmarks were selected because they were large, realistic, object-oriented programs.

Name Size (lines) Description
ixx, ixx-av 14,500 A translator from IDL to C++
ktsim, ktsim-av 19,200 A cache simulator developed by Ted Romer et al. at UW
porky 64,300 The scalar optimization pass of the Stanford SUIF compiler
raytrace 3,000 A raytracer benchmark

The -av versions of ixx and ktsim are the same as the non-av versions except that all methods are declared virtual, to experiment with the effectiveness of our implementation techniques on C++ written in a very extensible style.

Optimizer Configurations

Our experiments were performed by running our C++ front-end (based on EDG's C++ front-end product) to translate C/C++ input files into the Vortex intermediate language, then running Vortex to produce C code, then running gcc -O2 on the C code to produce a stand-alone executable. The following table describes the different settings of the Vortex optimizer component of this pipeline:
Name Description
unopt No Vortex optimizations (but full gcc -O2 optimizations on the generated C code)
trad-opt Vortex intraprocedural, non-message optimizations, including elimination of redundant and dead loads & stores and elimination of dead object creations
inl trad-opt plus automatic inlining (beyond any inlining performed by the C++ front-end due to inline directives)
i inl plus intraprocedural static class analysis to optimize messages
i-cha i plus class hierarchy analysis to automatically identify non-overridden methods
i-prof i plus dynamic-profile-guided class prediction
i-cha-prof i-cha plus -prof

Performance Data

[A Java applet implementing a bar chart should have appeared here.]

Raw, Detailed Data

Analysis

Both the overall impact of the optimizations and their relative effectiveness vary significantly from one application to the next. Typically, class hierarchy analysis and cross-module inlining are the most important optimizations. Profile-guided class prediction is important for some of the applications, but irrelevant for others.

As shown in the "Raw, Detailed Data" table, class hierarchy analysis makes the all-virtual (-av) versions of the benchmarks run just as fast as the regular versions of the benchmarks.

Last updated March 12, 1997.


Cecil/Vortex Project, chambers@cs.washington.edu