2
$\begingroup$

Suppose I create the very simple circuit

OPENQASM 2.0;
include "qelib1.inc";
qreg q[1];
x q[0];
barrier q[0];
x q[0];

and submit it to an IBM backend. How do I find the buffer time between the end of the first X and the beginning of the second X for a given backend? I've seen the number ~10 ns thrown around in the literature (see this paper above Fig. 1), but this value is not displayed in the calibration data for a device.

Just for clarify, I am NOT referring to the duration of X but the duration of time between the X pulses even "when it appears to be 0."

If there's a way to obtain it via Qiskit on a per-calibration basis, that's even better, but just a reference which verifies that 10 ns is a reasonable value would suffice.

$\endgroup$

2 Answers 2

2
$\begingroup$

Short answer: The minimal delay between gates on IBMQ chips is $0$ nano-seconds.

Longer answer:

The barrier operation is not a hardware operation, it just give instructions to the compiler to schedule the circuit correctly. As such, its duration is $0$ nano-seconds as it is never executed on the hardware. You can check this on luciano answer: the barrier operation is not present in the generated schedule.

If your question was rather "what it is the minimum non-zero delay between two gates on IBM chips", the answer is dt = $\frac{2}{9}$ nano-seconds on the most recent backends. You can recover this value for each backend with

from qiskit import schedule, QuantumCircuit, transpile, IBMQ
IBMQ.load_account()
provider = IBMQ.get_provider()
backend = provider.get_backend("ibmq_armonk")

dt = backend.configuration().dt
print(f"dt = {dt*1e9:.2f} ns")

Pulses duration should be a multiple of 16dt but delay duration can be any multiple of dt.

$\endgroup$
3
$\begingroup$

Not an expert here, but my impression is that the rotations are scheduled one after the other one, with no delay.

Taking your example:

from qiskit import schedule, QuantumCircuit, transpile, IBMQ
IBMQ.load_account()
provider = IBMQ.get_provider()

circuit = QuantumCircuit(1)
circuit.x(0)
circuit.barrier(0)
circuit.x(0)
circuit_t = transpile(circuit, backend)

If we schedule that one on ibmq_lima:

backend = provider.get_backend('ibmq_lima')
print('lima openpulse support:', backend.configuration().open_pulse)

schedule(circuit_t, backend).draw(backend=backend, time_unit='ns')

enter image description here

It seems to me that the distance between pulses is not 10ns.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.