Change .flatten()
to .ravel()
to avoid copies
#74
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.
While working on a qibo callback I realized that qibojit creates copies, instead of using in-place updates, when simulating density matrices. This is true on CPU and GPU.
Here is a script to reproduce this issue:
will print
which means that the matrix was copied somewhere, as the initial state was not modified. The equivalent for state vectors
will print
so it modifies the initial state too.
Apparently using
state.flatten()
creates a copy of the state. Here I am replacing it with.ravel()
which returns a flattened version without copying. I tested with cupy and.flatten()
indeed duplicates the used GPU memory, while.ravel()
does not. The above example is also fixed with this branch. I have not checked how the overal performance is affected for density matrix simulation, but it would be good to do so before merging.