Skip to content

(Checking how ASV benchmarks look without any code changes) - #1710

Draft
Sevans711 wants to merge 6 commits into
mainfrom
sevans/asv-benchmarks-baseline
Draft

Sevans711 wants to merge 6 commits into
mainfrom
sevans/asv-benchmarks-baseline

Conversation

@Sevans711

Copy link
Copy Markdown
Collaborator

Not intended to be merged to main, just trying to check how ASV benchmarks look currently when the code is unchanged.

There's probably a better solution than having a draft PR for this, but this is the simplest/fastest way I could think of right now. I already attempted but struggled to generate ASV benchmark runs on my local machine with the same output format as what the run-benchmark label produces via github CI.

I originally created this with the intention of determining whether the reported benchmark performance degradation in #1705 is actually caused by the code changes there or not. Maybe this should be closed soon after that check, or maybe it should be open for a longer-term basis to repeat checks like this in the future? For example, it might have been useful to have something like this available for initially discovering #1605.

@Sevans711 Sevans711 added the run-benchmark Run ASV benchmark workflow label Aug 26, 2026
@cmdupuis3

Copy link
Copy Markdown
Collaborator

I did this too, actually. But an easier way to get the benchmarks running is to push your branch, then run ASV benchmarks directly in the Actions tab. That way you don't have to mess with a PR to get them running.

@github-actions

github-actions Bot commented Aug 26, 2026 •

Copy link
Copy Markdown

ASV Benchmarking

Benchmark Comparison Results

Benchmarks that have improved:

Change Before [9609c3a] After [78a58e3] Ratio Benchmark (Parameter)
- 355M 284M 0.8 import.Imports.track_peakmem_import_uxarray
- 355M 322M 0.91 mpas_ocean.GradientColdStartRss.track_peakmem_gradient('480km')
- 679k 602k 0.89 mpas_ocean.NeighborhoodDask.track_peakmem_mean('480km', 'grid_chunks')

Benchmarks that have stayed the same:

