123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- """Benchmarking of r.slope aspect
- @author Aaron Saw Min Sern
- @author Anna Petrasova
- """
- from grass.exceptions import CalledModuleError
- from grass.pygrass.modules import Module
- from subprocess import DEVNULL
- import grass.benchmark as bm
- def main():
- results = []
- reference = "r_slope_aspect_reference_map"
- generate_map(rows=10000, cols=10000, fname=reference)
- # Users can add more or modify existing reference maps
- benchmark(0, "r.slope.aspect_0MB", results, reference)
- benchmark(5, "r.slope.aspect_5MB", results, reference)
- benchmark(10, "r.slope.aspect_10MB", results, reference)
- benchmark(100, "r.slope.aspect_100MB", results, reference)
- benchmark(300, "r.slope.aspect_300MB", results, reference)
- Module("g.remove", quiet=True, flags="f", type="raster", name=reference)
- bm.nprocs_plot(results, filename="r_slope_aspect_benchmark_memory.svg")
- def benchmark(memory, label, results, reference):
- slope = "benchmark_slope"
- aspect = "benchmark_aspect"
- pcurv = "benchmark_pcurv"
- tcurv = "benchmark_tcurv"
- module = Module(
- "r.slope.aspect",
- elevation=reference,
- slope=slope,
- aspect=aspect,
- pcurvature=pcurv,
- tcurvature=tcurv,
- run_=False,
- stdout_=DEVNULL,
- overwrite=True,
- )
- results.append(bm.benchmark_nprocs(module, label=label, max_nprocs=20, repeat=10))
- Module("g.remove", quiet=True, flags="f", type="raster", name=slope)
- Module("g.remove", quiet=True, flags="f", type="raster", name=aspect)
- Module("g.remove", quiet=True, flags="f", type="raster", name=pcurv)
- Module("g.remove", quiet=True, flags="f", type="raster", name=tcurv)
- def generate_map(rows, cols, fname):
- 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...")
- Module("r.surf.fractal", output=fname)
- except CalledModuleError:
- print("r.surf.fractal fails, using r.random.surface instead...")
- Module("r.random.surface", output=fname)
- if __name__ == "__main__":
- main()
|