Skip to content

Connectivity peakmem benchmarks - #1661

Open
cmdupuis3 wants to merge 19 commits into
UXARRAY:mainfrom
cmdupuis3:cmd/connectivity_peakmem
Open

cmdupuis3 wants to merge 19 commits into
UXARRAY:mainfrom
cmdupuis3:cmd/connectivity_peakmem

Conversation

@cmdupuis3

@cmdupuis3 cmdupuis3 commented Aug 8, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #1660

Overview

Two sets of memory benchmarks, tracking allocations in isolation and total peakmem usage.

ConnectivityTracemalloc results from Derecho:

Resolution edge_face edge_node face_face n_nodes_per_face node_edge node_face
480km 204k 980k 888k 24.8k 127k 747k
120km 3.05M 15.5M 14.8M 239k 1.9M 11.9M
30km 68.2M 577M 351M 5.25M 41.9M 249M
15km 273M 2.31G 1.41G 21M 168M 996M
7.5km 1.09G 5.68G 5.29G 83.9M 671M 3.98G
3.75km 4.36G timeout timeout 336M 2.68G 15.9G

(face_edge is a flat 11.4k, face_node is a flat 2.54k)

PR Checklist

General

  • An issue is created and linked
  • Added appropriate labels (if your uxarray repo permissions allow it)
  • Filled out Overview and Expected Usage (if applicable) sections

Testing & Benchmarking

  • Adequate tests are created if there is new functionality
  • Tests are not too basic (such as simply calling a function and nothing else)
  • If this PR could affect performance, ran ASV benchmarks and confirmed they show expected behavior (add a new benchmark if necessary)

Documentation

  • Docstrings have been added to all new functions
  • Docstrings have been updated with any function changes

AI Disclosure

AI Usage: Claude Opus 5

  • I take responsibility for all AI-generated content in my PR.
  • I have tested all AI-generated content in my PR.

@cmdupuis3 cmdupuis3 self-assigned this Aug 8, 2026
@cmdupuis3 cmdupuis3 added the benchmarking Related to benchmarks, memory usage, and/or time profiling label Aug 8, 2026
@cmdupuis3 cmdupuis3 added the run-benchmark Run ASV benchmark workflow label Aug 21, 2026
@github-actions

github-actions Bot commented Aug 22, 2026 •

Copy link
Copy Markdown

ASV Benchmarking

Benchmark Comparison Results

Benchmarks that have improved:

Change Before [9541713] After [d97ff54] Ratio Benchmark (Parameter)
- 346M 275M 0.79 import.Imports.track_peakmem_import_uxarray
- 346M 312M 0.9 mpas_ocean.GradientColdStartRss.track_peakmem_gradient('480km')

Benchmarks that have stayed the same:

Change Before [9541713] After [d97ff54] Ratio Benchmark (Parameter)
996±30μs 982±20μs 0.99 connectivity.Connectivity.time_edge_face('120km')
485±20μs 486±20μs 1.00 connectivity.Connectivity.time_edge_face('480km')
4.02±0.3ms 4.09±0.1ms 1.02 connectivity.Connectivity.time_edge_node('120km')
1.28±0.08ms 1.29±0.02ms 1.01 connectivity.Connectivity.time_edge_node('480km')
73.8±6μs 70.7±9μs 0.96 connectivity.Connectivity.time_face_edge('120km')
72.6±6μs 68.2±4μs 0.94 connectivity.Connectivity.time_face_edge('480km')
991±30μs 978±10μs 0.99 connectivity.Connectivity.time_face_face('120km')
416±20μs 407±10μs 0.98 connectivity.Connectivity.time_face_face('480km')
64.0±10μs 61.2±10μs 0.96 connectivity.Connectivity.time_face_node('120km')
63.4±2μs 61.7±20μs 0.97 connectivity.Connectivity.time_face_node('480km')
493±40μs 481±20μs 0.98 connectivity.Connectivity.time_n_nodes_per_face('120km')
406±20μs 418±30μs 1.03 connectivity.Connectivity.time_n_nodes_per_face('480km')
1.38±0.02ms 1.39±0.04ms 1.01 connectivity.Connectivity.time_node_edge('120km')
505±10μs 482±10μs 0.96 connectivity.Connectivity.time_node_edge('480km')
83.1±7ms 76.1±2ms 0.92 connectivity.Connectivity.time_node_face('120km')
5.15±0.01ms 5.19±0.06ms 1.01 connectivity.Connectivity.time_node_face('480km')
1.42M 1.42M 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_edge_face('120km')
106k 106k 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_edge_face('480km')
6.48M 6.48M 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_edge_node('120km')
417k 417k 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_edge_node('480km')
2.42k 2.42k 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_face_edge('120km')
2.42k 2.42k 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_face_edge('480km')
1.6M 1.6M 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_face_face('120km')
101k 101k 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_face_face('480km')
2.54k 2.54k 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_face_node('120km')
2.54k 2.54k 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_face_node('480km')
240k 240k 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_n_nodes_per_face('120km')
25.8k 25.8k 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_n_nodes_per_face('480km')
1.9M 1.9M 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_node_edge('120km')
127k 127k 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_node_edge('480km')
11.9M 11.9M 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_node_face('120km')
747k 747k 1.00 connectivity.ConnectivityTracemalloc.track_peakmem_node_face('480km')
8.40±0.08ms 8.39±0.05ms 1.00 face_bounds.FaceBounds.time_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/mpas/QU/oQU480.231010.nc'))
2.72±0.07ms 2.72±0.1ms 1.00 face_bounds.FaceBounds.time_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/scrip/outCSne8/outCSne8.nc'))
6.92±7s 10.1±10ms ~0.00 face_bounds.FaceBounds.time_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/ugrid/geoflow-small/grid.nc'))
1.52±0.02ms 1.53±0.04ms 1.01 face_bounds.FaceBounds.time_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/ugrid/quad-hexagon/grid.nc'))
57.3k 57.3k 1.00 face_bounds.FaceBounds.track_nbytes_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/mpas/QU/oQU480.231010.nc'))
12.3k 12.3k 1.00 face_bounds.FaceBounds.track_nbytes_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/scrip/outCSne8/outCSne8.nc'))
123k 123k 1.00 face_bounds.FaceBounds.track_nbytes_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/ugrid/geoflow-small/grid.nc'))
128 128 1.00 face_bounds.FaceBounds.track_nbytes_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/ugrid/quad-hexagon/grid.nc'))
1.27M 1.27M 1.00 face_bounds.FaceBounds.track_nbytes_grid_with_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/mpas/QU/oQU480.231010.nc'))
50.1k 50.1k 1.00 face_bounds.FaceBounds.track_nbytes_grid_with_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/scrip/outCSne8/outCSne8.nc'))
1.48M 1.48M 1.00 face_bounds.FaceBounds.track_nbytes_grid_with_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/ugrid/geoflow-small/grid.nc'))
712 712 1.00 face_bounds.FaceBounds.track_nbytes_grid_with_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/ugrid/quad-hexagon/grid.nc'))
1.98M 1.98M 1.00 face_bounds.FaceBounds.track_peakmem_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/mpas/QU/oQU480.231010.nc'))
1.97M 1.97M 1.00 face_bounds.FaceBounds.track_peakmem_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/scrip/outCSne8/outCSne8.nc'))
2.13M 2.13M 1.00 face_bounds.FaceBounds.track_peakmem_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/ugrid/geoflow-small/grid.nc'))
35.5k 35.5k 1.00 face_bounds.FaceBounds.track_peakmem_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/ugrid/quad-hexagon/grid.nc'))
346M 317M 0.92 face_bounds.FaceBoundsColdStartRss.track_peakmem_open_and_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/mpas/QU/oQU480.231010.nc'))
346M 318M 0.92 face_bounds.FaceBoundsColdStartRss.track_peakmem_open_and_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/scrip/outCSne8/outCSne8.nc'))
346M 319M 0.92 face_bounds.FaceBoundsColdStartRss.track_peakmem_open_and_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/ugrid/geoflow-small/grid.nc'))
346M 318M 0.92 face_bounds.FaceBoundsColdStartRss.track_peakmem_open_and_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/ugrid/quad-hexagon/grid.nc'))
1.15±0.03μs 1.17±0.04μs 1.02 geometry_kernels.AccucrossKernels.time_accucross
2.63±0.04μs 2.58±0.03μs 0.98 geometry_kernels.AccucrossKernels.time_accucross_pair
451±9ns 456±20ns 1.01 geometry_kernels.EFTPrimitives.time_acc_sqrt_re
431±20ns 416±20ns 0.97 geometry_kernels.EFTPrimitives.time_diff_of_products
390±10ns 396±20ns 1.01 geometry_kernels.EFTPrimitives.time_two_prod
386±10ns 395±20ns 1.02 geometry_kernels.EFTPrimitives.time_two_sum
702±10ns 681±10ns 0.97 geometry_kernels.GCAConstLatIntersection.time_accux_constlat_kernel
746±30ns 726±30ns 0.97 geometry_kernels.GCAConstLatIntersection.time_gca_const_lat_intersection
817±9ns 797±20ns 0.98 geometry_kernels.GCAConstLatIntersection.time_try_gca_const_lat_intersection
796±20ns 831±9ns 1.04 geometry_kernels.GCAGCAIntersection.time_accux_gca_kernel
917±20ns 921±40ns 1.00 geometry_kernels.GCAGCAIntersection.time_gca_gca_intersection
1.05±0.03μs 1.02±0.01μs 0.97 geometry_kernels.GCAGCAIntersection.time_try_gca_gca_intersection
52.3±0.8μs 52.3±1μs 1.00 geometry_kernels.OrientPredicates.time_on_minor_arc
52.3±0.4μs 52.2±1μs 1.00 geometry_kernels.OrientPredicates.time_orient3d_on_sphere
3.06±0ms 3.06±0ms 1.00 geometry_samebody.SameBodyConstLat.time_accux_dispatch
1.16±0ms 1.16±0ms 1.00 geometry_samebody.SameBodyConstLat.time_accux_kernel
2.28±0.01ms 2.29±0.01ms 1.00 geometry_samebody.SameBodyConstLat.time_fp64_dispatch
148±0.7μs 146±0.3μs 0.99 geometry_samebody.SameBodyConstLat.time_fp64_kernel
29.6±0.03ms 29.6±0.05ms 1.00 geometry_samebody_gcagca.SameBodyGcaGca.time_accux_dispatch
6.27±0.01ms 6.29±0.02ms 1.00 geometry_samebody_gcagca.SameBodyGcaGca.time_accux_kernel
23.7±0.01ms 23.5±0.03ms 0.99 geometry_samebody_gcagca.SameBodyGcaGca.time_fp64_dispatch
860±2μs 858±1μs 1.00 geometry_samebody_gcagca.SameBodyGcaGca.time_fp64_kernel
906±5ms 911±30ms 1.01 import.Imports.timeraw_import_uxarray
2.48±0.04ms 2.44±0.02ms 0.98 mpas_ocean.CheckNorm.time_check_norm('120km')
2.01±0.01ms 1.98±0.04ms 0.98 mpas_ocean.CheckNorm.time_check_norm('480km')
1.15±0.01ms 1.14±0.01ms 0.99 mpas_ocean.ConnectivityConstruction.time_face_face_connectivity('120km')
543±10μs 545±6μs 1.00 mpas_ocean.ConnectivityConstruction.time_face_face_connectivity('480km')
691±10μs 665±7μs 0.96 mpas_ocean.ConnectivityConstruction.time_n_nodes_per_face('120km')
604±10μs 586±10μs 0.97 mpas_ocean.ConnectivityConstruction.time_n_nodes_per_face('480km')
5.29±0.01ms 5.37±0.02ms 1.02 mpas_ocean.ConstructFaceLatLon.time_cartesian_averaging('120km')
3.86±0.01ms 3.80±0.08ms 0.98 mpas_ocean.ConstructFaceLatLon.time_cartesian_averaging('480km')
96.3±0.3ms 98.8±1ms 1.03 mpas_ocean.ConstructFaceLatLon.time_welzl('120km')
9.94±0.2ms 9.73±0.5ms 0.98 mpas_ocean.ConstructFaceLatLon.time_welzl('480km')
18.7±0.09ms 18.7±0.1ms 1.00 mpas_ocean.ConstructTreeStructures.time_ball_tree('120km')
980±10μs 980±8μs 1.00 mpas_ocean.ConstructTreeStructures.time_ball_tree('480km')
9.91±0.02ms 9.88±0.03ms 1.00 mpas_ocean.ConstructTreeStructures.time_kd_tree('120km')
627±20μs 611±20μs 0.98 mpas_ocean.ConstructTreeStructures.time_kd_tree('480km')
593±10ms 580±10ms 0.98 mpas_ocean.CrossSections.time_const_lat('120km', 1)
304±3ms 297±0.3ms 0.98 mpas_ocean.CrossSections.time_const_lat('120km', 2)
153±0.3ms 150±5ms 0.98 mpas_ocean.CrossSections.time_const_lat('120km', 4)
549±8ms 550±3ms 1.00 mpas_ocean.CrossSections.time_const_lat('480km', 1)
271±2ms 270±1ms 1.00 mpas_ocean.CrossSections.time_const_lat('480km', 2)
140±0.2ms 139±2ms 0.99 mpas_ocean.CrossSections.time_const_lat('480km', 4)
346M 337M 0.98 mpas_ocean.CrossSectionsPeakMem.track_peakmem_const_lat('120km', 1)
346M 337M 0.97 mpas_ocean.CrossSectionsPeakMem.track_peakmem_const_lat('120km', 2)
346M 337M 0.97 mpas_ocean.CrossSectionsPeakMem.track_peakmem_const_lat('120km', 4)
346M 320M 0.93 mpas_ocean.CrossSectionsPeakMem.track_peakmem_const_lat('480km', 1)
346M 320M 0.93 mpas_ocean.CrossSectionsPeakMem.track_peakmem_const_lat('480km', 2)
346M 320M 0.93 mpas_ocean.CrossSectionsPeakMem.track_peakmem_const_lat('480km', 4)
25.9±0.06ms 25.7±0.05ms 0.99 mpas_ocean.DualMesh.time_dual_mesh_construction('120km')
2.96±0.1ms 2.88±0.03ms 0.97 mpas_ocean.DualMesh.time_dual_mesh_construction('480km')
14.6±0.5ms 14.2±0.5ms 0.97 mpas_ocean.FaceAreas.time_face_areas('120km')
4.56±0.4ms 4.21±0.2ms 0.92 mpas_ocean.FaceAreas.time_face_areas('480km')
229k 229k 1.00 mpas_ocean.FaceAreas.track_nbytes_face_areas('120km')
14.3k 14.3k 1.00 mpas_ocean.FaceAreas.track_nbytes_face_areas('480km')
2.12M 2.12M 1.00 mpas_ocean.FaceAreas.track_peakmem_face_areas('120km')
715k 715k 1.00 mpas_ocean.FaceAreas.track_peakmem_face_areas('480km')
899±6ms 912±100ms 1.01 mpas_ocean.GeoDataFrame.time_to_geodataframe('120km', False)
49.5±0.8ms 48.7±0.8ms 0.98 mpas_ocean.GeoDataFrame.time_to_geodataframe('120km', True)
80.0±2ms 82.0±0.9ms 1.03 mpas_ocean.GeoDataFrame.time_to_geodataframe('480km', False)
4.92±0.3ms 4.96±0.1ms 1.01 mpas_ocean.GeoDataFrame.time_to_geodataframe('480km', True)
13.7±0.6ms 13.0±0.06ms 0.95 mpas_ocean.Gradient.time_gradient('120km')
1.80±0.01ms 1.78±0.02ms 0.99 mpas_ocean.Gradient.time_gradient('480km')
457k 457k 1.00 mpas_ocean.Gradient.track_nbytes_gradient('120km')
28.7k 28.7k 1.00 mpas_ocean.Gradient.track_nbytes_gradient('480km')
3.2M 3.2M 1.00 mpas_ocean.Gradient.track_peakmem_gradient('120km')
204k 204k 1.00 mpas_ocean.Gradient.track_peakmem_gradient('480km')
346M 333M 0.96 mpas_ocean.GradientColdStartRss.track_peakmem_gradient('120km')
274±10μs 280±10μs 1.02 mpas_ocean.HoleEdgeIndices.time_construct_hole_edge_indices('120km')
147±2μs 145±3μs 0.98 mpas_ocean.HoleEdgeIndices.time_construct_hole_edge_indices('480km')
206±10μs 200±7μs 0.97 mpas_ocean.Integrate.time_integrate('120km')
183±2μs 188±8μs 1.03 mpas_ocean.Integrate.time_integrate('480km')
18.4M 18.4M 1.00 mpas_ocean.Integrate.track_nbytes_integrate('120km')
1.2M 1.2M 1.00 mpas_ocean.Integrate.track_nbytes_integrate('480km')
179±0.9ms 178±2ms 0.99 mpas_ocean.MatplotlibConversion.time_dataarray_to_polycollection('120km', 'exclude')
179±2ms 180±3ms 1.01 mpas_ocean.MatplotlibConversion.time_dataarray_to_polycollection('120km', 'include')
179±1ms 178±0.9ms 0.99 mpas_ocean.MatplotlibConversion.time_dataarray_to_polycollection('120km', 'split')
13.1±0.3ms 13.0±0.2ms 0.99 mpas_ocean.MatplotlibConversion.time_dataarray_to_polycollection('480km', 'exclude')
13.1±0.2ms 13.0±0.2ms 0.99 mpas_ocean.MatplotlibConversion.time_dataarray_to_polycollection('480km', 'include')
13.0±0.2ms 13.0±0.1ms 1.00 mpas_ocean.MatplotlibConversion.time_dataarray_to_polycollection('480km', 'split')
245±0.4ms 245±1ms 1.00 mpas_ocean.NeighborhoodBuild.time_build('120km', 1.0)
1.30±0s 1.30±0s 1.00 mpas_ocean.NeighborhoodBuild.time_build('120km', 15.0)
508±0.6ms 503±2ms 0.99 mpas_ocean.NeighborhoodBuild.time_build('120km', 5.0)
13.3±0.05ms 13.4±0.09ms 1.01 mpas_ocean.NeighborhoodBuild.time_build('480km', 1.0)
25.1±0.1ms 25.4±0.03ms 1.01 mpas_ocean.NeighborhoodBuild.time_build('480km', 15.0)
16.4±0.05ms 16.4±0.02ms 1.00 mpas_ocean.NeighborhoodBuild.time_build('480km', 5.0)
242±1ms 239±0.2ms 0.99 mpas_ocean.NeighborhoodBuild.time_query_radius('120km', 1.0)
1.29±0.01s 1.28±0.01s 0.99 mpas_ocean.NeighborhoodBuild.time_query_radius('120km', 15.0)
502±2ms 499±2ms 0.99 mpas_ocean.NeighborhoodBuild.time_query_radius('120km', 5.0)
13.1±0.02ms 13.0±0.08ms 0.99 mpas_ocean.NeighborhoodBuild.time_query_radius('480km', 1.0)
24.7±0.04ms 24.7±0.2ms 1.00 mpas_ocean.NeighborhoodBuild.time_query_radius('480km', 15.0)
16.0±0.01ms 16.0±0.02ms 1.00 mpas_ocean.NeighborhoodBuild.time_query_radius('480km', 5.0)
1.19 1.19 1.00 mpas_ocean.NeighborhoodBuild.track_mean_neighbors('120km', 1.0)
612.76 612.76 1.00 mpas_ocean.NeighborhoodBuild.track_mean_neighbors('120km', 15.0)
74.17 74.17 1.00 mpas_ocean.NeighborhoodBuild.track_mean_neighbors('120km', 5.0)
1.0 1.0 1.00 mpas_ocean.NeighborhoodBuild.track_mean_neighbors('480km', 1.0)
37.29 37.29 1.00 mpas_ocean.NeighborhoodBuild.track_mean_neighbors('480km', 15.0)
6.57 6.57 1.00 mpas_ocean.NeighborhoodBuild.track_mean_neighbors('480km', 5.0)
728k 728k 1.00 mpas_ocean.NeighborhoodBuild.track_nbytes_neighbors('120km', 1.0)
141M 141M 1.00 mpas_ocean.NeighborhoodBuild.track_nbytes_neighbors('120km', 15.0)
17.4M 17.4M 1.00 mpas_ocean.NeighborhoodBuild.track_nbytes_neighbors('120km', 5.0)
43k 43k 1.00 mpas_ocean.NeighborhoodBuild.track_nbytes_neighbors('480km', 1.0)
563k 563k 1.00 mpas_ocean.NeighborhoodBuild.track_nbytes_neighbors('480km', 15.0)
123k 123k 1.00 mpas_ocean.NeighborhoodBuild.track_nbytes_neighbors('480km', 5.0)
5.72M 5.72M 1.00 mpas_ocean.NeighborhoodBuild.track_peakmem_build('120km', 1.0)
145M 145M 1.00 mpas_ocean.NeighborhoodBuild.track_peakmem_build('120km', 15.0)
21.5M 21.5M 1.00 mpas_ocean.NeighborhoodBuild.track_peakmem_build('120km', 5.0)
362k 362k 1.00 mpas_ocean.NeighborhoodBuild.track_peakmem_build('480km', 1.0)
825k 825k 1.00 mpas_ocean.NeighborhoodBuild.track_peakmem_build('480km', 15.0)
384k 384k 1.00 mpas_ocean.NeighborhoodBuild.track_peakmem_build('480km', 5.0)
40.1±1ms 39.2±0.6ms 0.98 mpas_ocean.NeighborhoodDask.time_mean('120km', 'grid_chunks')
18.1±0.05ms 18.3±0.07ms 1.01 mpas_ocean.NeighborhoodDask.time_mean('120km', 'numpy')
35.8±0.2ms 35.7±0.7ms 1.00 mpas_ocean.NeighborhoodDask.time_mean('120km', 'time_chunks')
10.8±0.2ms 10.7±0.05ms 0.99 mpas_ocean.NeighborhoodDask.time_mean('480km', 'grid_chunks')
744±10μs 751±30μs 1.01 mpas_ocean.NeighborhoodDask.time_mean('480km', 'numpy')
7.49±0.08ms 7.43±0.1ms 0.99 mpas_ocean.NeighborhoodDask.time_mean('480km', 'time_chunks')
5.83M 5.77M 0.99 mpas_ocean.NeighborhoodDask.track_peakmem_mean('120km', 'grid_chunks')
2.75M 2.75M 1.00 mpas_ocean.NeighborhoodDask.track_peakmem_mean('120km', 'numpy')
5.68M 5.68M 1.00 mpas_ocean.NeighborhoodDask.track_peakmem_mean('120km', 'time_chunks')
757k 746k 0.99 mpas_ocean.NeighborhoodDask.track_peakmem_mean('480km', 'grid_chunks')
177k 177k 1.00 mpas_ocean.NeighborhoodDask.track_peakmem_mean('480km', 'numpy')
539k 538k 1.00 mpas_ocean.NeighborhoodDask.track_peakmem_mean('480km', 'time_chunks')
12.6±0.07s 12.5±0.01s 0.99 mpas_ocean.NeighborhoodReduce.time_dataset_reduce('120km', 'mean')
13.1±0.03s 13.2±0.06s 1.01 mpas_ocean.NeighborhoodReduce.time_dataset_reduce('120km', 'median')
228±1ms 227±2ms 1.00 mpas_ocean.NeighborhoodReduce.time_dataset_reduce('480km', 'mean')
233±1ms 230±0.7ms 0.99 mpas_ocean.NeighborhoodReduce.time_dataset_reduce('480km', 'median')
1.34±0s 1.34±0.01s 1.00 mpas_ocean.NeighborhoodReduce.time_neighborhood_reduce('120km', 'mean')
1.53±0s 1.54±0.01s 1.00 mpas_ocean.NeighborhoodReduce.time_neighborhood_reduce('120km', 'median')
25.9±0.1ms 26.0±0.2ms 1.01 mpas_ocean.NeighborhoodReduce.time_neighborhood_reduce('480km', 'mean')
26.9±0.2ms 27.1±0.5ms 1.01 mpas_ocean.NeighborhoodReduce.time_neighborhood_reduce('480km', 'median')
31.0±0.1ms 31.1±0.2ms 1.00 mpas_ocean.NeighborhoodReduce.time_reduce('120km', 'mean')
229±0.8ms 228±0.9ms 1.00 mpas_ocean.NeighborhoodReduce.time_reduce('120km', 'median')
434±5μs 452±30μs 1.04 mpas_ocean.NeighborhoodReduce.time_reduce('480km', 'mean')
1.68±0.02ms 1.76±0.07ms 1.04 mpas_ocean.NeighborhoodReduce.time_reduce('480km', 'median')
239k 239k 1.00 mpas_ocean.NeighborhoodReduce.track_peakmem_reduce('120km', 'mean')
245k 245k 1.00 mpas_ocean.NeighborhoodReduce.track_peakmem_reduce('120km', 'median')
19.5k 19.5k 1.00 mpas_ocean.NeighborhoodReduce.track_peakmem_reduce('480km', 'mean')
19.9k 19.9k 1.00 mpas_ocean.NeighborhoodReduce.track_peakmem_reduce('480km', 'median')
409±10μs 405±10μs 0.99 mpas_ocean.PointInPolygon.time_face_search_lonlat('120km')
411±9μs 406±10μs 0.99 mpas_ocean.PointInPolygon.time_face_search_lonlat('480km')
381±20μs 387±10μs 1.01 mpas_ocean.PointInPolygon.time_face_search_xyz('120km')
374±9μs 390±9μs 1.04 mpas_ocean.PointInPolygon.time_face_search_xyz('480km')
132±0.9ms 130±0.7ms 0.99 mpas_ocean.RemapDownsample.time_bilinear_remapping
17.3±0.2ms 17.2±0.3ms 1.00 mpas_ocean.RemapDownsample.time_inverse_distance_weighted_remapping
15.5±0.3ms 15.7±0.1ms 1.01 mpas_ocean.RemapDownsample.time_nearest_neighbor_remapping
1.43±0.01s 1.42±0s 1.00 mpas_ocean.RemapUpsample.time_bilinear_remapping
26.3±2ms 27.0±0.4ms 1.03 mpas_ocean.RemapUpsample.time_inverse_distance_weighted_remapping
11.9±0.2ms 12.0±0.5ms 1.01 mpas_ocean.RemapUpsample.time_nearest_neighbor_remapping
8.23±0.2ms 8.38±0.1ms 1.02 mpas_ocean.ZonalAverage.time_zonal_average('120km')
5.11±0.1ms 5.14±0.06ms 1.01 mpas_ocean.ZonalAverage.time_zonal_average('480km')
346M 341M 0.99 mpas_ocean.ZonalAveragePeakMem.track_peakmem_zonal_average('120km')
346M 322M 0.93 mpas_ocean.ZonalAveragePeakMem.track_peakmem_zonal_average('480km')
1.0237594632375047 1.026974110077584 1.00 nogil_scaling.GILScaling.track_gil_scaling
7.11±0.04ms 7.60±0.4ms 1.07 quad_hexagon.QuadHexagon.time_open_dataset
6.07±0.05ms 6.16±0.1ms 1.01 quad_hexagon.QuadHexagon.time_open_grid
408 408 1.00 quad_hexagon.QuadHexagon.track_nbytes_open_dataset
392 392 1.00 quad_hexagon.QuadHexagon.track_nbytes_open_grid
73.3k 73.6k 1.00 quad_hexagon.QuadHexagon.track_peakmem_open_dataset
72.4k 72.7k 1.00 quad_hexagon.QuadHexagon.track_peakmem_open_grid

cmdupuis3 and others added 10 commits September 1, 2026 13:17
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Drop the GridBenchmark template, whose full cached_grid setup was always
overridden, and root MinimalGridBenchmark on CachedFixtures directly so
the suite only touches the parent-preloaded topology fixtures. Pin numba
threads around the tracemalloc samples, as the other suites do, since
edge_node and face_edge are built by parallel kernels.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cmdupuis3
cmdupuis3 marked this pull request as ready for review September 29, 2026 21:01
Comment thread benchmarks/connectivity.py Outdated

@dylannelson dylannelson left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Everything works as stated and seeing no concerns. Approving with a comment as it may be nice to import the connectivities from the conventions file as opposed to re defining them here. But if there's a good reason for re defining them feel free to resolve the comment and push forward. We talked about potentially changing some of the conventions file so this would allow us to change in only one place rather than multiple, but that's a bit further down the line

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

benchmarking Related to benchmarks, memory usage, and/or time profiling run-benchmark Run ASV benchmark workflow

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add connectivity peakmem benchmarks

2 participants