Change Before [9609c3a] After [78a58e3] Ratio Benchmark (Parameter)
5.33±0.1ms 5.50±0.09ms 1.03 bench_connectivity.Connectivity.time_edge_face('120km')
2.02±0.03ms 2.01±0.02ms 1.00 bench_connectivity.Connectivity.time_edge_face('480km')
4.44±0.04ms 4.50±0.2ms 1.01 bench_connectivity.Connectivity.time_edge_node('120km')
1.57±0.02ms 1.59±0.01ms 1.01 bench_connectivity.Connectivity.time_edge_node('480km')
4.57±0.08ms 4.51±0.05ms 0.99 bench_connectivity.Connectivity.time_face_edge('120km')
1.59±0.01ms 1.58±0.02ms 0.99 bench_connectivity.Connectivity.time_face_edge('480km')
6.39±0.09ms 6.13±0.03ms 0.96 bench_connectivity.Connectivity.time_face_face('120km')
2.33±0.02ms 2.35±0.02ms 1.01 bench_connectivity.Connectivity.time_face_face('480km')
53.8±1μs 53.7±0.1μs 1.00 bench_connectivity.Connectivity.time_face_node('120km')
54.1±2μs 52.4±2μs 0.97 bench_connectivity.Connectivity.time_face_node('480km')
448±20μs 430±10μs 0.96 bench_connectivity.Connectivity.time_n_nodes_per_face('120km')
364±10μs 380±20μs 1.04 bench_connectivity.Connectivity.time_n_nodes_per_face('480km')
6.27±0.2ms 5.81±0.04ms 0.93 bench_connectivity.Connectivity.time_node_edge('120km')
2.02±0.02ms 1.99±0.01ms 0.98 bench_connectivity.Connectivity.time_node_edge('480km')
88.8±2ms 84.7±3ms 0.95 bench_connectivity.Connectivity.time_node_face('120km')
5.35±0.08ms 5.20±0.09ms 0.97 bench_connectivity.Connectivity.time_node_face('480km')
8.79±0.1ms 8.76±0.3ms 1.00 face_bounds.FaceBounds.time_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/mpas/QU/oQU480.231010.nc'))
2.75±0.04ms 2.82±0.08ms 1.02 face_bounds.FaceBounds.time_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/scrip/outCSne8/outCSne8.nc'))
7.25±7s 10.3±10ms ~0.00 face_bounds.FaceBounds.time_face_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/ugrid/geoflow-small/grid.nc'))
1.58±0.06ms 1.57±0.04ms 0.99 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'))
355M 327M 0.92 face_bounds.FaceBoundsColdStartRss.track_peakmem_open_and_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/mpas/QU/oQU480.231010.nc'))
355M 327M 0.92 face_bounds.FaceBoundsColdStartRss.track_peakmem_open_and_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/scrip/outCSne8/outCSne8.nc'))
355M 328M 0.92 face_bounds.FaceBoundsColdStartRss.track_peakmem_open_and_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/ugrid/geoflow-small/grid.nc'))
355M 328M 0.92 face_bounds.FaceBoundsColdStartRss.track_peakmem_open_and_bounds(PosixPath('/home/runner/work/uxarray/uxarray/test/meshfiles/ugrid/quad-hexagon/grid.nc'))
1.20±0.06μs 1.14±0.01μs 0.95 geometry_kernels.AccucrossKernels.time_accucross
2.59±0.03μs 2.62±0.05μs 1.01 geometry_kernels.AccucrossKernels.time_accucross_pair
436±20ns 451±10ns 1.03 geometry_kernels.EFTPrimitives.time_acc_sqrt_re
421±5ns 426±10ns 1.01 geometry_kernels.EFTPrimitives.time_diff_of_products
376±10ns 371±5ns 0.99 geometry_kernels.EFTPrimitives.time_two_prod
381±20ns 376±10ns 0.99 geometry_kernels.EFTPrimitives.time_two_sum
671±40ns 672±10ns 1.00 geometry_kernels.GCAConstLatIntersection.time_accux_constlat_kernel
717±9ns 701±40ns 0.98 geometry_kernels.GCAConstLatIntersection.time_gca_const_lat_intersection
802±8ns 771±20ns 0.96 geometry_kernels.GCAConstLatIntersection.time_try_gca_const_lat_intersection
826±20ns 851±30ns 1.03 geometry_kernels.GCAGCAIntersection.time_accux_gca_kernel
907±10ns 916±10ns 1.01 geometry_kernels.GCAGCAIntersection.time_gca_gca_intersection
1.04±0.02μs 1.00±0.01μs 0.96 geometry_kernels.GCAGCAIntersection.time_try_gca_gca_intersection
52.9±1μs 50.6±0.4μs 0.96 geometry_kernels.OrientPredicates.time_on_minor_arc
53.0±0.7μs 51.0±0.5μs 0.96 geometry_kernels.OrientPredicates.time_orient3d_on_sphere
3.07±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.29±0ms 2.29±0.01ms 1.00 geometry_samebody.SameBodyConstLat.time_fp64_dispatch
147±0.1μs 148±0.8μs 1.01 geometry_samebody.SameBodyConstLat.time_fp64_kernel
29.6±0.03ms 29.6±0.03ms 1.00 geometry_samebody_gcagca.SameBodyGcaGca.time_accux_dispatch
6.34±0.01ms 6.30±0.02ms 0.99 geometry_samebody_gcagca.SameBodyGcaGca.time_accux_kernel
23.7±0.03ms 23.5±0.08ms 0.99 geometry_samebody_gcagca.SameBodyGcaGca.time_fp64_dispatch
861±3μs 885±20μs 1.03 geometry_samebody_gcagca.SameBodyGcaGca.time_fp64_kernel
986±20ms 949±20ms 0.96 import.Imports.timeraw_import_uxarray
2.53±0.02ms 2.56±0.02ms 1.01 mpas_ocean.CheckNorm.time_check_norm('120km')
2.04±0.03ms 2.04±0.02ms 1.00 mpas_ocean.CheckNorm.time_check_norm('480km')
1.20±0.03ms 1.18±0.01ms 0.98 mpas_ocean.ConnectivityConstruction.time_face_face_connectivity('120km')
561±10μs 555±8μs 0.99 mpas_ocean.ConnectivityConstruction.time_face_face_connectivity('480km')
672±5μs 686±20μs 1.02 mpas_ocean.ConnectivityConstruction.time_n_nodes_per_face('120km')
608±10μs 606±8μs 1.00 mpas_ocean.ConnectivityConstruction.time_n_nodes_per_face('480km')
5.46±0.04ms 5.34±0ms 0.98 mpas_ocean.ConstructFaceLatLon.time_cartesian_averaging('120km')
3.98±0.1ms 3.95±0.02ms 0.99 mpas_ocean.ConstructFaceLatLon.time_cartesian_averaging('480km')
97.8±0.6ms 99.7±0.1ms 1.02 mpas_ocean.ConstructFaceLatLon.time_welzl('120km')
10.3±0.2ms 10.00±0.6ms 0.97 mpas_ocean.ConstructFaceLatLon.time_welzl('480km')
19.4±0.6ms 18.8±0.04ms 0.97 mpas_ocean.ConstructTreeStructures.time_ball_tree('120km')
1.02±0.04ms 975±30μs 0.95 mpas_ocean.ConstructTreeStructures.time_ball_tree('480km')
10.2±0.1ms 9.94±0.03ms 0.98 mpas_ocean.ConstructTreeStructures.time_kd_tree('120km')
660±40μs 640±10μs 0.97 mpas_ocean.ConstructTreeStructures.time_kd_tree('480km')
622±4ms 623±9ms 1.00 mpas_ocean.CrossSections.time_const_lat('120km', 1)
321±5ms 316±4ms 0.98 mpas_ocean.CrossSections.time_const_lat('120km', 2)
159±1ms 157±1ms 0.99 mpas_ocean.CrossSections.time_const_lat('120km', 4)
579±9ms 573±6ms 0.99 mpas_ocean.CrossSections.time_const_lat('480km', 1)
283±4ms 283±5ms 1.00 mpas_ocean.CrossSections.time_const_lat('480km', 2)
143±0.9ms 146±3ms 1.02 mpas_ocean.CrossSections.time_const_lat('480km', 4)
355M 347M 0.98 mpas_ocean.CrossSectionsPeakMem.track_peakmem_const_lat('120km', 1)
355M 347M 0.98 mpas_ocean.CrossSectionsPeakMem.track_peakmem_const_lat('120km', 2)
355M 347M 0.98 mpas_ocean.CrossSectionsPeakMem.track_peakmem_const_lat('120km', 4)
355M 330M 0.93 mpas_ocean.CrossSectionsPeakMem.track_peakmem_const_lat('480km', 1)
355M 330M 0.93 mpas_ocean.CrossSectionsPeakMem.track_peakmem_const_lat('480km', 2)
355M 330M 0.93 mpas_ocean.CrossSectionsPeakMem.track_peakmem_const_lat('480km', 4)
26.8±0.4ms 26.3±0.3ms 0.98 mpas_ocean.DualMesh.time_dual_mesh_construction('120km')
2.99±0.04ms 3.36±0.3ms ~1.12 mpas_ocean.DualMesh.time_dual_mesh_construction('480km')
14.3±0.4ms 15.3±0.5ms 1.07 mpas_ocean.FaceAreas.time_face_areas('120km')
4.30±0.3ms 4.34±0.3ms 1.01 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')
714k 714k 1.00 mpas_ocean.FaceAreas.track_peakmem_face_areas('480km')
907±8ms 904±10ms 1.00 mpas_ocean.GeoDataFrame.time_to_geodataframe('120km', False)
49.9±0.6ms 50.1±1ms 1.01 mpas_ocean.GeoDataFrame.time_to_geodataframe('120km', True)
83.4±0.7ms 83.3±1ms 1.00 mpas_ocean.GeoDataFrame.time_to_geodataframe('480km', False)
5.29±0.2ms 5.35±0.5ms 1.01 mpas_ocean.GeoDataFrame.time_to_geodataframe('480km', True)
13.5±0.5ms 14.1±0.6ms 1.05 mpas_ocean.Gradient.time_gradient('120km')
1.80±0.02ms 1.79±0.01ms 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')
355M 343M 0.96 mpas_ocean.GradientColdStartRss.track_peakmem_gradient('120km')
149±1μs 150±5μs 1.01 mpas_ocean.HoleEdgeIndices.time_construct_hole_edge_indices('480km')
204±1μs 206±10μs 1.01 mpas_ocean.Integrate.time_integrate('120km')
188±6μs 187±5μs 1.00 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')
185±2ms 187±2ms 1.01 mpas_ocean.MatplotlibConversion.time_dataarray_to_polycollection('120km', 'exclude')
185±2ms 185±2ms 1.00 mpas_ocean.MatplotlibConversion.time_dataarray_to_polycollection('120km', 'include')
185±2ms 188±2ms 1.02 mpas_ocean.MatplotlibConversion.time_dataarray_to_polycollection('120km', 'split')
13.6±0.2ms 13.2±0.2ms 0.97 mpas_ocean.MatplotlibConversion.time_dataarray_to_polycollection('480km', 'exclude')
13.7±0.3ms 13.5±0.2ms 0.98 mpas_ocean.MatplotlibConversion.time_dataarray_to_polycollection('480km', 'include')
13.8±0.5ms 13.9±0.5ms 1.01 mpas_ocean.MatplotlibConversion.time_dataarray_to_polycollection('480km', 'split')
266±20ms 248±0.7ms 0.94 mpas_ocean.NeighborhoodBuild.time_build('120km', 1.0)
1.45±0.2s 1.32±0.01s 0.91 mpas_ocean.NeighborhoodBuild.time_build('120km', 15.0)
557±50ms 511±4ms 0.92 mpas_ocean.NeighborhoodBuild.time_build('120km', 5.0)
13.6±0.01ms 13.9±0.08ms 1.02 mpas_ocean.NeighborhoodBuild.time_build('480km', 1.0)
25.9±0.2ms 25.9±0.1ms 1.00 mpas_ocean.NeighborhoodBuild.time_build('480km', 15.0)
17.0±0.2ms 17.0±0.2ms 1.00 mpas_ocean.NeighborhoodBuild.time_build('480km', 5.0)
243±3ms 244±2ms 1.00 mpas_ocean.NeighborhoodBuild.time_query_radius('120km', 1.0)
1.29±0s 1.29±0.01s 1.00 mpas_ocean.NeighborhoodBuild.time_query_radius('120km', 15.0)
507±2ms 503±3ms 0.99 mpas_ocean.NeighborhoodBuild.time_query_radius('120km', 5.0)
13.0±0.04ms 13.0±0.07ms 1.00 mpas_ocean.NeighborhoodBuild.time_query_radius('480km', 1.0)
25.4±0.5ms 25.5±0.2ms 1.00 mpas_ocean.NeighborhoodBuild.time_query_radius('480km', 15.0)
16.1±0.08ms 16.3±0.2ms 1.01 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)
41.0±1ms 41.5±1ms 1.01 mpas_ocean.NeighborhoodDask.time_mean('120km', 'grid_chunks')
18.4±0.1ms 18.5±0.1ms 1.00 mpas_ocean.NeighborhoodDask.time_mean('120km', 'numpy')
36.3±0.5ms 36.4±0.5ms 1.00 mpas_ocean.NeighborhoodDask.time_mean('120km', 'time_chunks')
11.1±0.2ms 11.1±0.2ms 1.00 mpas_ocean.NeighborhoodDask.time_mean('480km', 'grid_chunks')
852±50μs 888±20μs 1.04 mpas_ocean.NeighborhoodDask.time_mean('480km', 'numpy')
7.87±0.2ms 7.96±0.2ms 1.01 mpas_ocean.NeighborhoodDask.time_mean('480km', 'time_chunks')
5.76M 5.82M 1.01 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')
177k 177k 1.00 mpas_ocean.NeighborhoodDask.track_peakmem_mean('480km', 'numpy')
539k 539k 1.00 mpas_ocean.NeighborhoodDask.track_peakmem_mean('480km', 'time_chunks')
14.0±0.7s 12.7±0.07s 0.91 mpas_ocean.NeighborhoodReduce.time_dataset_reduce('120km', 'mean')
14.7±0.6s 13.3±0.02s ~0.91 mpas_ocean.NeighborhoodReduce.time_dataset_reduce('120km', 'median')
241±10ms 228±1ms 0.95 mpas_ocean.NeighborhoodReduce.time_dataset_reduce('480km', 'mean')
245±9ms 236±2ms 0.96 mpas_ocean.NeighborhoodReduce.time_dataset_reduce('480km', 'median')
1.36±0.1s 1.35±0s 0.99 mpas_ocean.NeighborhoodReduce.time_neighborhood_reduce('120km', 'mean')
1.69±0.1s 1.55±0s 0.92 mpas_ocean.NeighborhoodReduce.time_neighborhood_reduce('120km', 'median')
27.0±0.4ms 26.5±0.2ms 0.98 mpas_ocean.NeighborhoodReduce.time_neighborhood_reduce('480km', 'mean')
27.9±0.3ms 27.4±0.1ms 0.98 mpas_ocean.NeighborhoodReduce.time_neighborhood_reduce('480km', 'median')
31.3±0.2ms 31.4±0.1ms 1.00 mpas_ocean.NeighborhoodReduce.time_reduce('120km', 'mean')
230±0.8ms 229±1ms 0.99 mpas_ocean.NeighborhoodReduce.time_reduce('120km', 'median')
591±20μs 601±20μs 1.02 mpas_ocean.NeighborhoodReduce.time_reduce('480km', 'mean')
1.85±0.01ms 1.84±0.04ms 1.00 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')
20k 20k 1.00 mpas_ocean.NeighborhoodReduce.track_peakmem_reduce('480km', 'median')
486±30μs 443±20μs 0.91 mpas_ocean.PointInPolygon.time_face_search_lonlat('120km')
417±10μs 431±30μs 1.03 mpas_ocean.PointInPolygon.time_face_search_lonlat('480km')
432±7μs 432±8μs 1.00 mpas_ocean.PointInPolygon.time_face_search_xyz('120km')
399±20μs 394±10μs 0.99 mpas_ocean.PointInPolygon.time_face_search_xyz('480km')
136±2ms 132±1ms 0.97 mpas_ocean.RemapDownsample.time_bilinear_remapping
18.7±0.2ms 17.7±0.4ms 0.94 mpas_ocean.RemapDownsample.time_inverse_distance_weighted_remapping
17.0±0.2ms 15.9±0.3ms 0.94 mpas_ocean.RemapDownsample.time_nearest_neighbor_remapping
1.43±0s 1.43±0s 1.00 mpas_ocean.RemapUpsample.time_bilinear_remapping
27.7±0.9ms 28.2±0.7ms 1.02 mpas_ocean.RemapUpsample.time_inverse_distance_weighted_remapping
12.9±0.6ms 12.3±0.1ms 0.95 mpas_ocean.RemapUpsample.time_nearest_neighbor_remapping
8.97±0.3ms 9.08±0.2ms 1.01 mpas_ocean.ZonalAverage.time_zonal_average('120km')
5.60±0.4ms 5.31±0.07ms 0.95 mpas_ocean.ZonalAverage.time_zonal_average('480km')
355M 349M 0.98 mpas_ocean.ZonalAveragePeakMem.track_peakmem_zonal_average('120km')
355M 332M 0.93 mpas_ocean.ZonalAveragePeakMem.track_peakmem_zonal_average('480km')
1.0391303341627074 1.0242161253702668 0.99 nogil_scaling.GILScaling.track_gil_scaling
8.02±0.2ms 8.08±0.6ms 1.01 quad_hexagon.QuadHexagon.time_open_dataset
6.63±0.3ms 6.55±0.3ms 0.99 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.5k 73.9k 1.01 quad_hexagon.QuadHexagon.track_peakmem_open_dataset
72.6k 72.9k 1.00 quad_hexagon.QuadHexagon.track_peakmem_open_grid

