Nemo.jl
Nemo.jl copied to clipboard
Nemo Galois fields decrease performance compared to AbstractAlgebra
Using Galois fields from Nemo
instead of AbstractAlgebra
heavily impacts the performance of basic arithmetic operations due to allocations for every single operation:
julia> using AbstractAlgebra, BenchmarkTools, Nemo
Welcome to Nemo version 0.43.1
Nemo comes with absolutely no warranty whatsoever
julia> @btime begin
K = AbstractAlgebra.GF(2)
a = one(K)
for _ = 1:1_000_000
a *= a
end
end
247.656 μs (2 allocations: 40 bytes)
julia> @btime begin
K = Nemo.GF(2)
a = one(K)
for _ = 1:1_000_000
a *= a
end
end
66.673 ms (1000006 allocations: 76.29 MiB)
julia> @btime begin
K = AbstractAlgebra.GF(2)
a = one(K)
for _ = 1:1_000_000
a += a
end
end
78.806 ns (2 allocations: 40 bytes)
julia> @btime begin
K = Nemo.GF(2)
a = one(K)
for _ = 1:1_000_000
a += a
end
end
68.983 ms (1000006 allocations: 76.29 MiB)
I assume this is a byproduct of calling native libraries, but still very unfortunate.