From ff5cc9cf5dbd1052f71c6c00bd055b465dd46572 Mon Sep 17 00:00:00 2001 From: aaronsms Date: Wed, 18 Aug 2021 01:15:43 +0800 Subject: [PATCH] Add benchmark script --- raster/r.patch/benchmark/benchmark_r_patch.py | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 raster/r.patch/benchmark/benchmark_r_patch.py diff --git a/raster/r.patch/benchmark/benchmark_r_patch.py b/raster/r.patch/benchmark/benchmark_r_patch.py new file mode 100644 index 00000000000..c3504242fe1 --- /dev/null +++ b/raster/r.patch/benchmark/benchmark_r_patch.py @@ -0,0 +1,81 @@ +"""Benchmarking of r.patch + +@author Aaron Saw Min Sern +""" + +from grass.pygrass.modules import Module +from subprocess import DEVNULL + +import grass.benchmark as bm + + +def main(): + results = [] + + # Users can add more or modify existing reference maps + benchmark(7071, "r.patch_50M", results) + benchmark(14142, "r.patch_200M", results) + benchmark(10000, "r.patch_100M", results) + benchmark(20000, "r.patch_400M", results) + + bm.nprocs_plot(results) + + +def benchmark(size, label, results): + references = ["r_patch_reference_map_{}".format(i) for i in range(4)] + output = "benchmark_r_patch" + + generate_map(rows=size, cols=size, fname=references) + module = Module( + "r.patch", + input=references, + output=output, + run_=False, + stdout_=DEVNULL, + overwrite=True, + ) + results.append(bm.benchmark_nprocs(module, label=label, max_nprocs=16, repeat=3)) + for r in references: + Module("g.remove", quiet=True, flags="f", type="raster", name=r) + Module("g.remove", quiet=True, flags="f", type="raster", name=output) + + +def generate_map(rows, cols, fname): + temp = "r_patch_reference_tmp" + + Module("g.region", flags="p", s=0, n=rows, w=0, e=cols, res=1) + # Generate using r.random.surface if r.surf.fractal fails + try: + print("Generating reference map using r.surf.fractal...") + for r in fname: + Module( + "r.surf.fractal", + output=temp, + overwrite=True, + ) + # Make approximate half of the reference map to be null + Module( + "r.mapcalc", + expression=f"{r} = if({temp}, {temp}, 0, null())", + overwrite=True, + ) + except: + print("r.surf.fractal fails, using r.random.surface instead...") + for r in fname: + Module( + "r.random.surface", + maximum=255, + output=temp, + overwrite=True, + ) + Module( + "r.mapcalc", + expression=f"{r} = if({temp} - 128, {temp}, 0, null())", + overwrite=True, + ) + + Module("g.remove", quiet=True, flags="f", type="raster", name=temp) + + +if __name__ == "__main__": + main()