JuliaDiff / JuliaDiff/ChainRules.jl
Smarter conjugation for inplace BLAS rules
Nobody has claimed this yet.
- Dominant language
- Julia
- Stars
- 475
- Forks
- 98
- PR merge metrics
- No merged PRs in 30d
Description
@sethaxen wrote in https://github.com/JuliaDiff/ChainRules.jl/pull/279#pullrequestreview-506908830
not allocate new conjugated matrices in the BLAS rules? e.g. in
https://github.com/JuliaDiff/ChainRules.jl/blob/c877550430a3cb0f657f43ccbf4e64b13b7177a7/src/rulesets/LinearAlgebra/blas.jl#L134-L137
,
we allocate a new matrixA, which I think can be made faster by allocating a new vector instead and then conjugating a vector in-place:∂x = InplaceableThunk( @thunk(gemv('N', α', conj(A), ȳ)), x̄ -> conj!(gemv!('N', α, A, conj(ȳ), one(T), conj!(x̄))) )
Definately worth benchmarking
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in src/rulesets/LinearAlgebra/blas.jl at lines 134-137 and inspect the existing InplaceableThunk and BLAS calls. Benchmark the current matrix-allocation path against the proposed vector and in-place conjugation approach; done means the chosen implementation is faster without changing rule behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia
- Domain
- performance
- Issue type
- Refactor
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100