|  
                 
                
              
                What is This Thing Called "SPECviewperf®"? 
                 
             
              SPECviewperf® is a portable OpenGL performance benchmark 
                program written in C. It was developed by IBM. Later updates and 
                significant contributions were made by SGI, Digital (Compaq, HP), 
                3Dlabs (Creative Labs) and other SPECopcSM project group members. SPECviewperf provides 
                a vast amount of flexibility in benchmarking OpenGL performance. 
                Currently, the program runs on most implementations of UNIX, Windows 
                XP, Windows 2000, and Linux.  
              The OpenGL Performance Characterization (SPECopc) project group 
                endorsed SPECviewperf as its first OpenGL benchmark. Performance 
                numbers based on SPECviewperf were first published in the Q4 1994 
                issue of The GPC Quarterly.  
              SPECopc group member companies have ported the SPECviewperf code 
                to their operating systems and window environments. The SPECopc 
                project group maintains a single source code version of the SPECviewperf 
                code that is available to the public.  
              Benchmarking with SPECviewperf 
              SPECviewperf parses command lines and data files, 
                sets the rendering state, and converts data sets to a format that 
                can be traversed using OpenGL rendering calls. It renders the 
                data set for a pre-specified amount of time or number of frames 
                with animation between frames. Finally, it outputs the results. 
               
              SPECviewperf reports performance in frames per second. Other 
                information about the system under test -- all the rendering states, 
                the time to build display lists (if applicable), and the data 
                set used -- are also output in a standardized report.  
              A "benchmark" using SPECviewperf is really a single 
                invocation of SPECviewperf with command-line options telling the 
                SPECviewperf program which data set to read in, which texture 
                file to use, what OpenGL primitive to use to render the data set, 
                which attributes to apply and how frequently, whether or not to 
                use display lists, and so on. One quickly realizes that there 
                are an infinite number of SPECviewperf "benchmarks" 
                (an infinite number of data sets multiplied by an almost infinite 
                number of command-line states).  
              Real-World Benchmarking 
              SPECopc project group members recognize the importance 
                of real-world benchmarks. From the beginning, the group has sought 
                benchmarks representative of the OpenGL rendering portion of independent 
                software vendor (ISV) applications. Along these lines, the project 
                group has come up with what it calls a viewset. A viewset 
                is a group of individual runs of SPECviewperf that attempt to 
                characterize the graphics rendering portion of an ISV's application. 
               
              Viewsets differ from SPECapc benchmarks in that they exercise 
                only the graphics functionality of the application. This enables 
                direct performance comparisons of graphics hardware. Since SPECviewperf 
                does not require an application software license to run, it is 
                accessible to a wider range of users than SPECapc benchmarks. 
                It is also easier to use and runs faster than SPECapc benchmarks. 
              Viewsets are generally not developed by the SPECopc project group; 
                they come from the ISVs themselves. Members of the SPECopc project 
                group often "sponsor" the ISV. Sponsorship entails helping 
                the ISV in several areas, including how to obtain the SPECviewperf 
                code, how to convert data sets to a SPECviewperf format, how to 
                use SPECviewperf, how to create SPECviewperf tests to characterize 
                the application, how to determine weights for each of the individual 
                SPECviewperf tests based on application usage, and finally to 
                help offer the viewset to the SPECopc project group for consideration 
                as a standard SPECopc viewset. Any ISV wishing to develop a viewset 
                should contact gpcopc-info@spec.org. 
              Currently, there are six standard SPECopc application viewsets: 
               
              
                - 3dsmax-02, based on SPECapc for 3ds max 3.1 configured 
                  with the Open GL driver, includes three models containing an 
                  average of 1.5 million vertices each, and tests performance 
                  of scenes with different levels of lighting. 
 
                - dx-08, based on IBM's Data Explorer application, has 
                  10 different tests. 
 
                - drv-09, based on Intergraph's DesignReview model review 
                  package, has five different tests. 
 
                - light-06, based on Discreet's Lightscape radiosity 
                  application, has four tests. 
 
                - proe-02, based on SPECapc for Pro/ENGINEER 2001, measures 
                  two models in three modes - shaded, wireframe and hidden-line 
                  removal (HLR). 
 
                - ugs-03, based on SPECapc for Unigraphics V17, tests 
                  performance based on an engine model containing 2.1 million 
                  vertices. 
 
               
              These type of applications typically render large 
                data sets. All six viewsets represent relatively high-end applications. 
               
              The input to SPECviewperf is the command line. Here are the command 
                line options for SPECviewperf 7.1:  
              Program options:  
               | 
          
        
        SPECviewperf v7.1
         
        Program options:
        -polygon -pg   <file>                 : Viewpoint object to be used in the tests
        -triangle -tr  <file>                 : Viewpoint object to be used in the tests
        -quad -qd      <file>                 : Viewpoint object to be used in the tests
        -mesh -mh      <file>                 : Mesh object to be used in the tests
        -frameattr -fa <file>                 : Mesh3 attributes for each frame
        -rendermode -rm <mode>                : POINT, VECTOR, LINE, POLYGON, TMESH, TFAN,
                                                TRIANGLE, or QUAD - default LINE
        -vcriteria -vcrit                     : AUX Visual selection criteria - EXACT, MIN
                                                - default MIN
        -vid <id>                             : Ask AUX for visual with ID = <id>
        -vaccum -vac                          : Ask AUX for an accumulation buffer visual
        -valpha -val                          : Ask AUX for an alpha buffer visual
        -vdepthbuffer -vz                     : Ask AUX for a depth buffer visual
        -vstencil -vst                        : Ask AUX for a stencil buffer visual
        -indirectrender -ir                   : Render indirect - default direct
        -nodither -ndi                        : Disable dithering
        -ortho -or                            : Parallel/Orthographic projection - default Perspective
        -displaylist -dl                      : Render with display list mode
        -vertexarray -va                      : Render with vertex array mode (OpenGL1.1)
        -interleaved -il                      : Packing vertex data interleaved in memory
        -colorper -cp  <mode>                 : FRAME = Color per Frame,
                                                PRIMITIVE = Color per Primitive,
                                                VERTEX = Color per Vertex - default FRAME
        -texture -tx   <file>                 : Image for texturing
        -texgen -txg <file> <mode>            : <file> is image for enviroment mapping
                                                <mode> is SPHERE_MAP, OBJECT_LINEAR, EYE_LINEAR
                                                - default EYE_LINEAR
        -texobj -txo <file>                    : Texture object mode <file> is list of images
        -magfilter -magf <flt>                 : NEAREST, LINEAR - default NEAREST
        -minfilter -minf <flt>                : NEAREST, LINEAR, NEAREST_MIPMAP_NEAREST,
                                                LINEAR_MIPMAP_NEAREST, NEAREST_MIPMAP_LINEAR,
                                                LINEAR_MIPMAP_LINEAR - default NEAREST
        -texenv -te <env>                     : Texture enviroment, MODULATE, DECAL, BLEND
                                                - default DECAL
        -texcomp -tc <num>                    : Texture components where <num> is 1,2,3, or 4
                                                -default 3
        -blend -bl                            : Enable Blending
        -srcblendfunc -sbf                    : ZERO, ONE, DST_COLOR, ONE_MINUS_DST_COLOR, SRC_ALPHA,
                                                ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA,
                                                SRC_ALPHA_SATURATE - default SRC_ALPHA
        -dstblendfunc -dbf                    : ZERO, ONE, SRC_COLOR, ONE_MINUS_SRC_COLOR, SRC_ALPHA,
                                                ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA,
                                                - default ONE_MINUS_SRC_ALPHA
        -linewidth -lw <width>                : Linewidth for wire/vector tests - default 1.0
        -xwinsize -xws <side>                 : Size of test windows X dimension - default 700
        -ywinsize -yws <side>                 : Size of test windows Y dimension - default 700
        -numframes -nf <num>                  : Number of frames to be rendered during measurement
                                                Takes priority over -mp
        -numilights -nil <num>                : Turns on <num> infinite lights - default 0
        -numllights -nll <num>                : Turns on <num> local lights - default 0
        -colormaterial -cm <side> <mode>      : <side> is FRONT, BACK, FRONT_AND_BACK 
                                                - default FRONT
                                                <mode> is AMBIENT, DIFFUSE, EMISSION, SPECULAR,
                                                AMBIENT_AND_DIFFUSE 
                                                - default AMBIENT_AND_DIFFUSE
        -backface -bf                         : Cull Backfacing primitives - default off
        -frontface -ff                        : Cull Frontfacing primitives - default off
        -singlebuffer -sb                     : Single buffer mode
        -fog -fg                              : Enable fog
        -linesmooth -ls                       : Enable line antialiasing
        -polysmooth -ps                       : Enable polygon antialiasing
        -facetnormal -fn                      : Use facet normals when lighting
        -linestipple -lp                      : Enable line stipple
        -polystipple -pp                       : Enable polygon stipple
        -batch -bt <num>                      : Batch <num> primitives together per glBegin/glEnd
                                               Valid with POINT, VECTOR, TRIANGLE, and QUADS
        -polymodefront -pmf                   : POINT, LINE, or FILL - default FILL
        -polymodeback  -pmb                   : POINT, LINE, or FILL - default FILL
        -flat -f                              : Set shademodel to FLAT - default GOURAUD
        -zbuffer -zb                          : Enable zbuffer for tests - default off
        -clip -c                              : Align object on 3D clip boundary
        -lighttwoside -l2s                    : Light both sides of model
        -localview -lv                        : Define local viewer for lit tests
        -normalize -nm                        : Enable normal normalization
        -minperiod -mp <num>                  : Set minimum testing period in seconds
        -mblur <num>                          : Use motion blur with num being amount of decay
        -aa_multi <x> <r>                     : Full scene antialiasing rendered x times at an
                                                offset of r.  r should be tuned to the viewset
        -walkthru -wt                          : Walkthru mode
        -geomrepeat -gr                        : Geometry repeat
        -grab <script>                        : Screen capture
        -grabonly -go                         : Don't run benchmark, just do screen capture
        -swap <true/false>                    : Force byte swapping
        -notitle -nt                          : Disable title screen
        -startframe -sf <num>                 : Set starting frame of a walkthru
        -framepause -fp                       : Pause after each frame waiting for enter key
        -newview -nv                          : Enable new view frustum calculation
        -fov <angle>                          : Set field of view in degrees
        -spin x y z dx dy dz                  : Set rotation initial values and speeds (degrees)
        -clipplane                            : Enables a user clip plane
        -nomaterial                           : Disables material changes if present
        -nolight                               : Disables viewperf lighting
        -forcecalibrate                       : Forces viewperf calibration
        -tracelights -tl                      : Use lights generated in scene
        -norejection                          : Turns off trivial rejection for walk through.
        -noframecounter                       : Turn off display of frame counter 
        -staticFrameCount -sfc <num>          : Count of frames between data edits (default = 10)
        -staticBlockCount -sbc <num>          : Number of memory blocks changed per edit (default = 3)
        -staticEditSize   -ses <num>          : Amount of frame data changed per edit (default = 0.001)
        -staticEditsVisible -sev              : Attempt to make edits visible in the frame during execution.
        -staticEditsDisabled                  : Allow all data to be static, no frame edits for entire test.
         
        
           
            |  
              
               The -threads option is applicable 
                only if SPECviewperf has been compiled with the C Preprocessor 
                variable MP defined. SPECviewperf should only be compiled this 
                way if the vendor supplied makefile has defined the MP flag (-DMP). 
               
              Here is an example of the command line from test 
                #1 of the proe-02 viewset:  
                viewperf -mh WorldCar6 -fa gradient -tracelights -va -zb -mp 
                12 -forcecalibrate -xws 960 -yws 960 -grab grab.scr 
              This command line is providing the following directions: 
               
              
                
                  - invoke the SPECviewperf program 
                  
 
                  - -mh specifies the format 
                    of the data set is mesh format (binary) 
 
                  - the data set file name is WorldCar6.mh3 
                  
 
                  - -fa specifies some attributes 
                    to be processed per-frame (binary)
 
                  - the attributes are stored in 
                    gradient.mha
 
                  - -tracelights specifies 
                    that the lights contained in the command stream should be 
                    used 
 
                  - -va directs SPECviewperf 
                    to render using vertex arrays 
 
                  - -zb enables z-buffering 
                  
 
                  - -mp 12 will set the minimum 
                    period to 12 seconds; SPECviewperf will run this test for 
                    at least 12 seconds
 
                  - -forcecalibrate forces 
                    SPECviewperf to calibrate before running the test. This allows 
                    the frame rate to be determined so that sufficient frames 
                    are processed during the test for the defined test period.
 
                  - -xws 960 -yws 960 this 
                    specifies the X and Y dimensions of the SPECviewperf window 
                    to be 960x960 pixels. 
 
                  - -grab grab.scr directs 
                    SPECviewperf to capture a section of the screen after completing 
                    the performance test.
 
                 
               
              Upon entering the command line, the system under 
                test will run the benchmark for at least 12 seconds. This is to 
                insure a valid test result. During the test, the SPECviewperf 
                code renders the data set, WorldCar6.mh3, which is the 
                WorldCar model used in the SPECapc for Pro/ENGINEER 2001, 
                rotating it about the center of the window with the above specified 
                characteristics.  
              What follows is the output of SPECviewperf 7.1 running 
                the first test from proe-02:  
               | 
          
        
        -------------------- 
        Viewset: ProEngineer 
        Test Number 01: WorldCar6 : Weight 13.50 
        -------------------- 
            Viewperf Version                                   7.1
            Viewperf Arguments                                 -mh WorldCar6 -fa gradient -tracelights -va -zb -mp 12 -forcecalibrate -xws 960 -yws 960 -grab grab.scr 
            Month                                              3
            Day                                                4
            Year                                               2003
            Host                                               system HOSTNAME
            Operating System                                   Microsoft Windows NT
            Operating System Version                           Version 5.1 (Build 2600: Service Pack 1)
            Host Vendor                                        unknown
            Host Model                                         AT/AT COMPATIBLE
            Host CPU                                           x86 Family 15 Model 2 Stepping 7
            Host CPU Count                                     unknown
            Host Memory Size (MB)                              1023
            Host Primary Cache Size (KB)                       unknown
            Host Secondary Cache Size (KB)                     unknown
            Window System                                      Win32
            Driver Version                                     Version of GFX driver
            OpenGL Vendor                                      Name of company making GFX card
            OpenGL Version                                     Version of OpenGL supported by GFX card
            OpenGL Extensions                                  List of all supported OpenGL Client extensions
            OpenGL Renderer                                    Name of GFX card
            OpenGL Client Vendor                               GFX Card OpenGL client vendor string
            OpenGL Client Version                              Version of OpenGL client supported by GFX card
            OpenGL Client Extensions                           List of all supported OpenGLClient extensions
            GLU Version                                        1.2.2.0 Microsoft Corporation
            GLU Extensions                                     List of all supported GLU extensions
            Direct Rendering                                   False
            Double Buffer                                      True
            Stereo                                             False
            RGBA                                               True
            Color Index Size                                   -1
            Red Size                                           8
            Green Size                                         8
            Blue Size                                          8
            Alpha Size                                         0
            Accum Red Size                                     16
            Accum Green Size                                   16
            Accum Blue Size                                    16
            Accum Alpha Size                                   16
            Depth Size                                         24
            Stencil Size                                       0
            Auxiliary Buffer Count                             0
            Frame BufferLevel                                  0
            Window Width (pixels)                              960
            Window Height (pixels)                             960
            Screen Width (pixels)                              1280
            Screen Height (pixels)                             1024
            Pixel Format ID                                    4
            Visual Selection Criteria                          MINIMUM
            Number of Execution Threads                        1
            Geometry File                                      WorldCar6
            Input Mode                                         -mh 
            Minimum Test Period                                12.000000
            Number of Frames                                   0
            Number of Primitives                               319413
            Number of Vertices per Frame                       3917495
            Number of Vertices per Primitive                   12.264670
            Estimated bytes per frame                          0.000000
            Static frame count                                 0.000000
            Model edited every                                 10 frames
            Amount model changed                               0.001000
            Toggle Mode                                        NONE
            Batching Count                                     0
            Render Mode                                        LINE
            Color per                                          COLOR_PER_FRAME
            Orthographic Projection                            FALSE
            Display List                                       FALSE
            Vertex Array (OpenGL1.1)                           TRUE
            Interleaved Data                                   FALSE
            Clip Geometry                                      FALSE
            Walkthrough Mode                                   FALSE
            Geom Repeat Mode                                   FALSE
            Back Face Cull                                     FALSE
            Front Face Cull                                    FALSE
            Front Polygon Mode                                 FILL
            Back Polygon Mode                                  FILL
            Polygon Stipple Enable                             FALSE
            Polygon Antialiasing Enable                        FALSE
            Line Width                                         1.000000
            Line Stipple Enable                                FALSE
            Line Antialiasing Enable                           FALSE
            Number of Infinite Lights                          0
            Number of Local Lights                             0
            Color Material Enable                              FALSE
            Color Material Face                                FRONT
            Color Material Mode                                AMBIENT_AND_DIFFUSE
            Facet Normals                                      FALSE
            Two Sided Lighting Enable                          FALSE
            Local Viewer Enable                                FALSE
            Flat Shading                                       FALSE
            Fog Enable                                         FALSE
            Normal Normalization                               FALSE
            User Clip Plane                                    FALSE
            Material Changes Disabled                          FALSE
            Attribue Changes Disabled                          FALSE
            Trace Lights Enabled                               TRUE
            Texture Enable                                     FALSE
            TexObj Enable                                      FALSE
            Texture Generation Mode                            NO_TEXTURE_GENERATION
            Texture File                                       NONE
            Texture Minification Filter                        NEAREST
            Texture Magnification Filter                       NEAREST
            Texture Environment Mode                           DECAL
            Texture Components                                 3
            Depth Test Enable                                  TRUE
            Blend Enable                                       FALSE
            Source Blend Function                              SRC_ALPHA
            Destination Blend Function                         ONE_MINUS_SRC_ALPHA
            Dithering Enable                                   TRUE
            Motion Blur Amount                                 0.000000
            Full Scene Antialiasing Redraws                    0
            Full Scene Antialiasing Jitter Amount              0.000000
         
                       Number of frames run: 280, Test period: 12.187000 (sec)
            23.0       frames/sec     --      -mh WorldCar6 -rm LINE -mp 12 -cp FRAME -ir -va -zb -tracelights -vz
        
         
          
            
          
          
        
           
            |  
              
               During the calibration period SPECviewperf tests to see how many 
                frames need to be rendered to meet the minimum time period and 
                then runs the test.  
              The last line is the number of frames per second, which is the 
                fundamental metric for each test. This is the result that is printed 
                in the summary and individual report pages within the GPC News 
                SPECopc section. Also printed in the summary and individual report 
                pages is a single composite number for each viewset. This composite 
                number is derived using a weighted geometric mean methodology 
                (essentially the product of the results of each test raised to 
                the power of the test weightings).  
              SPECviewperf 7.1 
              SPECviewperf 7.1 introduces new data changes 
                to discourage optimizations that benefit the benchmark, but might 
                not improve real-world application performance. SPECviewperf 
                7.1 inserts a small amount of variation at regular intervals within 
                its viewsets.
				 This ensures that the test system examines 
                and processes each frame individually and is more aligned with 
                the behavior of real-world applications. A second frame counter 
                that moves around within the frame has also been added to the 
                benchmark. This provides visual verification of whether 
                frame changes are being rendered. For more information, please 
                read the documentation provided with the SPECviewperf source code. 
              Rob Putney / Simon Green / Chris Watts / Bill 
                Licea-Kane / Allen Jensen / Ian 
                Williams 
               |