quantum-compiler / quartz

The Quartz Quantum Compiler
Apache License 2.0
77 stars 19 forks source link

[simulation] mismatch in kernel.qubits and actual gates' qubits #89

Closed caoshiyi closed 1 year ago

caoshiyi commented 1 year ago

I am running the new DP on 29-qubit(28 local) dj circuit and will encounter this mismatch in kernel.qubits and the actual gates qubits. Here there's the H gate on Q1 but Q1 is not in kernel.qubits

cost = 10.4
Kernel schedule with 1 kernels: cost = 10.4
Kernel 0: fusion, qubits [0, 28], gates CircuitSeq {
  Q1 = h(Q1)
  Q28 = u2(Q28, P1, P1)
  Q0 = h(Q0)
  [Q0, Q28] = cx(Q0, Q28)
  Q0 = h(Q0)
}

This can be reproduced by running with the following KernelCost:

KernelCost kernel_cost(
      /*fusion_kernel_costs=*/{0, 10.4, 10.400001, 10.400002, 11, 40, 46, 66},
      /*shared_memory_init_cost=*/10,
      /*shared_memory_gate_cost=*/[](GateType type) { if (type == quartz::GateType::swap) return 1000.0; else return 0.8; },
      /*shared_memory_total_qubits=*/10, /*shared_memory_cacheline_qubits=*/3);
caoshiyi commented 1 year ago

I encounter another case in 29-qubit(28 local) qft circuit for sharedmem kernel:

shared_memory, qubits [10, 11, 12, 14, 15, 16, 27, 28], gates CircuitSeq {
  [Q16, Q15] = cp(Q16, Q15, P0)
  Q15 = h(Q15)
  [Q16, Q14] = cp(Q16, Q14, P1)
  [Q16, Q13] = cp(Q16, Q13, P2)
  [Q15, Q14] = cp(Q15, Q14, P0)
  [Q15, Q13] = cp(Q15, Q13, P1)
  Q14 = h(Q14)
  [Q14, Q13] = cp(Q14, Q13, P0)
  Q13 = h(Q13)
  [Q16, Q12] = cp(Q16, Q12, P3)
  [Q15, Q12] = cp(Q15, Q12, P2)
  [Q14, Q12] = cp(Q14, Q12, P1)
  [Q16, Q11] = cp(Q16, Q11, P4)
  [Q15, Q11] = cp(Q15, Q11, P3)
  [Q14, Q11] = cp(Q14, Q11, P2)
  [Q28, Q10] = cp(Q28, Q10, P17)
  [Q27, Q10] = cp(Q27, Q10, P16)
}

There is the H gate on Q13 while Q13 is the global qubit.