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.
Split from #241
Current implementation uses zero-initialization like
This will initialize
work
memory usingmemset
, which would be fastest to initialize memory. This memory initialization make our code safe for accessing likework[i]
, however, this is relatively heavy comparing to uninitialized code:This takes
O(1)
time while initialization needsO(n)
time, but accesswork[i]
causes undefined behavior even ifi < n
.Because LAPACK routines are assured not to read
work
memory, this uninitialized version can be used.This cost is usually neglectable comparing to most LAPACK routines, which often takes
O(n^2)
orO(n^3)
for largen
. But if we focus on the memory allocation cost #241 #168, it should be considered, and split them to evaluate memory allocation cost properly.Alternative
could be another way. It actually does not initialize the memory, and almost same performance as above uninitialized version. I do not use it on this PR because some API, especially slice_get_mut is not stabilized yet. This will be better choice for future rustc where they are stabilized.
Links