[Mesa-dev] [PATCH 7/7] intel/compiler: Release memory used by NIR metadata before generating machine code

Ian Romanick idr at freedesktop.org
Wed Nov 21 19:12:09 UTC 2018


On 11/21/2018 11:08 AM, Jason Ekstrand wrote:
> On Tue, Nov 20, 2018 at 6:40 PM Ian Romanick <idr at freedesktop.org
> <mailto:idr at freedesktop.org>> wrote:
> 
>     From: Ian Romanick <ian.d.romanick at intel.com
>     <mailto:ian.d.romanick at intel.com>>
> 
>     Changes in peak memory usage according to Valgrind massif:
> 
>     mean soft fp64 using uint64:   1,342,766,051 => 1,010,677,195
>     gfxbench5 aztec ruins high 11:    62,369,974 =>    62,369,974
>     deus ex mankind divided 148:      62,290,717 =>    62,290,717
>     deus ex mankind divided 2890:     72,105,042 =>    71,930,254
>     dirt showdown 676:                72,243,383 =>    72,243,383
>     dolphin ubershaders 210:          80,650,936 =>    80,650,936
> 
>     Signed-off-by: Ian Romanick <ian.d.romanick at intel.com
>     <mailto:ian.d.romanick at intel.com>>
>     ---
>      src/intel/compiler/brw_fs.cpp   | 6 ++++++
>      src/intel/compiler/brw_vec4.cpp | 6 ++++++
>      2 files changed, 12 insertions(+)
> 
>     diff --git a/src/intel/compiler/brw_fs.cpp
>     b/src/intel/compiler/brw_fs.cpp
>     index 3e083723471..e0e6b34d41a 100644
>     --- a/src/intel/compiler/brw_fs.cpp
>     +++ b/src/intel/compiler/brw_fs.cpp
>     @@ -7170,6 +7170,12 @@ brw_compile_fs(const struct brw_compiler
>     *compiler, void *log_data,
>         prog_data->barycentric_interp_modes =
>            brw_compute_barycentric_interp_modes(compiler->devinfo, shader);
> 
>     +   /* Release memory used by NIR metadata.  It is not needed any
>     longer. */
>     +   nir_foreach_function(function, shader) {
>     +      if (function->impl)
>     +         nir_live_ssa_defs_impl_flush(function->impl);
>     +   }
>     +
>         cfg_t *simd8_cfg = NULL, *simd16_cfg = NULL, *simd32_cfg = NULL;
> 
>         fs_visitor v8(compiler, log_data, mem_ctx, key,
>     diff --git a/src/intel/compiler/brw_vec4.cpp
>     b/src/intel/compiler/brw_vec4.cpp
>     index 74a4d09fc79..3401d999a15 100644
>     --- a/src/intel/compiler/brw_vec4.cpp
>     +++ b/src/intel/compiler/brw_vec4.cpp
>     @@ -2947,6 +2947,12 @@ brw_compile_vs(const struct brw_compiler
>     *compiler, void *log_data,
>            brw_print_vue_map(stderr, &prog_data->base.vue_map);
>         }
> 
>     +   /* Release memory used by NIR metadata.  It is not needed any
>     longer. */
>     +   nir_foreach_function(function, shader) {
>     +      if (function->impl)
>     +         nir_live_ssa_defs_impl_flush(function->impl);
>     +   }
> 
> 
> I just had a look at this and it looks like nir_sweep will also clean up
> the metadata.  Maybe we should just add a nir_sweep() call to the end of
> brw_postprocess_nir()?  That would clean up other artifacts of
> stage-specific lowering as well and putting it in brw_postprocess_nir()
> would make it apply to all stages.

That is interesting.  I did not know about nir_sweep.  There were some
other bits on metadata, but, since I wasn't sure that none of it was
used during code generation, I decided to err on the conservative side.
I'll give this a try.

>     +
>         if (is_scalar) {
>            prog_data->base.dispatch_mode = DISPATCH_MODE_SIMD8;
> 
>     -- 
>     2.14.4
> 
>     _______________________________________________
>     mesa-dev mailing list
>     mesa-dev at lists.freedesktop.org <mailto:mesa-dev at lists.freedesktop.org>
>     https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 



More information about the mesa-dev mailing list