From 5e1974693a00b26ba876a565fbfb73df39f9c6d6 Mon Sep 17 00:00:00 2001 From: craig-warren Date: Sun, 10 Dec 2023 23:03:50 +0000 Subject: [PATCH] Manual gc --- gprMax/contexts.py | 13 ++++++++++--- gprMax/updates.py | 8 ++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/gprMax/contexts.py b/gprMax/contexts.py index c174de4c..13506713 100644 --- a/gprMax/contexts.py +++ b/gprMax/contexts.py @@ -82,10 +82,14 @@ class Context: if not config.sim_config.args.geometry_only: solver = create_solver(G) model.solve(solver) + del solver, model if not config.sim_config.args.geometry_fixed: - del solver, model, G - gc.collect() + # Manual garbage collection required to stop memory leak on GPUs + # when using pycuda + del G + + gc.collect() self.tsimend = timer() self.print_sim_time_taken() @@ -147,8 +151,11 @@ class MPIContext(Context): if not config.sim_config.args.geometry_only: solver = create_solver(G) model.solve(solver) + del solver, model - del solver, model, G + # Manual garbage collection required to stop memory leak on GPUs when + # using pycuda + del G gc.collect() def run(self): diff --git a/gprMax/updates.py b/gprMax/updates.py index b2e93698..fad7aab4 100644 --- a/gprMax/updates.py +++ b/gprMax/updates.py @@ -17,6 +17,7 @@ # along with gprMax. If not, see . import logging +import subprocess from importlib import import_module import numpy as np @@ -753,8 +754,11 @@ class CUDAUpdates: Memory (RAM) used on GPU. """ if iteration == self.grid.iterations - 1: - # Total minus free memory in current context - return self.drv.mem_get_info()[1] - self.drv.mem_get_info()[0] + mem_used = subprocess.check_output(["nvidia-smi", "--query-gpu=memory.used"], + shell=False, stderr=subprocess.STDOUT) + return mem_used + # # Total minus free memory in current context + # return self.drv.mem_get_info()[1] - self.drv.mem_get_info()[0] def calculate_solve_time(self): """Calculates solving time for model."""