-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
Open
Labels
GCGarbage collectorGarbage collectorperformanceMust go fasterMust go fasterregressionRegression in behavior compared to a previous versionRegression in behavior compared to a previous version
Description
Hi!
Out of curiousity, I checked the performance of my package (Groebner) on recent 1.11.
It occurred to me that there could be a regression, and that the root of it could be somewhere in 1.10.
My back of the envelope benchmarks show a 2-5x slowdown in 1.10 compared to 1.9, see below.
I run the script
using Groebner, AbstractAlgebra
model = Groebner.cyclicn(8, k=GF(2^30 + 3), ordering=:degrevlex);
@time groebner(model);
@time groebner(model);
@time groebner(model);
@time groebner(model);
@time groebner(model);
@time groebner(model);
And get the output:
1.9.2 (official release):
5.102363 seconds (1.96 M allocations: 338.489 MiB, 2.31% gc time, 73.30% compilation time)
1.302451 seconds (159.63 k allocations: 221.873 MiB, 2.55% gc time)
1.172796 seconds (159.63 k allocations: 221.873 MiB, 0.87% gc time)
1.157940 seconds (159.63 k allocations: 221.873 MiB, 0.66% gc time)
1.232590 seconds (159.63 k allocations: 221.873 MiB, 1.08% gc time)
1.151201 seconds (159.63 k allocations: 221.873 MiB, 0.67% gc time)
1.10.0 (official release):
8.735243 seconds (1.79 M allocations: 331.722 MiB, 44.51% gc time, 43.72% compilation time)
1.465188 seconds (159.65 k allocations: 221.874 MiB)
3.934508 seconds (159.65 k allocations: 164.941 MiB, 59.77% gc time)
2.728948 seconds (159.65 k allocations: 162.659 MiB, 42.54% gc time)
2.651898 seconds (159.65 k allocations: 162.659 MiB, 43.89% gc time)
4.909563 seconds (159.65 k allocations: 221.874 MiB, 68.95% gc time)
1.11 (1 day old master):
6.671727 seconds (3.48 M allocations: 456.577 MiB, 3.70% gc time, 75.23% compilation time)
2.353556 seconds (264.26 k allocations: 294.034 MiB, 39.44% gc time)
1.538453 seconds (264.26 k allocations: 294.034 MiB, 6.80% gc time)
2.392527 seconds (264.26 k allocations: 294.034 MiB, 38.40% gc time)
2.007164 seconds (264.26 k allocations: 294.034 MiB, 43.94% gc time)
1.672259 seconds (264.26 k allocations: 294.034 MiB, 34.68% gc time)
One feature of the Groebner.groebner
function is that it allocates a lot of small vectors throughout execution.
I can try to isolate this into a smaller example if it would make sense.
All julia versions use AbstractAlgebra v0.35.3 and Groebner v0.6.3.
I run julia without cli arguments and without a startup file.
My machine is:
Julia Version 1.11.0-DEV.1355
Commit 4d26be0847 (2024-01-22 21:30 UTC)
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: 64 × Intel(R) Xeon(R) Gold 6130 CPU @ 2.10GHz
WORD_SIZE: 64
LLVM: libLLVM-16.0.6 (ORCJIT, skylake-avx512)
Threads: 1 default, 0 interactive, 1 GC (on 64 virtual cores)
Environment:
LD_LIBRARY_PATH = :/home/demin/libs2/usr/local/lib/
Metadata
Metadata
Assignees
Labels
GCGarbage collectorGarbage collectorperformanceMust go fasterMust go fasterregressionRegression in behavior compared to a previous versionRegression in behavior compared to a previous version