# What is the minimal delay between gates on IBM devices?

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.

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

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
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.

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

from qiskit import schedule, QuantumCircuit, transpile, IBMQ
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')


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