qat.purr.backends.qblox.live module

class AbstractQbloxLiveEngine(model, startup_engine=True)

Bases: LiveDeviceEngine, InvokerMixin

static combine_playbacks(playbacks)

Combines acquisition objects from multiple acquire instructions in multiple readout targets. Notice that groupby() preserves (original) relative order, which makes it honour the (sequential) lexicographical order of the loop nest:

playback[target][“acq_0”] contains (potentially) a list of acquisitions collected in the same order as the order in which the packages were sent to the FPGA.

Although acquisition names are enough for unicity in practice, the playback’s structure distinguishes different (multiple) acquisitions per readout target, thus making it more robust.

optimize(instructions)

Runs optimization passes specific to this hardware.

process_playback(playback, res_mgr)

Now that the combined playback is ready, we can compute and process results as required by customers. This requires loop nest information as well as post-processing and shaping requirements.

shutdown()

Shuts down the underlying hardware when this instance is no longer in use.

startup()

Starts up the underlying hardware or does nothing if already started.

validate(instructions)

Validates this graph for execution on the current hardware.

class NewQbloxLiveEngine(model, startup_engine=True)

Bases: AbstractQbloxLiveEngine

Unlike vanilla QbloxLiveEngine, this engine does not use static iteration and injection mechanism. It leverages Q1’s programming model to accelerate a handful of pulse-level algorithms.

Not all algorithms fall within Q1’s capabilities. While this remains an analysis issue we saw great flexibility in forking out this engine to allow R&D without compromising existing execution environment. Nevertheless, there should be a hybrid JIT-like reconciliation in the future that can run both IR features that still need static iteration while being able to accelerate programs whenever possible.

See QbloxLiveEngine and QbloxLiveEngineAdapter.

build_pass_pipeline(*args, **kwargs)
class QbloxLiveEngine(model, startup_engine=True)

Bases: AbstractQbloxLiveEngine

build_pass_pipeline(*args, **kwargs)
class QbloxLiveEngineAdapter(model, startup_engine=True, enable_hax=False)

Bases: LiveDeviceEngine

A manual adapter of the new and legacy engines. Users can switch on and off HW acceleration by using the enable_hax flag.

There should be a proper hybrid, dynamic, JIT-like engine in the future that can leverage the HW to accelerate programs whenever possible.

model: QbloxLiveHardwareModel
class QbloxLiveHardwareModel(control_hardware=None)

Bases: LiveHardwareModel

create_engine(startup_engine=True)
create_runtime(existing_engine=None)