diff --git a/src/checksolution.jl b/src/checksolution.jl index dd84719..877d760 100644 --- a/src/checksolution.jl +++ b/src/checksolution.jl @@ -3,34 +3,20 @@ using IntervalArithmetic IntervalArithmetic.setrounding(Interval, :tight) IntervalArithmetic.setformat(sigfigs=12) -function compute_SOS(pm::AbstractMatrix{<:Integer}, Q::AbstractMatrix{<:Real}) - thr_count = Threads.nthreads() - - - d, r = divrem(size(Q,2), thr_count) - batch_result = [zeros(eltype(Q), maximum(pm)) for _ in 1:thr_count] - - Threads.@threads for k in 1:Threads.nthreads() - for i in 1:d - idx = d*(k-1)+i - GroupRings.fmac!(batch_result[k], view(Q,:,idx), view(Q,:,idx), pm) - end +function compute_SOS(pm::Array{I,2}, Q) where I<:Integer + result = zeros(eltype(Q), maximum(pm)); + for i in 1:size(Q,2) + GroupRings.fmac!(result, view(Q,:,i), view(Q,:,i), pm) end - - result = sum(batch_result) - for idx in thr_count*d+1:(thr_count*d + r) - GroupRings.fmac!(result, view(Q,:,idx), view(Q,:,idx), pm) - end - return result end -function compute_SOS(RG::GroupRing, Q::AbstractMatrix) +function compute_SOS(RG::GroupRing, Q::AbstractArray) result = compute_SOS(RG.pm, Q) return GroupRingElem(result, RG) end -function augIdproj(Q::AbstractMatrix{<:Real}) +function augIdproj(Q::AbstractMatrix{T}) where {T<:Real} result = zeros(size(Q)) l = size(Q, 2) Threads.@threads for j in 1:l