Benchmark Results

Computational Resources

All benchmarks were performed on the same machine to ensure consistent comparisons.

  • CPU: Apple M4
  • Number of Cores: 10
  • Memory: 16GB RAM
  • Operating System: macOS Sequoia 15.5
  • Julia Version: 1.10.9
  • R Version: 4.4.2

Benchmarking Methods

To assess the efficiency of MetaCommunityMetrics compared to equivalent R implementations, we benchmark our functions against their R counterparts, focusing on execution time and memory usage. The following tables summarize the benchmark results based on 100 samples each.

We tested using datasets of three sizes:

  • Small (5,325 observations)
  • Medium (26,676 observations)
  • Large (53,352 observations)

The large dataset is the sample data included with MetaCommunityMetrics, accessible via load_sample_data(). The small and medium datasets can be accessed here.

Each function was benchmarked using 100 samples in both BenchmarkTools.jl in Julia and bench::mark() in R to ensure robust statistical sampling. For memory usage comparisons:

  • In Julia, we report the memory estimate from BenchmarkTools.jl, which measures bytes allocated during the trial with minimum elapsed time
  • In R, we report the mem_alloc metric from bench::mark(), which tracks R heap allocations

According to documentation, the Julia metric measures total memory allocation during execution, while the R metric specifically tracks heap allocations within the R runtime, excluding "memory allocated outside the R heap, e.g., by malloc() or new directly." Due to differences in language implementation and measurement methodology, direct numerical comparisons between languages should be interpreted with caution.

Speedup Summary

Below is a plot showing the speedup of all benchmarked functions across the three datasets (small, medium and large). Speedup is calculated as the R median execution time divided by the Julia median execution time. Speedup Plot

Benchmark Results in Details

All times are in millisecond (ms), and memory is in mebibytes (MiB). All values are rounded up to 4 decimal places.

Median Execution time and Speedup Values

95% confidence interval is reported.

TestCaseDataSizeJuliaRSpeedupLower CIUpper CI
Beta Diversity (Abundance, quant=true)Large0.13326.805051.093846.058459.6053
Beta Diversity (Abundance, quant=true)Medium0.06871.703724.810423.795126.4403
Beta Diversity (Abundance, quant=true)Small0.03780.860122.758222.171423.3134
Beta Diversity (Abundance, quant=false)Large0.01610.512931.809628.098236.0654
Beta Diversity (Abundance, quant=false)Medium0.01320.296922.475019.105331.1664
Beta Diversity (Abundance, quant=false)Small0.00780.224028.667227.773729.5725
Beta Diversity (Presence, quant=false)Large0.01590.432627.180120.363429.6098
Beta Diversity (Presence, quant=false)Medium0.00870.302934.780332.011937.0358
Beta Diversity (Presence, quant=false)Small0.00530.207139.288637.779140.5336
Spatial Beta Diversity (Abundance, quant=true)Large1.130117.324915.330714.138015.9187
Spatial Beta Diversity (Abundance, quant=true)Medium0.847917.479720.614819.621221.4655
Spatial Beta Diversity (Abundance, quant=true)Small0.657214.423921.948021.183922.7546
Spatial Beta Diversity (Abundance, quant=false)Large1.01389.24689.12068.74799.6145
Spatial Beta Diversity (Abundance, quant=false)Medium0.71588.837112.346311.655613.0150
Spatial Beta Diversity (Abundance, quant=false)Small0.53718.978216.715315.969017.8744
Spatial Beta Diversity (Presence, quant=false)Large1.00387.54627.51767.35297.5938
Spatial Beta Diversity (Presence, quant=false)Medium0.701411.975717.075116.274617.7219
Spatial Beta Diversity (Presence, quant=false)Small0.54517.484413.730113.408714.0756
Temporal Beta Diversity (Abundance, quant=true)Large4.701058.829612.514312.061712.9186
Temporal Beta Diversity (Abundance, quant=true)Medium4.189562.194314.845214.088715.7936
Temporal Beta Diversity (Abundance, quant=true)Small3.981969.216417.383016.270018.3625
Temporal Beta Diversity (Abundance, quant=false)Large1.914410.02945.23905.06305.4404
Temporal Beta Diversity (Abundance, quant=false)Medium1.286615.138811.766811.031212.3956
Temporal Beta Diversity (Abundance, quant=false)Small1.058113.065312.348111.696813.2043
Temporal Beta Diversity (Presence, quant=false)Large1.834513.00437.08876.60527.4926
Temporal Beta Diversity (Presence, quant=false)Medium1.263513.574510.743810.236311.2036
Temporal Beta Diversity (Presence, quant=false)Small1.030114.350413.930413.166114.5811
Dispersal-niche continuum indexLarge148.12716717.498945.349645.078445.8680
Dispersal-niche continuum indexMedium55.42442357.650342.538141.388143.1984
Dispersal-niche continuum indexSmall12.99351948.9892149.9977146.3496151.5726
Occupied Patches ProportionLarge0.920712.582813.666813.033014.1296
Occupied Patches ProportionMedium0.674612.601018.677916.814219.7831
Occupied Patches ProportionSmall0.205910.766452.295648.210858.0372
Variability MetricsLarge13.6071191.249914.055112.942715.7516
Variability MetricsMedium7.516095.838012.751111.716013.7836
Variability MetricsSmall2.589122.72998.77918.42419.3001
Hypervolume EstimationLarge0.00370.02837.62947.47267.8041
Hypervolume EstimationMedium0.00320.02718.55088.40968.6861
Hypervolume EstimationSmall0.00300.02999.90229.785010.1953
Hypervolume DissimilarityLarge0.00620.131121.257920.556122.3615
Hypervolume DissimilarityMedium0.00530.117422.010721.497323.0606
Hypervolume DissimilaritySmall0.00500.120623.928223.492424.4483

Memory Usage

Benchmarked using Large Dataset

TestCaseJuliaR
Beta Diversity (Abundance, quant=true)0.43460.0566
Beta Diversity (Abundance, quant=false)0.13470.1252
Beta Diversity (Presence, quant=false)0.13470.1252
Spatial Beta Diversity (Abundance, quant=true)3.91853.1221
Spatial Beta Diversity (Abundance, quant=false)3.51732.6791
Spatial Beta Diversity (Presence, quant=false)3.51732.6791
Temporal Beta Diversity (Abundance, quant=true)16.883816.8941
Temporal Beta Diversity (Abundance, quant=false)5.65865.1830
Temporal Beta Diversity (Presence, quant=false)5.65865.1830
Dispersal-niche continuum index408.450343.9627
Occupied Patches Proportion2.52301.8935
Variability Metrics12.457360.0667
Hypervolume Estimation0.01220.0022
Hypervolume Dissimilarity0.01680.0145

Benchmarked using Medium Dataset

TestCaseJuliaR
Beta Diversity (Abundance, quant=true)0.24910.0357
Beta Diversity (Abundance, quant=false)0.10860.0798
Beta Diversity (Presence, quant=false)0.10860.0798
Spatial Beta Diversity (Abundance, quant=true)2.38972.2814
Spatial Beta Diversity (Abundance, quant=false)1.99101.8384
Spatial Beta Diversity (Presence, quant=false)1.99101.8384
Temporal Beta Diversity (Abundance, quant=true)15.276916.2587
Temporal Beta Diversity (Abundance, quant=false)4.13244.5476
Temporal Beta Diversity (Presence, quant=false)4.13244.5476
Dispersal-niche continuum index143.743017.0662
Occupied Patches Proportion1.30191.4072
Variability Metrics7.674632.5536
Hypervolume Estimation0.00850.0011
Hypervolume Dissimilarity0.01200.0077

Benchmarked using Small Dataset

TestCaseJuliaR
Beta Diversity (Abundance, quant=true)0.12250.0195
Beta Diversity (Abundance, quant=false)0.08830.0444
Beta Diversity (Presence, quant=false)0.08830.0444
Spatial Beta Diversity (Abundance, quant=true)1.13341.2204
Spatial Beta Diversity (Abundance, quant=false)0.76630.7774
Spatial Beta Diversity (Presence, quant=false)0.76630.7774
Temporal Beta Diversity (Abundance, quant=true)12.881115.4419
Temporal Beta Diversity (Abundance, quant=false)2.89373.7308
Temporal Beta Diversity (Presence, quant=false)2.89373.7308
Dispersal-niche continuum index37.76127.9752
Occupied Patches Proportion0.32490.5009
Variability Metrics3.848310.5805
Hypervolume Estimation0.00590.0003
Hypervolume Dissimilarity0.00820.0014

Remarks

  • For DNCI_multigroup_result, 100 permutations are used in both the Julia and R implementation, and parallelComputing was set to be TRUE when benchmarking DNCImper:::DNCI_multigroup() in R.

The Scripts Used for Benchmarking

Packages used for benchmarking