Skip to content

Commit

Permalink
Stabilizer micro-optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
WrathfulSpatula committed Feb 5, 2025
1 parent 5abf7a1 commit fc4096c
Showing 1 changed file with 30 additions and 15 deletions.
45 changes: 30 additions & 15 deletions src/qstabilizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -245,10 +245,12 @@ void QStabilizer::seed(const bitLenInt& g)
r[elemCount] = 0U;

BoolVector& xec = x[elemCount];
BoolVector& zec = x[elemCount];
std::fill(xec.begin(), xec.end(), false);
std::fill(z[elemCount].begin(), z[elemCount].end(), false);
std::fill(zec.begin(), zec.end(), false);

for (int i = elemCount - 1; i >= (int)(qubitCount + g); i--) {
const int qcg = (int)(qubitCount + g);
for (int i = elemCount - 1; i >= qcg; i--) {
int f = r[i];
for (int j = qubitCount - 1; j >= 0; j--) {
if (z[i][j]) {
Expand Down Expand Up @@ -873,7 +875,8 @@ void QStabilizer::CNOT(bitLenInt c, bitLenInt t)
zi[c] = !zi[c];

if (xi[c] && (xi[t] == zi[c])) {
r[i] = (r[i] + 2U) & 0x3U;
uint8_t& ri = r[i];
ri = (ri + 2U) & 0x3U;
}
}
},
Expand Down Expand Up @@ -904,7 +907,8 @@ void QStabilizer::AntiCNOT(bitLenInt c, bitLenInt t)
zi[c] = !zi[c];

if (!xi[c] || (xi[t] != zi[c])) {
r[i] = (r[i] + 2U) & 0x3U;
uint8_t& ri = r[i];
ri = (ri + 2U) & 0x3U;
}
}
},
Expand Down Expand Up @@ -935,7 +939,8 @@ void QStabilizer::CY(bitLenInt c, bitLenInt t)

if (zi[t]) {
if (xi[c] && (xi[t] == zi[c])) {
r[i] = (r[i] + 2U) & 0x3U;
uint8_t& ri = r[i];
ri = (ri + 2U) & 0x3U;
}

zi[c] = !zi[c];
Expand Down Expand Up @@ -970,7 +975,8 @@ void QStabilizer::AntiCY(bitLenInt c, bitLenInt t)

if (zi[t]) {
if (!xi[c] || (xi[t] != zi[c])) {
r[i] = (r[i] + 2U) & 0x3U;
uint8_t& ri = r[i];
ri = (ri + 2U) & 0x3U;
}

zi[c] = !zi[c];
Expand Down Expand Up @@ -1004,7 +1010,8 @@ void QStabilizer::CZ(bitLenInt c, bitLenInt t)
zi[c] = !zi[c];

if (xi[c] && (zi[t] == zi[c])) {
r[i] = (r[i] + 2U) & 0x3U;
uint8_t& ri = r[i];
ri = (ri + 2U) & 0x3U;
}
}

Expand Down Expand Up @@ -1041,7 +1048,8 @@ void QStabilizer::AntiCZ(bitLenInt c, bitLenInt t)
zi[c] = !zi[c];

if (!xi[c] || (zi[t] != zi[c])) {
r[i] = (r[i] + 2U) & 0x3U;
uint8_t& ri = r[i];
ri = (ri + 2U) & 0x3U;
}
}

Expand Down Expand Up @@ -1100,15 +1108,17 @@ void QStabilizer::ISwap(bitLenInt c, bitLenInt t)
zi[c] = !zi[c];

if (!xi[c] && zi[t]) {
r[i] = (r[i] + 2U) & 0x3U;
uint8_t& ri = r[i];
ri = (ri + 2U) & 0x3U;
}
}

if (xi[c]) {
zi[t] = !zi[t];

if (zi[c] && !xi[t]) {
r[i] = (r[i] + 2U) & 0x3U;
uint8_t& ri = r[i];
ri = (ri + 2U) & 0x3U;
}
}

Expand Down Expand Up @@ -1142,15 +1152,17 @@ void QStabilizer::IISwap(bitLenInt c, bitLenInt t)
zi[t] = !zi[t];

if (zi[c] && !xi[t]) {
r[i] = (r[i] + 2U) & 0x3U;
uint8_t& ri = r[i];
ri = (ri + 2U) & 0x3U;
}
}

if (xi[t]) {
zi[c] = !zi[c];

if (!xi[c] && zi[t]) {
r[i] = (r[i] + 2U) & 0x3U;
uint8_t& ri = r[i];
ri = (ri + 2U) & 0x3U;
}
}

Expand All @@ -1167,9 +1179,12 @@ void QStabilizer::H(bitLenInt t)

ParFor(
[this, t](const bitLenInt& i) {
BoolVector::swap(x[i][t], z[i][t]);
if (x[i][t] && z[i][t]) {
r[i] = (r[i] + 2U) & 0x3U;
BoolVector& xi = x[i];
BoolVector& zi = z[i];
BoolVector::swap(xi[t], zi[t]);
if (xi[t] && zi[t]) {
uint8_t& ri = r[i];
ri = (ri + 2U) & 0x3U;
}
},
{ t });
Expand Down

0 comments on commit fc4096c

Please sign in to comment.