Benchmarks that have got worse:

Change Before [9609c3a] After [78a58e3] Ratio Benchmark (Parameter)
+ 275±3μs 309±10μs 1.12 mpas_ocean.HoleEdgeIndices.time_construct_hole_edge_indices('120km')

@Sevans711

Copy link
Copy Markdown
Collaborator Author

I did this too, actually. But an easier way to get the benchmarks running is to push your branch, then run ASV benchmarks directly in the Actions tab. That way you don't have to mess with a PR to get them running.

Ah, that makes sense! Does that lead to a nice comment with the benchmark results too? I suppose even if there isn't a comment it's definitely less noisy than making a draft PR

@Sevans711 Sevans711 mentioned this pull request Aug 26, 2026
7 tasks done
@cmdupuis3

Copy link
Copy Markdown
Collaborator

Nah, you'd have to dig. I've been mostly looking at total time though, so for me it doesn't matter.

@dylannelson

Copy link
Copy Markdown
Member

Leaving a note here in case it gets solved and disappears in the above benchmark run, we have been seeing a *1000 or so speedup on a test even when nothing changes, it appears as "no change". Very odd:

image

This appears in this PR and others as well (at the time of writing).

@Sevans711

Sevans711 commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator Author

@cmdupuis3 I've been noticing that the "import uxarray" benchmark is always showing an improvement, and the mpas_ocean.NeighborhoodDask.track_peakmem_mean('480km', 'grid_chunks') is always showing things getting worse. Do you have any guesses about what is causing these quirks?

EDIT: Ah, I agree now I was wrong about the latter… I felt like I've been seeing NeighborhoodDask benchmarks in that category in a few different PRs, but now I can see that it isn't actually always showing up as "got worse", only sometimes!

@cmdupuis3

Copy link
Copy Markdown
Collaborator

@Sevans711 If it's around 300M on a memory benchmark, that usually indicates caching behavior. I think the pure import is pretty indicative. It can be hard to measure consistently under caching conditions, so for the other benchmarks, maybe they aren't rigorous enough.

The other one seems like a one-off, you can just compare it with previous benchmark runs and if there's no pattern, I wouldn't worry about it much.

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

Labels

run-benchmark Run ASV benchmark workflow

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants