svPerfGL – Scientific Visualization OpenGL Graphics Benchmark

svPerfGL is an OpenGL benchmark intended to measure "real world" performance of scientific visualization applications. These applications are characterized by relatively high payload (i.e., lots of triangles) with relatively few OpenGL state changes. This application takes as input disjoint triangle payload contained in files in netCDF format, renders the frames over a user-specified time duration, rotates the entire scene by one degree per frame, then computes and reports a "triangles per second" performance metric upon exit.

Later releases of svPerfGL may contain an option to perform other types of rendering germane to scientific visualization applications, such as texture-based, hardware accelerated direct volume rendering. In contrast to the industry standard OpenGL benchmark, SPECviewperf, svPerfGL focuses on measuring OpenGL rendering performance in the presence of extremely heavy graphics payload with relatively few OpenGL state changes. This balance is more representative of the type of load incurred by scientific visualization applications.

svPerfGL is written in a combination of C and C++ and uses calls consistent with the OpenGL 1.2 specification. Therefore, it is very conservative in its use of the OpenGL API and should run on any modern platform that supports OpenGL.

Third party libraries required to build and run svPerfGL: you will need headers and runtime libraries for:

  1. The GL Utility Toolkit (GLUT), which is widely distributed and freely available for all modern platforms.
  2. The NetCDF data I/O library (see http://www.unidata.ucar.edu/software/netcdf), which is also freely available and runs on all modern platforms.

Source code for the svPerfGL application may be downloaded from https://codeforge.lbl.gov/projects/svperfgl/. This source code is distributed free of charge via a BSD-like Open Source license.

The source data files you'll need to run svPerfGL can be downloaded from ftp://ftp.nersc.gov/svPerfGL-data/. There are eight different data files: four contain disjoint isosurface triangles and surface normals, four contain disjoint isosurface triangles, surface normals, and per-vertex color data. These isosurface triangles were computed from an AMR combustion simulation dataset (courtesy J. Bell and V. Beckner, LBNL Center for Computational Sciences and Engineering) flattened to four different grid resolutions: 512x512x512, 1024x1024x1024, 2048x2048x2048, and 3072x3072x3072. These datasets contain 5.8M, 23.6M, 94.6M, and 213.1M triangles, respectively.

Source input data for svPerfGL consists of isosurface triangles derived from a methane flame simulation computed by LBNL researchers (data courtesy J. Bell and V. Beckner, LBNL Center for Computational Sciences and Engineering). Triangles are rendered using optional per-vertex colors and one- or two-sided lighting. Various command line arguments switch between retained and immediate mode rendering, use of vertex arrays, window size parameters, timing attributes and so forth. During rendering, the transformation matrix is changed by one degree per frame to effect a y-axis rotation.

This README.txt file is included with the svPerfGL distribution. It explains how to build and run the benchmark.

This svPerfGL-log.txt file contains output from a run on a dual 2.0Ghz Opteron workstation equipped with an NVIDIA Quadro FX 4500 graphics accelerator. The punch line is that when using retained mode rendering w/o vertex arrays, we get a rendering rate of about 8.6Mtris/sec, but if we use vertex arrays in immediate mode, the rendering rate leaps to about 101Mtris/sec. Compare this figure to the 181Mtris/sec listed on NVIDIA's website. The moral of the story is that to obtain an accurate estimate of the rendering rate for any graphics hardware, you need to run your application on the card – scientific visualization applications place different demands on today's graphics hardware than their primary target market: computer games.