[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