Skip to content

Commit

Permalink
feat: Batches in custom RB unrolling
Browse files Browse the repository at this point in the history
  • Loading branch information
stavros11 committed Feb 18, 2024
1 parent b7ba986 commit 8833f60
Showing 1 changed file with 32 additions and 23 deletions.
55 changes: 32 additions & 23 deletions src/qibolab/instruments/qm/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ class QMController(Controller):
If ``None`` the program will not be dumped.
"""
batch_len: int = 10000

manager: Optional[QuantumMachinesManager] = None
"""Manager object used for controlling the Quantum Machines cluster."""
Expand Down Expand Up @@ -380,38 +381,43 @@ def play_sequences(self, qubits, couplers, sequences, options):
self.config.register_port(qubit.flux.port)
self.config.register_flux_element(qubit)

batch = UnrollingBatch()
batches = [UnrollingBatch()]
for sequence in sequences:
qmsequence, ros = self.create_sequence(qubits, sequence, [])
batch.add(qmsequence, ros)
if len(batches[-1]) + len(qmsequence.qmpulses) > self.batch_len:
batches.append(UnrollingBatch())
batches[-1].add(qmsequence, ros)

results = defaultdict(list)

experiment, acquisitions = batch.program(qubits, options)
assert len(acquisitions) == 1
acquisition = next(iter(acquisitions.values()))
print(f"Executing {len(batches)} batches")
for batch in batches:
experiment, acquisitions = batch.program(qubits, options)
assert len(acquisitions) == 1
acquisition = next(iter(acquisitions.values()))

if self.script_file_name is not None:
with open(self.script_file_name, "w") as file:
file.write(generate_qua_script(experiment, self.config.__dict__))
if self.script_file_name is not None:
with open(self.script_file_name, "w") as file:
file.write(generate_qua_script(experiment, self.config.__dict__))

if self.simulation_duration is not None:
result = self.simulate_program(experiment)
results = {}
for qmpulse in batch.ro_pulses:
pulse = qmpulse.pulse
results[pulse.qubit] = results[pulse.serial] = result
return results
if self.simulation_duration is not None:
result = self.simulate_program(experiment)
results = {}
for qmpulse in batch.ro_pulses:
pulse = qmpulse.pulse
results[pulse.qubit] = results[pulse.serial] = result
return results

result = self.execute_program(experiment)
handles = result.result_handles
handles.wait_for_all_values()
result = self.execute_program(experiment)
handles = result.result_handles
handles.wait_for_all_values()

data = acquisition.fetch(handles)
assert len(acquisition.keys) == len(data)
for serial, result in zip(acquisition.keys, data):
results[acquisition.qubit].append(result)
results[serial].append(result)

data = acquisition.fetch(handles)
assert len(acquisition.keys) == len(data)
for serial, result in zip(acquisition.keys, data):
results[acquisition.qubit].append(result)
results[serial].append(result)
return results


Expand All @@ -424,6 +430,9 @@ class UnrollingBatch:
qd_pulse: Optional[QMPulse] = None
ro_pulse: Optional[QMPulse] = None

def __len__(self):
return len(self.phases)

def add(self, qmsequence, ro_pulses):
self.ro_pulses.extend(ro_pulses)
for qmpulse in qmsequence.qmpulses:
Expand Down

0 comments on commit 8833f60

Please sign in to comment.