Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimize LM controlled kernels [sc-73461] #882

Merged
merged 73 commits into from
Sep 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
9cda69a
Implement native PauliRot in LightningQubit.
vincentmr Jul 30, 2024
37418d9
Fix issues wih I in pauli word.
vincentmr Jul 31, 2024
e0d5377
Directly get indices and data.
vincentmr Jul 31, 2024
0266860
Change core_function signature for applyNCN
vincentmr Jul 31, 2024
5d49dab
Include sin in data.
vincentmr Jul 31, 2024
0a7a97e
*= c while copying arr.
vincentmr Jul 31, 2024
06675c7
Use numpy request to pass pointers.
vincentmr Jul 31, 2024
9e6863f
generateBitPatterns
vincentmr Jul 31, 2024
c915b96
Permute early.
vincentmr Aug 1, 2024
3a29b66
Do not precompute offsets.
vincentmr Aug 1, 2024
e74a2d4
Modify stopping_condition and clean up.
vincentmr Aug 1, 2024
1e6d324
Clean up
vincentmr Aug 1, 2024
8f3c99f
Auto update version from '0.38.0-dev20' to '0.38.0-dev22'
ringo-but-quantum Aug 1, 2024
1645a5a
Fix device test.
vincentmr Aug 2, 2024
8cca37e
Replace indices, data arguments by word for PauliRot.
vincentmr Aug 2, 2024
4a51fc6
Auto update version from '0.38.0-dev22' to '0.38.0-dev25'
ringo-but-quantum Aug 2, 2024
3d10b73
Merge branch 'master' into lq_pauli_rot
vincentmr Aug 2, 2024
aa24f4d
Fix few lint warnings.
vincentmr Aug 2, 2024
6927caf
Update changelog
vincentmr Aug 2, 2024
ee34eeb
Fix docstring.
vincentmr Aug 2, 2024
c9dc41e
Fix docstrings.
vincentmr Aug 5, 2024
c702b64
Merge remote-tracking branch 'origin/master' into lq_pauli_rot
vincentmr Aug 5, 2024
9bb5a8a
Auto update version from '0.38.0-dev25' to '0.38.0-dev26'
ringo-but-quantum Aug 5, 2024
6cb0f8e
Update GateIndices.hpp
vincentmr Aug 5, 2024
b8488c2
WIP loops
vincentmr Aug 6, 2024
670570f
Avoid copying arr into coeffs.
vincentmr Aug 7, 2024
bc58a7d
Comment code a bit.
vincentmr Aug 7, 2024
f43a77f
Auto update version from '0.38.0-dev26' to '0.38.0-dev27'
ringo-but-quantum Aug 7, 2024
6a79685
Apply suggestions from code review
vincentmr Aug 7, 2024
5bc8551
Revert to old implementation.
vincentmr Aug 8, 2024
32b9b34
Merge remote-tracking branch 'origin/lq_pauli_rot' into lq_pauli_rot
vincentmr Aug 8, 2024
b99e108
Add doc [skip ci].
vincentmr Aug 8, 2024
4b99691
Add PauliRot C++ tests.
vincentmr Aug 8, 2024
9072665
Merge branch 'master' into lq_pauli_rot
vincentmr Aug 8, 2024
2741f29
Reimplement applyPauliRot
vincentmr Aug 14, 2024
6326894
popcount
vincentmr Aug 14, 2024
73cfaed
Clean up.
vincentmr Aug 15, 2024
7b06ec1
Auto update version from '0.38.0-dev27' to '0.38.0-dev34'
ringo-but-quantum Aug 15, 2024
8762c39
Merge remote-tracking branch 'origin/master' into lq_pauli_rot
vincentmr Aug 15, 2024
9398b37
Merge remote-tracking branch 'origin/lq_pauli_rot' into lq_pauli_rot
vincentmr Aug 15, 2024
63ea43f
Fix setStateVecotr
vincentmr Aug 15, 2024
1b0aba9
Fix adjoint
vincentmr Aug 15, 2024
9059862
Fix tidy
vincentmr Aug 15, 2024
15b533e
Fix capture
vincentmr Aug 15, 2024
fe390cd
Merge branch 'master' into lq_pauli_rot
vincentmr Aug 15, 2024
f9bff5a
trigger ci
vincentmr Aug 15, 2024
e90ee3f
Clean up runner
vincentmr Aug 15, 2024
f04c69f
Auto update version from '0.38.0-dev34' to '0.38.0-dev35'
ringo-but-quantum Aug 15, 2024
0d1ad50
Fix tidy
vincentmr Aug 15, 2024
72d219f
sudo du -sh
vincentmr Aug 15, 2024
d1307f1
sudo du -sh
vincentmr Aug 15, 2024
2d37fdd
sudo du -sh
vincentmr Aug 15, 2024
b0f505e
sudo du -sh
vincentmr Aug 15, 2024
d8aea05
sudo du -sh
vincentmr Aug 15, 2024
509de91
sudo du -sh
vincentmr Aug 15, 2024
e46551b
sudo du -sh
vincentmr Aug 15, 2024
694f856
PauliRot in LK
vincentmr Aug 15, 2024
509c035
Update changelog [skip ci].
vincentmr Aug 15, 2024
f0d222e
Merge remote-tracking branch 'origin/master' into lk_pauli_rot
vincentmr Aug 20, 2024
131583f
Auto update version from '0.38.0-dev38' to '0.38.0-dev39'
ringo-but-quantum Aug 20, 2024
b36c48f
PauliRot => multirz
vincentmr Aug 20, 2024
1ff9894
Simplify applyNC[N,1-2].
vincentmr Aug 30, 2024
5ec4b16
Precompute indices with generateBitPatterns in all controlled LM kern…
vincentmr Aug 30, 2024
2fc6fbc
Merge remote-tracking branch 'origin/master' into lq_new_control
vincentmr Sep 10, 2024
3cadeb0
Auto update version from '0.39.0-dev15' to '0.39.0-dev16'
ringo-but-quantum Sep 10, 2024
30a2863
Update changelog
vincentmr Sep 10, 2024
a444f5b
Fix tidy
vincentmr Sep 10, 2024
7a30fee
Merge branch 'master' into lq_new_control
vincentmr Sep 11, 2024
aab7375
Auto update version from '0.39.0-dev16' to '0.39.0-dev17'
ringo-but-quantum Sep 11, 2024
280b09e
Merge branch 'master' into lq_new_control
vincentmr Sep 11, 2024
1a98c01
Auto update version from '0.39.0-dev19' to '0.39.0-dev20'
ringo-but-quantum Sep 11, 2024
acf8b8a
Apply alfredo's suggestion.
vincentmr Sep 11, 2024
3751426
Implement SHuli's parity_2_offset.
vincentmr Sep 11, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@
* Update GitHub actions in response to a high-severity vulnerability.
[(#887)](https://github.com/PennyLaneAI/pennylane-lightning/pull/887)

* Optimize and simplify controlled kernels in Lightning-Qubit.
[(#882)](https://github.com/PennyLaneAI/pennylane-lightning/pull/882)

* Optimize gate cache recording for `lightning.tensor` C++ layer.
[(#879)](https://github.com/PennyLaneAI/pennylane-lightning/pull/879)

Expand Down
2 changes: 1 addition & 1 deletion pennylane_lightning/core/_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@
Version number (major.minor.patch[-label])
"""

__version__ = "0.39.0-dev19"
__version__ = "0.39.0-dev20"
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,37 @@ auto generateBitPatterns(const std::vector<std::size_t> &qubitIndices,
}
return indices;
}

/**
* @brief Introduce quantum controls in indices generated by
* generateBitPatterns.
*
* @param indices Indices for the operation.
* @param num_qubits Number of qubits in register.
* @param controlled_wires Control wires.
* @param controlled_values Control values (false or true).
*/
void controlBitPatterns(std::vector<std::size_t> &indices,
const std::size_t num_qubits,
const std::vector<std::size_t> &controlled_wires,
const std::vector<bool> &controlled_values) {
constexpr std::size_t one{1U};
if (controlled_wires.empty()) {
return;
}
vincentmr marked this conversation as resolved.
Show resolved Hide resolved
std::vector<std::size_t> controlled_values_i(controlled_values.size());
std::transform(controlled_values.begin(), controlled_values.end(),
controlled_values_i.begin(),
[](const bool v) { return static_cast<std::size_t>(v); });
std::for_each(
maliasadi marked this conversation as resolved.
Show resolved Hide resolved
indices.begin(), indices.end(),
[num_qubits, &controlled_wires, &controlled_values_i](std::size_t &i) {
for (std::size_t k = 0; k < controlled_wires.size(); k++) {
const std::size_t rev_wire =
(num_qubits - 1) - controlled_wires[k];
const std::size_t value = controlled_values_i[k];
i = (i & ~(one << rev_wire)) | (value << rev_wire);
multiphaseCFD marked this conversation as resolved.
Show resolved Hide resolved
}
});
}
} // namespace Pennylane::LightningQubit::Gates
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,19 @@ auto getIndicesAfterExclusion(const std::vector<std::size_t> &indicesToExclude,
auto generateBitPatterns(const std::vector<std::size_t> &qubitIndices,
std::size_t num_qubits) -> std::vector<std::size_t>;

/**
* @brief Introduce quantum controls in indices generated by
* generateBitPatterns.
*
* @param indices Indices for the operation.
* @param num_qubits Number of qubits in register.
* @param controlled_wires Control wires.
* @param controlled_values Control values (false or true).
*/
void controlBitPatterns(std::vector<std::size_t> &indices,
std::size_t num_qubits,
const std::vector<std::size_t> &controlled_wires,
const std::vector<bool> &controlled_values);
/**
* @brief Internal utility struct to track data indices of application for
* operations.
Expand Down
Loading
Loading