Skip to content

Commit

Permalink
benchmark with multi-threading on
Browse files Browse the repository at this point in the history
  • Loading branch information
Sasha Demin committed Aug 31, 2024
1 parent 1c1b86d commit 519be03
Show file tree
Hide file tree
Showing 10 changed files with 41 additions and 38 deletions.
2 changes: 0 additions & 2 deletions benchmark/CI-scripts/run_benchmarks.jl
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,6 @@ function nemo_make_prime_finite_field(p)
end

function compute_gb(system, trials=7; kws...)
kws = Dict{Symbol, Any}(kws)
!haskey(kws, :threaded) && (kws[:threaded] = :no)
times = []
for _ in 1:trials
GC.gc()
Expand Down
2 changes: 1 addition & 1 deletion src/Groebner.jl
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ include("groebner/homogenization.jl")
include("interface.jl")

using PrecompileTools
# include("precompile.jl")
include("precompile.jl")

###
# Exports
Expand Down
2 changes: 0 additions & 2 deletions src/f4/matrix.jl
Original file line number Diff line number Diff line change
Expand Up @@ -185,8 +185,6 @@ function matrix_string_repr(matrix::MacaulayMatrix{T}) where {T}
C: $(m_C) x $(n_C) with $(nnz_C) nnz ($(percent(nnz_C / (m_C * n_C)))%)
D: $(m_D) x $(n_D) with $(nnz_D) nnz ($(percent(nnz_D / (m_D * n_D)))%)
RREF flag: $(matrix.upper_part_is_rref)
Sparsity pattern:
$(canvas)
Expand Down
3 changes: 1 addition & 2 deletions src/groebner/groebner.jl
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,7 @@ function __groebner1(
params::AlgorithmParameters
) where {I <: Integer, C <: Coeff}
@invariant ir_is_valid(ring, monoms, coeffs)
_, ring2, monoms2, coeffs2 =
ir_convert_ir_to_internal(ring, monoms, coeffs, params, params.representation)
_, ring2, monoms2, coeffs2 = ir_convert_ir_to_internal(ring, monoms, coeffs, params)
gb_monoms2, gb_coeffs2 = groebner2(ring2, monoms2, coeffs2, params)
gb_monoms, gb_coeffs = ir_convert_internal_to_ir(ring2, gb_monoms2, gb_coeffs2, params)
gb_monoms, gb_coeffs
Expand Down
3 changes: 1 addition & 2 deletions src/groebner/groebner_with_change_matrix.jl
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@ end

function __groebner_with_change_matrix1(ring, monoms, coeffs, params)
@invariant ir_is_valid(ring, monoms, coeffs)
_, ring2, monoms2, coeffs2 =
ir_convert_ir_to_internal(ring, monoms, coeffs, params, params.representation)
_, ring2, monoms2, coeffs2 = ir_convert_ir_to_internal(ring, monoms, coeffs, params)
gb_monoms2, gb_coeffs2, matrix_monoms2, matrix_coeffs2 =
groebner_with_change_matrix2(ring2, monoms2, coeffs2, params)
gb_monoms, gb_coeffs = ir_convert_internal_to_ir(ring2, gb_monoms2, gb_coeffs2, params)
Expand Down
3 changes: 1 addition & 2 deletions src/groebner/isgroebner.jl
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ end

function __isgroebner1(ring, monoms, coeffs, params)
@invariant ir_is_valid(ring, monoms, coeffs)
_, ring2, monoms2, coeffs2 =
ir_convert_ir_to_internal(ring, monoms, coeffs, params, params.representation)
_, ring2, monoms2, coeffs2 = ir_convert_ir_to_internal(ring, monoms, coeffs, params)
isgroebner2(ring2, monoms2, coeffs2, params)
end

Expand Down
2 changes: 1 addition & 1 deletion src/groebner/learn_apply.jl
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ function __groebner_learn1(
) where {I <: Integer, C <: Coeff}
@invariant ir_is_valid(ring, monoms, coeffs)
term_sorting_permutations, ring2, monoms2, coeffs2 =
ir_convert_ir_to_internal(ring, monoms, coeffs, params, params.representation)
ir_convert_ir_to_internal(ring, monoms, coeffs, params)
trace, gb_monoms2, gb_coeffs2 = groebner_learn2(ring2, monoms2, coeffs2, params)
gb_monoms, gb_coeffs = ir_convert_internal_to_ir(ring2, gb_monoms2, gb_coeffs2, params)

