Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
Improves performance by reducing allocations in gradient gathering by returning views into the data/gradient in each primitive. BFGS performance is significantly improved by avoiding the formation of large matrix products.
Details
The original version of the BFGS update repeatedly formed intermediate products for terms such as
h * y
. That product is computed once and reused. Additionally, updates of the formalpha * x * y^T + beta * A
(for vectorsx
,y
, matrixA
, and scalarsalpha
,beta
) can be computed without forming the intermediate productx * y^T
. This is implemented using the ger function innalgebra
.Benchmarks
On my machine: