Skip to content
  • Lionel Landwerlin's avatar
    i965: perf: reduce i965 binary size · 035cc7a1
    Lionel Landwerlin authored
    
    
    Performance metric numbers are calculated the following way :
    
       - out of the 256 bytes long OA reports, we accumulate the deltas
         into an array of uint64_t
    
       - the equations' generated code reads the accumulated uint64_t
         deltas and normalizes them for a particular platform
    
    Our hardware is such that a number of counters in the OA reports
    always return the same values (i.e. they're not programmable), and
    they return the same values even across generations, and as a result a
    number of equations are identical in different metric sets across
    different generations.
    
    Up to now we've kept the generated code of the equations separated in
    different files (per generation/GT), and didn't apply any
    factorization of the common equations. We could have make some
    improvement by reusing equations within a given metrics file, but we
    can go even further and reuse across generations (i.e. all files).
    
    This change changes the code generation to emit a single file in which
    we reuse equations emitted code based on the hash of equations'
    strings.
    
    Here are the savings in a meson build :
    
    Before(.old)/after :
       $ du -h ./build/src/mesa/drivers/dri/libmesa_dri_drivers.so ./build/src/mesa/drivers/dri/libmesa_dri_drivers.so.old
       43M	./build/src/mesa/drivers/dri/libmesa_dri_drivers.so
       47M	./build/src/mesa/drivers/dri/libmesa_dri_drivers.so.old
    
       $ size build/src/mesa/drivers/dri/libmesa_dri_drivers.so build/src/mesa/drivers/dri/libmesa_dri_drivers.so.old
           text   data          bss	     dec            hex filename
       13054002 409424	 671856	14135282	 d7aff2	build/src/mesa/drivers/dri/libmesa_dri_drivers.so
       14550386 409552	 671856	15631794	 ee85b2	build/src/mesa/drivers/dri/libmesa_dri_drivers.so.old
    
    As a side comment here is the size of the drivers if we remove all of
    the metrics from the build :
    
       $ du -sh build/src/mesa/drivers/dri/libmesa_dri_drivers.so
       40M	build/src/mesa/drivers/dri/libmesa_dri_drivers.so
    
    v2: Fix an issue with hashing of counter equations (Lionel)
        Build system rework (Emil)
    
    Signed-off-by: default avatarLionel Landwerlin <lionel.g.landwerlin@intel.com>
    Reviewed-by: Emil Velikov <emil.velikov@collabora.com> (build system part)
    Reviewed-by: Kenneth Graunke's avatarKenneth Graunke <kenneth@whitecape.org>
    035cc7a1