Skip to content

Commit 5a231e9

Browse files
committed
conform nprod, ntprod, nctprod + add few views, but fail to make CuArray working
1 parent 899201a commit 5a231e9

1 file changed

Lines changed: 13 additions & 11 deletions

File tree

src/compressed_lbfgs.jl

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,6 @@ mutable struct CompressedLBFGSData{T, M<:AbstractMatrix{T}, V<:AbstractVector{T}
7878
inverse_intermediate_2::LowerTriangular{T,M} # 2mem * 2mem
7979
intermediary_vector::V # 2mem
8080
sol::V # 2mem
81-
82-
nprod::I
8381
end
8482

8583
"""
@@ -106,9 +104,7 @@ function CompressedLBFGSData(n::I; mem::I=5, T=Float64, M=default_matrix_type(;
106104
intermediary_vector = V(undef, 2*mem)
107105
sol = V(undef, 2*mem)
108106

109-
nprod = 0
110-
111-
return CompressedLBFGSData{T,M,V,I}(mem, n, k, α, Sₖ, Yₖ, Dₖ, Lₖ, chol_matrix, intermediate_diagonal, intermediate_1, intermediate_2, inverse_intermediate_1, inverse_intermediate_2, intermediary_vector, sol, nprod)
107+
return CompressedLBFGSData{T,M,V,I}(mem, n, k, α, Sₖ, Yₖ, Dₖ, Lₖ, chol_matrix, intermediate_diagonal, intermediate_1, intermediate_2, inverse_intermediate_1, inverse_intermediate_2, intermediary_vector, sol)
112108
end
113109

114110
mutable struct CompressedLBFGSOperator{T, M<:AbstractMatrix{T}, V<:AbstractVector{T}, F, I <: Integer} <: AbstractQuasiNewtonOperator{T}
@@ -121,6 +117,9 @@ mutable struct CompressedLBFGSOperator{T, M<:AbstractMatrix{T}, V<:AbstractVecto
121117
prod!::F # apply the operator to a vector
122118
tprod!::F # apply the transpose operator to a vector
123119
ctprod!::F # apply the transpose conjugate operator to a vector
120+
nprod::I
121+
ntprod::I
122+
nctprod::I
124123
end
125124

126125
function CompressedLBFGSOperator(n::I; mem::I=5, T=Float64, M=default_matrix_type(; T), V=default_vector_type(; T)) where {I <: Integer}
@@ -142,7 +141,7 @@ function CompressedLBFGSOperator(n::I; mem::I=5, T=Float64, M=default_matrix_typ
142141

143142
F = typeof(prod!)
144143

145-
return CompressedLBFGSOperator{T,M,V,F,I}(nrow, ncol, symmetric, hermitian, Bv, data, prod!, prod!, prod!)
144+
return CompressedLBFGSOperator{T,M,V,F,I}(nrow, ncol, symmetric, hermitian, Bv, data, prod!, prod!, prod!, 0, 0, 0)
146145
end
147146

148147
has_args5(op::CompressedLBFGSOperator) = true
@@ -234,14 +233,17 @@ function precompile_iterated_structure!(data::CompressedLBFGSData)
234233
mul!(view(data.intermediate_2, data.k+1:2*data.k, 1:data.k), view(data.Lₖ, 1:data.k, 1:data.k), view(data.intermediate_diagonal, 1:data.k, 1:data.k))
235234
view(data.intermediate_2, data.k+1:2*data.k, 1:data.k) .= view(data.intermediate_2, data.k+1:2*data.k, 1:data.k) .* -1
236235

237-
view(data.inverse_intermediate_1, 1:2*data.k, 1:2*data.k) .= inv(data.intermediate_1[1:2*data.k, 1:2*data.k])
238-
view(data.inverse_intermediate_2, 1:2*data.k, 1:2*data.k) .= inv(data.intermediate_2[1:2*data.k, 1:2*data.k])
236+
view(data.inverse_intermediate_1, 1:2*data.k, 1:2*data.k) .= inv(view(data.intermediate_1, 1:2*data.k, 1:2*data.k))
237+
view(data.inverse_intermediate_2, 1:2*data.k, 1:2*data.k) .= inv(view(data.intermediate_2, 1:2*data.k, 1:2*data.k))
239238
end
240239

241240
# Algorithm 3.2 (p15)
242-
LinearAlgebra.mul!(Bv::V, op::CompressedLBFGSOperator{T,M,V}, v::V) where {T,M,V<:AbstractVector{T}} = LinearAlgebra.mul!(Bv, op.data, v)
241+
function LinearAlgebra.mul!(Bv::V, op::CompressedLBFGSOperator{T,M,V}, v::V) where {T,M,V<:AbstractVector{T}}
242+
op.nprod += 1
243+
return LinearAlgebra.mul!(Bv, op.data, v)
244+
end
245+
243246
function LinearAlgebra.mul!(Bv::V, data::CompressedLBFGSData{T,M,V}, v::V) where {T,M,V<:AbstractVector{T}}
244-
data.nprod += 1
245247
# step 1-4 and 6 mainly done by Base.push!
246248
# step 5
247249
mul!(view(data.sol, 1:data.k), transpose(view(data.Yₖ, :, 1:data.k)), v)
@@ -265,6 +267,6 @@ end
265267
Resets the CompressedLBFGS data of the given operator.
266268
"""
267269
function reset!(op::CompressedLBFGSOperator)
268-
op.data.nprod = 0
270+
op.nprod = 0
269271
return op
270272
end

0 commit comments

Comments
 (0)