Skip to content

Commit c69db67

Browse files
Merge pull request #90 from vpuri3/improve
replace copy with similar for performance
2 parents 7c532e8 + 5ca00bf commit c69db67

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

src/basic.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ getindex(L::AddedOperator, i::Int) = sum(op -> op[i], L.ops)
376376
getindex(L::AddedOperator, I::Vararg{Int, N}) where {N} = sum(op -> op[I...], L.ops)
377377

378378
function Base.:*(L::AddedOperator, u::AbstractVecOrMat)
379-
sum(op -> iszero(op) ? similar(u, Bool) * false : op * u, L.ops)
379+
sum(op -> iszero(op) ? zero(u) : op * u, L.ops)
380380
end
381381

382382
function LinearAlgebra.mul!(v::AbstractVecOrMat, L::AddedOperator, u::AbstractVecOrMat)
@@ -522,7 +522,7 @@ Base.:*(L::ComposedOperator, u::AbstractVecOrMat) = foldl((acc, op) -> op * acc,
522522
Base.:\(L::ComposedOperator, u::AbstractVecOrMat) = foldl((acc, op) -> op \ acc, L.ops; init=u)
523523

524524
function cache_self(L::ComposedOperator, u::AbstractVecOrMat)
525-
vec = similar(u)
525+
vec = zero(u)
526526
cache = (vec,)
527527
for i in reverse(2:length(L.ops))
528528
vec = L.ops[i] * vec
@@ -641,7 +641,7 @@ Base.:*(L::InvertedOperator, u::AbstractVecOrMat) = L.L \ u
641641
Base.:\(L::InvertedOperator, u::AbstractVecOrMat) = L.L * u
642642

643643
function cache_self(L::InvertedOperator, u::AbstractVecOrMat)
644-
cache = similar(u)
644+
cache = zero(u)
645645
@set! L.cache = cache
646646
L
647647
end

src/func.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ function FunctionOperator(op;
126126
)
127127

128128
cache = (
129-
similar(input_prototype),
130-
similar(output_prototype),
129+
zero(input_prototype),
130+
zero(output_prototype),
131131
)
132132
isset = cache === nothing
133133

@@ -265,13 +265,13 @@ Base.:\(L::FunctionOperator{false}, u::AbstractVecOrMat) = L.op_inverse(u, L.p,
265265

266266
function Base.:*(L::FunctionOperator{true}, u::AbstractVecOrMat)
267267
_, co = L.cache
268-
du = copy(co)
268+
du = zero(co)
269269
L.op(du, u, L.p, L.t)
270270
end
271271

272272
function Base.:\(L::FunctionOperator{true}, u::AbstractVecOrMat)
273273
ci, _ = L.cache
274-
du = copy(ci)
274+
du = zero(ci)
275275
L.op_inverse(du, u, L.p, L.t)
276276
end
277277

src/tensor.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,10 @@ function cache_self(L::TensorProductOperator, u::AbstractVecOrMat)
123123
mo, no = size(L.outer)
124124
k = size(u, 2)
125125

126-
c1 = similar(u, (mi, no*k)) # c1 = L.inner * u
127-
c2 = similar(u, (no, mi, k)) # permut (2, 1, 3)
128-
c3 = similar(u, (mo, mi*k)) # c3 = L.outer * c2
129-
c4 = similar(u, (mo*mi, k)) # cache v in 5 arg mul!
126+
c1 = false * similar(u, (mi, no*k)) # c1 = L.inner * u
127+
c2 = false * similar(u, (no, mi, k)) # permut (2, 1, 3)
128+
c3 = false * similar(u, (mo, mi*k)) # c3 = L.outer * c2
129+
c4 = false * similar(u, (mo*mi, k)) # cache v in 5 arg mul!
130130

131131
@set! L.cache = (c1, c2, c3, c4,)
132132
L

0 commit comments

Comments
 (0)