SymbolicML / DynamicQuantities.jl

Efficient and type-stable physical quantities in Julia
https://symbolicml.org/DynamicQuantities.jl/dev/
Apache License 2.0
120 stars 15 forks source link

Add DispatchDoctor.jl #140

Closed MilesCranmer closed 4 weeks ago

MilesCranmer commented 1 month ago

Also fixes a few instabilities found by it, like

- materialize_first(bc::Base.Broadcast.Broadcasted) = bc.f(materialize_first.(bc.args)...)
+ materialize_first(bc::Base.Broadcast.Broadcasted) = bc.f(map(materialize_first, bc.args)...)

– surprisingly the former version is a real type instability.

I don't mark any extensions as stable yet. Unitful.jl of course would not work as its unstable. The others we can add later.

github-actions[bot] commented 1 month ago

Benchmark Results

main 82f4e64c7d22af... main/82f4e64c7d22af...
Quantity/creation/Quantity(x) 2.79 ± 0.001 ns 3.41 ± 0.01 ns 0.82
Quantity/creation/Quantity(x, length=y) 3.42 ± 0.01 ns 3.11 ± 0.001 ns 1.1
Quantity/with_numbers/*real 3.11 ± 0.01 ns 3.11 ± 0.01 ns 1
Quantity/with_numbers/^int 8.37 ± 2.5 ns 8.05 ± 2.2 ns 1.04
Quantity/with_numbers/^int * real 8.05 ± 2.2 ns 8.67 ± 2.5 ns 0.929
Quantity/with_quantity/+y 4.04 ± 0.01 ns 4.04 ± 0.01 ns 1
Quantity/with_quantity//y 3.11 ± 0.009 ns 3.42 ± 0.01 ns 0.909
Quantity/with_self/dimension 2.79 ± 0.001 ns 3.1 ± 0.01 ns 0.9
Quantity/with_self/inv 3.11 ± 0 ns 4.03 ± 0.01 ns 0.771
Quantity/with_self/ustrip 2.79 ± 0.001 ns 2.79 ± 0.01 ns 1
QuantityArray/broadcasting/multi_array_of_quantities 0.147 ± 0.0019 ms 0.141 ± 0.0009 ms 1.04
QuantityArray/broadcasting/multi_normal_array 0.0529 ± 0.0021 ms 0.0559 ± 0.003 ms 0.946
QuantityArray/broadcasting/multi_quantity_array 0.157 ± 0.00081 ms 0.157 ± 0.00057 ms 1
QuantityArray/broadcasting/x^2_array_of_quantities 23.7 ± 1.7 μs 23.1 ± 1.4 μs 1.03
QuantityArray/broadcasting/x^2_normal_array 4.7 ± 0.83 μs 4.2 ± 0.83 μs 1.12
QuantityArray/broadcasting/x^2_quantity_array 7.09 ± 27 μs 7.04 ± 27 μs 1.01
QuantityArray/broadcasting/x^4_array_of_quantities 0.0846 ± 0.00046 ms 0.0814 ± 0.00064 ms 1.04
QuantityArray/broadcasting/x^4_normal_array 0.0498 ± 0.00016 ms 0.0496 ± 0.0031 ms 1
QuantityArray/broadcasting/x^4_quantity_array 0.05 ± 0.00017 ms 0.05 ± 0.00024 ms 1
time_to_load 0.143 ± 0.00059 s 0.162 ± 4.1e-05 s 0.882

Benchmark Plots

A plot of the benchmark results have been uploaded as an artifact to the workflow run for this PR. Go to "Actions"->"Benchmark a pull request"->[the most recent run]->"Artifacts" (at the bottom).