JuliaAlgebra / MultivariatePolynomials.jl

Multivariate polynomials interface
https://juliaalgebra.github.io/MultivariatePolynomials.jl/stable/
Other
135 stars 27 forks source link

Use buffer #240

Open blegat opened 1 year ago

blegat commented 1 year ago

Part of https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/issues/194

Needs

Int64

Benchmark 0

Before

Time Alloc Memory
SIMDPolynomials 317.813 ns 6 272 bytes
DynamicPolynomials 5.072 μs 170 9.62 KiB
TypedPolynomials 117.847 ns 2 208 bytes

After

Time Alloc Memory
SIMDPolynomials 301.179 ns 6 272 bytes
DynamicPolynomials 3.124 μs 147 8.56 KiB
TypedPolynomials 118.545 ns 2 208 bytes

Benchmark 1

Before

Time Alloc Memory
SIMDPolynomials 122.177 μs 1316 468.48 KiB
DynamicPolynomials 692.039 μs 15658 1.24 MiB
TypedPolynomials 97.478 μs 502 473.70 KiB

After

Time Alloc Memory
SIMDPolynomials 117.127 μs 1354 442.55 KiB
DynamicPolynomials 611.045 μs 14205 1.18 MiB
TypedPolynomials 89.858 μs 476 445.50 KiB

Benchmark 2

Before

Time Alloc Memory
SIMDPolynomials 3.761 μs 218 8.31 KiB
DynamicPolynomials 31.402 μs 1361 92.11 KiB
TypedPolynomials 4.284 μs 137 6.09 KiB

After

Time Alloc Memory
SIMDPolynomials 3.709 μs 232 8.52 KiB
DynamicPolynomials 29.634 μs 1359 92.86 KiB
TypedPolynomials 4.310 μs 135 5.77 KiB

Benchmark 3

Before

Time Alloc Memory
SIMDPolynomials 461.465 μs 26515 1.02 MiB
DynamicPolynomials 2.307 ms 89587 6.01 MiB
TypedPolynomials 92.893 μs 547 353.50 KiB

After

Time Alloc Memory
SIMDPolynomials 443.949 μs 26563 934.09 KiB
DynamicPolynomials 2.203 ms 90077 6.07 MiB
TypedPolynomials 85.777 μs 595 184.81 KiB

BigInt

Benchmark 0

Before

Time Alloc Memory
SIMDPolynomials 750.315 ns 34 784 bytes
DynamicPolynomials 5.634 μs 202 10.19 KiB
TypedPolynomials 555.119 ns 30 720 bytes

After

Time Alloc Memory
SIMDPolynomials 774.748 ns 47 1.12 KiB
DynamicPolynomials 3.867 μs 187 9.27 KiB
TypedPolynomials 509.906 ns 27 672 bytes

Benchmark 1

Before

Time Alloc Memory
SIMDPolynomials 338.276 μs 12454 1001.43 KiB
DynamicPolynomials 880.820 μs 27690 1.85 MiB
TypedPolynomials 324.824 μs 11554 1004.15 KiB

After

Time Alloc Memory
SIMDPolynomials 316.109 μs 11307 969.02 KiB
DynamicPolynomials 846.564 μs 28317 1.83 MiB
TypedPolynomials 294.887 μs 9975 960.13 KiB

Benchmark 2

Before

Time Alloc Memory
SIMDPolynomials 5.636 μs 307 9.92 KiB
DynamicPolynomials 35.949 μs 1471 95.04 KiB
TypedPolynomials 5.281 μs 197 6.98 KiB

After

Time Alloc Memory
SIMDPolynomials 5.531 μs 323 10.16 KiB
DynamicPolynomials 34.546 μs 1479 95.95 KiB
TypedPolynomials 5.347 μs 213 7.10 KiB

Benchmark 3

Before

Time Alloc Memory
SIMDPolynomials 945.529 μs 59541 1.54 MiB
DynamicPolynomials 2.873 ms 111267 6.50 MiB
TypedPolynomials 515.503 μs 33525 885.83 KiB

After

Time Alloc Memory
SIMDPolynomials 927.409 μs 59597 1.43 MiB
DynamicPolynomials 2.712 ms 112985 6.58 MiB
TypedPolynomials 483.811 μs 33581 717.30 KiB

Rational{BigInt}

Benchmark 0

Before

Time Alloc Memory
SIMDPolynomials 2.932 μs 217 5.33 KiB
DynamicPolynomials 8.069 μs 386 15.14 KiB
TypedPolynomials 2.792 μs 213 5.27 KiB

After

Time Alloc Memory
SIMDPolynomials 2.976 μs 233 5.77 KiB
DynamicPolynomials 7.941 μs 386 15.14 KiB
TypedPolynomials 2.653 μs 213 5.27 KiB

Benchmark 1

Before

Time Alloc Memory
SIMDPolynomials 1.445 ms 68042 2.67 MiB
DynamicPolynomials 1.997 ms 77748 3.53 MiB
TypedPolynomials 1.446 ms 67322 2.68 MiB

After

Time Alloc Memory
SIMDPolynomials 1.417 ms 68761 2.67 MiB
DynamicPolynomials 1.970 ms 79636 3.59 MiB
TypedPolynomials 1.380 ms 67361 2.66 MiB

Benchmark 2

Before

Time Alloc Memory
SIMDPolynomials 10.845 μs 692 20.28 KiB
DynamicPolynomials 45.825 μs 1968 108.00 KiB
TypedPolynomials 10.151 μs 580 17.30 KiB

After

Time Alloc Memory
SIMDPolynomials 10.468 μs 706 20.42 KiB
DynamicPolynomials 42.614 μs 2007 109.67 KiB
TypedPolynomials 10.233 μs 594 17.31 KiB

Benchmark 3

Before

Time Alloc Memory
SIMDPolynomials 2.562 ms 163028 4.71 MiB
DynamicPolynomials 5.302 ms 243218 9.64 MiB
TypedPolynomials 2.083 ms 135981 4.01 MiB

After

Time Alloc Memory
SIMDPolynomials 2.502 ms 163076 4.55 MiB
DynamicPolynomials 5.180 ms 249218 9.84 MiB
TypedPolynomials 2.001 ms 136029 3.79 MiB
blegat commented 1 year ago

I don't understand where the added allocations come from. It seems to be because I changed operate!! into buffered_operate!!. Actually, changing to operate! further reduces it while it shouldn't. promote_operation does not allocate anything though. I checked on Julia v1.9 beta and there is the same issue.