Expand Down
12 changes: 3 additions & 9 deletions src/groebner/normalform.jl
Original file line number Diff line number Diff line change
Expand Up @@ -88,15 +88,9 @@ function __normalform1(
@invariant ir_is_valid(ring, monoms, coeffs)
@invariant ir_is_valid(ring_tbr, monoms_tbr, coeffs_tbr)

_, ring2, monoms2, coeffs2 =
ir_convert_ir_to_internal(ring, monoms, coeffs, params, params.representation)
_, ring_tbr2, monoms_tbr2, coeffs_tbr2 = ir_convert_ir_to_internal(
ring_tbr,
monoms_tbr,
coeffs_tbr,
params,
params.representation
)
_, ring2, monoms2, coeffs2 = ir_convert_ir_to_internal(ring, monoms, coeffs, params)
_, ring_tbr2, monoms_tbr2, coeffs_tbr2 =
ir_convert_ir_to_internal(ring_tbr, monoms_tbr, coeffs_tbr, params)
monoms_reduced2, coeffs_reduced2 =
normalform2(ring2, monoms2, coeffs2, ring_tbr2, monoms_tbr2, coeffs_tbr2, params)
monoms_reduced, coeffs_reduced =
Expand Down
36 changes: 26 additions & 10 deletions src/input_output/intermediate.jl
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,16 @@ end
Base.:(==)(r1::PolyRing, r2::PolyRing) =
r1.nvars == r2.nvars && r1.ord == r2.ord && r1.ch == r2.ch

ir_basic_is_valid(batch) = throw(DomainError("Invalid IR, unknown types."))
ir_basic_is_valid(ring, monoms, coeffs) = throw(DomainError("Invalid IR, unknown types."))
ir_is_valid_basic(batch) = throw(DomainError("Invalid IR, unknown types."))

Check warning on line 34 in src/input_output/intermediate.jl

View check run for this annotation

Codecov / codecov/patch

src/input_output/intermediate.jl#L34

Added line #L34 was not covered by tests
ir_is_valid_basic(ring, monoms, coeffs) = throw(DomainError("Invalid IR, unknown types."))

function ir_basic_is_valid(batch::NTuple{N, T}) where {N, T}
function ir_is_valid_basic(batch::NTuple{N, T}) where {N, T}

Check warning on line 37 in src/input_output/intermediate.jl

View check run for this annotation

Codecov / codecov/patch

src/input_output/intermediate.jl#L37

Added line #L37 was not covered by tests
for el in batch
ir_basic_is_valid(el...)
ir_is_valid_basic(el...)

Check warning on line 39 in src/input_output/intermediate.jl

View check run for this annotation

Codecov / codecov/patch

src/input_output/intermediate.jl#L39

Added line #L39 was not covered by tests
end
end

function ir_basic_is_valid(
function ir_is_valid_basic(
ring::PolyRing,
monoms::Vector{Vector{Vector{T}}},
coeffs::Vector{Vector{C}}
Expand All @@ -66,7 +66,7 @@ function ir_is_valid(
monoms::Vector{Vector{Vector{T}}},
coeffs::Vector{Vector{C}}
) where {T <: Integer, C <: Number}
ir_basic_is_valid(ring, monoms, coeffs)
ir_is_valid_basic(ring, monoms, coeffs)
for i in 1:length(monoms)
!(length(monoms[i]) == length(coeffs[i])) && throw(DomainError("Invalid IR."))
for j in 1:length(monoms[i])
Expand All @@ -86,7 +86,7 @@ function ir_ensure_assumptions(
monoms::Vector{Vector{Vector{M}}},
coeffs::Vector{Vector{C}}
) where {M <: Integer, C <: Coeff}
ir_basic_is_valid(ring, monoms, coeffs)
ir_is_valid_basic(ring, monoms, coeffs)
# Copy input
new_monoms, new_coeffs = empty(monoms), empty(coeffs)
for i in 1:length(monoms)
Expand Down Expand Up @@ -203,7 +203,13 @@ end
###
# Converting to internal representation

function ir_convert_ir_to_internal(ring, monoms, coeffs, params, repr)
function ir_convert_ir_to_internal(
ring::PolyRing,
monoms::Vector{Vector{M}},
coeffs::Vector{Vector{C}},
params
) where {M <: Monom, C <: Coeff}
repr = params.representation
monoms2 = Vector{Vector{repr.monomtype}}(undef, length(monoms))
coeffs2 = Vector{Vector{repr.coefftype}}(undef, length(monoms))
@inbounds for i in 1:length(monoms)
Expand All @@ -219,7 +225,12 @@ function ir_convert_ir_to_internal(ring, monoms, coeffs, params, repr)
term_sorting_permutations, ring2, monoms2, coeffs2
end

function ir_convert_internal_to_ir(ring, monoms, coeffs, params)
function ir_convert_internal_to_ir(
ring::PolyRing,
monoms::Vector{Vector{M}},
coeffs::Vector{Vector{C}},
params
) where {M <: Monom, C <: Coeff}
monoms2 = Vector{Vector{Vector{IRexponent}}}(undef, length(monoms))
coeffs2 = coeffs
if eltype(eltype(coeffs)) <: AbstractFloat
Expand All @@ -237,7 +248,12 @@ end

# Checks that the monomial ordering is consistent.
# Sorts the polynomials terms w.r.t. the target ordering.
function ir_set_monomial_ordering!(ring, monoms, coeffs, params)
function ir_set_monomial_ordering!(
ring::PolyRing,
monoms::Vector{Vector{M}},
coeffs::Vector{Vector{C}},
params
) where {M <: Monom, C <: Coeff}
ordering_check_consistency(ring.nvars, params.target_ord)
if ring.ord == params.target_ord
# No reordering of terms needed
Expand Down
14 changes: 7 additions & 7 deletions src/interface.jl
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ function groebner(

logging_setup(keywords)

ir_basic_is_valid(ring, monoms, coeffs)
ir_is_valid_basic(ring, monoms, coeffs)
result = groebner1(ring, monoms, coeffs, keywords)

result
Expand Down Expand Up @@ -378,7 +378,7 @@ function groebner_learn(

logging_setup(keywords)

ir_basic_is_valid(ring, monoms, coeffs)
ir_is_valid_basic(ring, monoms, coeffs)
result = groebner_learn1(ring, monoms, coeffs, keywords)

result
Expand Down Expand Up @@ -462,7 +462,7 @@ function groebner_apply!(

logging_setup(keywords)

ir_basic_is_valid(ring, monoms, coeffs)
ir_is_valid_basic(ring, monoms, coeffs)
result = groebner_apply1!(trace, ring, monoms, coeffs, keywords)

result
Expand All @@ -477,7 +477,7 @@ function groebner_apply!(trace::WrappedTrace, batch::NTuple{N, T}; options...) w

logging_setup(keywords)

ir_basic_is_valid(batch)
ir_is_valid_basic(batch)

Check warning on line 480 in src/interface.jl

View check run for this annotation

Codecov / codecov/patch

src/interface.jl#L480

Added line #L480 was not covered by tests
result = groebner_apply_batch1!(trace, batch, keywords)

result
Expand Down Expand Up @@ -568,7 +568,7 @@ function isgroebner(

logging_setup(keywords)

ir_basic_is_valid(ring, monoms, coeffs)
ir_is_valid_basic(ring, monoms, coeffs)
result = isgroebner1(ring, monoms, coeffs, keywords)

result
Expand Down Expand Up @@ -662,8 +662,8 @@ function normalform(

logging_setup(keywords)

ir_basic_is_valid(ring, monoms, coeffs)
ir_basic_is_valid(ring_to_be_reduced, monoms_to_be_reduced, coeffs_to_be_reduced)
ir_is_valid_basic(ring, monoms, coeffs)
ir_is_valid_basic(ring_to_be_reduced, monoms_to_be_reduced, coeffs_to_be_reduced)
result = normalform1(
ring,
monoms,
Expand Down

0 comments on commit 519be03

Please sign in to comment.