MultivariatePolynomials.jl
MultivariatePolynomials.jl copied to clipboard
Use buffer
Part of https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/issues/194
Needs
- [x] https://github.com/jump-dev/MutableArithmetics.jl/pull/196
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 |
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.