From fd5710e5177b94a529f5cd74401be71613ec02dd Mon Sep 17 00:00:00 2001 From: "O'Keefe, Colin B" Date: Thu, 11 Apr 2024 13:05:40 -0700 Subject: [PATCH 1/2] Add nonblocking semantics to quilt spec --- specgen/spec/sec-quilt.s | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/specgen/spec/sec-quilt.s b/specgen/spec/sec-quilt.s index 92682f0..2afc39c 100644 --- a/specgen/spec/sec-quilt.s +++ b/specgen/spec/sec-quilt.s @@ -361,6 +361,12 @@ and neither match @c{DAGGER DAGGER T 0}. FENCE @rep[:min 0]{@ms{Qubit}} } +@syntax[:name "Nonblocking"]{ + NONBLOCKING @ms{Pulse} + @alt NONBLOCKING @ms{Capture} + @alt NONBLOCKING @ms{Raw Capture} +} + @p{Delay allows for the insertion of a gap within a list of pulses or gates with a specified duration in seconds.} @@ -378,6 +384,12 @@ fence statement happen after all operations involving the specified qubits that preceed the fence statement. If no qubits are specified, the @c{FENCE} operation implicitly applies to all qubits on the device.} +@p{The non-blocking modifier allows for multiple concurrent pulses on +the same qubit. An operation marked as @c{NONBLOCKING} is not excluded +by pulse operations on intersecting frames. Combining the +non-blocking modifier with fence is usually preferred. See the example +below.} + @p{Examples: @clist{ @@ -389,5 +401,17 @@ X 1 # This X gate will be applied to qubit 1 AFTER the X gate on qubit 0 X 0 DELAY 0 100e-6 MEASURE 0 ro[0] + +# Nonblocking example +FENCE 0 1 +NONBLOCKING PULSE 0 "xy" flat(duration: 1.0, iq: 1.0) +NONBLOCKING PULSE 0 1 "ff" flat(duration: 1.0, iq: 1.0) +FENCE 0 1 } } + +@p{In the non-blocking example, the pulses on frame @c{0 "xy"} and on +frame @c{0 1 "ff"} are free to act on qubit @c{0} +simultaneously. Fencing the resources used by the mutually +non-blocking operations isolates them in the schedule, ensuring that +no undesired simultaneity is permitted.} From cd324720097eea7dcf15374fe6b4844b4880fd7e Mon Sep 17 00:00:00 2001 From: "O'Keefe, Colin B" Date: Thu, 11 Apr 2024 13:16:03 -0700 Subject: [PATCH 2/2] clarification --- specgen/spec/sec-quilt.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/specgen/spec/sec-quilt.s b/specgen/spec/sec-quilt.s index 2afc39c..b9fe694 100644 --- a/specgen/spec/sec-quilt.s +++ b/specgen/spec/sec-quilt.s @@ -386,9 +386,9 @@ implicitly applies to all qubits on the device.} @p{The non-blocking modifier allows for multiple concurrent pulses on the same qubit. An operation marked as @c{NONBLOCKING} is not excluded -by pulse operations on intersecting frames. Combining the -non-blocking modifier with fence is usually preferred. See the example -below.} +by pulse operations on intersecting frames when those operations are +also marked as non-blocking. Combining the non-blocking modifier with +fence is usually preferred. See the example below.} @p{Examples: