Skip to content

Commit 55f7e32

Browse files
remove allocations in qrm_set for Julia 1.12 (#136)
1 parent 0b207b3 commit 55f7e32

File tree

4 files changed

+42
-15
lines changed

4 files changed

+42
-15
lines changed

src/QRMumps.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,7 @@ Set control parameters that define the behavior of `qr_mumps`.
595595
#### Input Arguments :
596596
597597
* `spfct`: a sparse factorization object of type `qrm_spfct`.
598-
* `str`: a string describing the parameter to set.
598+
* `str`: either a string or a symbol describing the parameter to set.
599599
* `val`: the parameter value.
600600
"""
601601
function qrm_set end
@@ -609,7 +609,7 @@ Returns the value of a control parameter or an information parameter.
609609
#### Input Arguments :
610610
611611
* `spfct`: a sparse factorization object of type `qrm_spfct`.
612-
* `str`: a string describing the parameter to get.
612+
* `str`: either a string or a symbol describing the parameter to get.
613613
"""
614614
function qrm_get end
615615

src/wrapper/qr_mumps_api.jl

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -815,10 +815,14 @@ for (fname, elty, subty) in ((:sqrm_residual_orth_c, :Float32 , :Float32),
815815
end
816816
end
817817

818+
function qrm_set(sym :: Symbol, val :: Real)
819+
qrm_set(String(sym), val)
820+
end
821+
818822
function qrm_set(str :: String, val :: Number)
819-
if (str GICNTL) || (str PICNTL)
823+
if (Symbol(str) GICNTL) || (Symbol(str) PICNTL)
820824
err = qrm_glob_set_i4_c(str, val)
821-
elseif str RCNTL
825+
elseif Symbol(str) RCNTL
822826
err = qrm_glob_set_r4_c(str, val)
823827
else
824828
err = Int32(23)
@@ -832,10 +836,13 @@ for (finame, frname, elty) in ((:sqrm_spfct_set_i4_c, :sqrm_spfct_set_r4_c, :Flo
832836
(:cqrm_spfct_set_i4_c, :cqrm_spfct_set_r4_c, :ComplexF32),
833837
(:zqrm_spfct_set_i4_c, :zqrm_spfct_set_r4_c, :ComplexF64))
834838
@eval begin
839+
function qrm_set(spfct :: qrm_spfct{$elty}, sym :: Symbol, val :: Real)
840+
qrm_set(spfct, String(sym), val)
841+
end
835842
function qrm_set(spfct :: qrm_spfct{$elty}, str :: String, val :: Real)
836-
if str PICNTL
843+
if Symbol(str) PICNTL
837844
err = $finame(spfct, str, val)
838-
elseif str RCNTL
845+
elseif Symbol(str) RCNTL
839846
err = $frname(spfct, str, val)
840847
else
841848
err = Int32(23)
@@ -846,11 +853,15 @@ for (finame, frname, elty) in ((:sqrm_spfct_set_i4_c, :sqrm_spfct_set_r4_c, :Flo
846853
end
847854
end
848855

856+
function qrm_get(sym :: Symbol)
857+
return qrm_get(String(sym))
858+
end
859+
849860
function qrm_get(str :: String)
850-
if (str GICNTL) || (str PICNTL)
861+
if (Symbol(str) GICNTL) || (Symbol(str) PICNTL)
851862
val = Ref{Clonglong}(0)
852863
err = qrm_glob_get_i8_c(str, val)
853-
elseif str RCNTL
864+
elseif Symbol(str) RCNTL
854865
val = Ref{Float32}(0)
855866
err = qrm_glob_get_r4_c(str, val)
856867
else
@@ -865,11 +876,14 @@ for (finame, frname, elty) in ((:sqrm_spfct_get_i8_c, :sqrm_spfct_get_r4_c, :Flo
865876
(:cqrm_spfct_get_i8_c, :cqrm_spfct_get_r4_c, :ComplexF32),
866877
(:zqrm_spfct_get_i8_c, :zqrm_spfct_get_r4_c, :ComplexF64))
867878
@eval begin
879+
function qrm_get(spfct :: qrm_spfct{$elty}, sym :: Symbol)
880+
return qrm_get(spfct, String(sym))
881+
end
868882
function qrm_get(spfct :: qrm_spfct{$elty}, str :: String)
869-
if (str PICNTL) || (str STATS)
883+
if (Symbol(str) PICNTL) || (Symbol(str) STATS)
870884
val = spfct.ref_int
871885
err = $finame(spfct, str, val)
872-
elseif str RCNTL
886+
elseif Symbol(str) RCNTL
873887
val = spfct.ref_float
874888
err = $frname(spfct, str, val)
875889
else

src/wrapper/qr_mumps_common.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,10 @@ function Base.show(io :: IO, ::MIME"text/plain", spfct :: qrm_spfct)
118118
println(io, "Sparse factorization -- qrm_spfct")
119119
end
120120

121-
const GICNTL = ("qrm_eunit", "qrm_print_etree", "qrm_ounit", "qrm_dunit", "qrm_ncpu", "qrm_ngpu", "qrm_max_mem", "qrm_tot_mem")
122-
const PICNTL = ("qrm_ordering", "qrm_minamalg", "qrm_mb", "qrm_nb", "qrm_ib", "qrm_bh", "qrm_keeph", "qrm_rhsnb", "qrm_nlz", "qrm_pinth")
123-
const RCNTL = ("qrm_amalgth", "qrm_mem_relax", "qrm_rd_eps")
124-
const STATS = ("qrm_e_nnz_r", "qrm_e_nnz_h", "qrm_e_facto_flops", "qrm_e_facto_mempeak", "qrm_nnz_r", "qrm_nnz_h", "qrm_facto_flops", "qrm_rd_num")
121+
const GICNTL = (:qrm_eunit, :qrm_print_etree, :qrm_ounit, :qrm_dunit, :qrm_ncpu, :qrm_ngpu, :qrm_max_mem, :qrm_tot_mem)
122+
const PICNTL = (:qrm_ordering, :qrm_minamalg, :qrm_mb, :qrm_nb, :qrm_ib, :qrm_bh, :qrm_keeph, :qrm_rhsnb, :qrm_nlz, :qrm_pinth)
123+
const RCNTL = (:qrm_amalgth, :qrm_mem_relax, :qrm_rd_eps)
124+
const STATS = (:qrm_e_nnz_r, :qrm_e_nnz_h, :qrm_e_facto_flops, :qrm_e_facto_mempeak, :qrm_nnz_r, :qrm_nnz_h, :qrm_facto_flops, :qrm_rd_num)
125125

126126
function error_handling(err :: Cint)
127127
status = "Unknown qr_mumps error: $err"

test/test_qrm.jl

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ n = 100
44
p = 5
55
d = Dict(0 => "auto", 1 => "natural", 2 => "given", 3 => "colamd", 4 => "metis", 5 => "scotch")
66

7+
macro wrappedallocs(expr) # Makes allocation tests more stable on some versions of Julia
8+
argnames = [gensym() for a in expr.args]
9+
quote
10+
function g($(argnames...))
11+
@allocated $(Expr(expr.head, argnames...))
12+
end
13+
$(Expr(:call, :g, [esc(a) for a in expr.args]...))
14+
end
15+
end
16+
717
@testset "least-squares problems" begin
818
@testset "$T" for T in (Float32, Float64, ComplexF32, ComplexF64)
919

@@ -700,9 +710,12 @@ end
700710
spfct = qrm_spfct_init(spmat)
701711

702712
qrm_set(spfct, "qrm_rd_eps", tol)
713+
nbits = @wrappedallocs qrm_set(spfct, "qrm_rd_eps", tol)
714+
@test nbits == 0
703715
qrm_analyse!(spmat, spfct)
704716
qrm_factorize!(spmat, spfct)
705-
nbits = @allocated qrm_get(spfct, "qrm_rd_num")
717+
qrm_get(spfct, "qrm_rd_num")
718+
nbits = @wrappedallocs qrm_get(spfct, "qrm_rd_num")
706719
@test nbits == 0
707720
end
708721
end

0 commit comments

Comments
 (0)