Skip to content

Commit

Permalink
Optimize QPager::Compose()
Browse files Browse the repository at this point in the history
  • Loading branch information
WrathfulSpatula committed Sep 5, 2022
1 parent bafa9c5 commit daf6990
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
2 changes: 1 addition & 1 deletion include/qpager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ typedef std::shared_ptr<QPager> QPagerPtr;
* A "Qrack::QPager" splits a "Qrack::QEngine" implementation into equal-length "pages." This helps both optimization
* and distribution of a single coherent quantum register across multiple devices.
*/
class QPager : public QEngine {
class QPager : public QEngine, public std::enable_shared_from_this<QEngine> {
protected:
bool useHardwareThreshold;
bool useGpuThreshold;
Expand Down
12 changes: 10 additions & 2 deletions src/qpager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -564,8 +564,9 @@ void QPager::CombineAndOpControlled(

bitLenInt QPager::Compose(QPagerPtr toCopy)
{
const bitLenInt toRet = qubitCount;
if (!toCopy->qubitCount) {
return qubitCount;
return toRet;
}

const bitLenInt nQubitCount = qubitCount + toCopy->qubitCount;
Expand All @@ -580,6 +581,14 @@ bitLenInt QPager::Compose(QPagerPtr toCopy)
return qPages[0U]->Compose(toCopy->qPages[0U]);
}

if (qubitCount < toCopy->qubitCount) {
QPagerPtr toCopyClone = std::dynamic_pointer_cast<QPager>(toCopy->Clone());
toCopyClone->Compose(shared_from_this(), 0U);
qPages = toCopyClone->qPages;
SetQubitCount(qubitCount + toCopy->qubitCount);
return toRet;
}

const bitCapIntOcl nPagePow = pow2Ocl(thresholdQubitsPerPage);
const bitCapIntOcl pagePow = pageMaxQPower();
bitCapIntOcl nOffset = 0U;
Expand Down Expand Up @@ -618,7 +627,6 @@ bitLenInt QPager::Compose(QPagerPtr toCopy)
nQPages.pop_back();
qPages = nQPages;

bitLenInt toRet = qubitCount;
SetQubitCount(nQubitCount);

return toRet;
Expand Down

0 comments on commit daf6990

Please sign in to comment.