Alternative architecture for backend development with separate DeviceCompiler and BackendCompiler
Motivation:
- The coupling between the
QuantumDevice
and theHardwareCompilationConfig
is awkward - The interface between
Quantify
and aQuantifyBackend
is not well-defined (theQuantifyBackend
suppliesCompilationNode
s to theQuantifyCompiler
; the device and hardware compilation are not well-separated) - The (hardware-specific)
CompiledInstructions
get passed around a lot inQuantify
between theQuantifyCompiler
,ScheduleGettable
, andInstrumentCoordinator
s, while they are only used by theInstrumentCoordinatorComponent
s (in theQuantifyBackend
)
graph BT;
user[User]
subgraph Quantify
ScheduleGettable
QuantumDevice
DeviceCompiler
InstrumentCoordinator
QuantumDevice -->|DeviceCompilationConfig| ScheduleGettable
ScheduleGettable -->|Schedule\n DeviceCompilationConfig| DeviceCompiler
InstrumentCoordinator -->|Raw Dataset| ScheduleGettable
DeviceCompiler -->|CompiledSchedule device-layer| ScheduleGettable
ScheduleGettable -->|CompiledSchedule device-layer| InstrumentCoordinator
end
subgraph QuantifyBackend
InstrumentCoordinatorComponent
BackendCompiler
InstrumentCoordinatorComponent -->|CompiledSchedule device-layer\n HardwareConfig| BackendCompiler
BackendCompiler -->|CompiledSchedule hardware-layer| InstrumentCoordinatorComponent
end
subgraph Hardware
drivers[Hardware-specific drivers]
instruments[Physical instruments]
end
user -->|Schedule| ScheduleGettable
user -->|DeviceConfig input| QuantumDevice
ScheduleGettable -->|Processed Dataset| user
user -->|HardwareConfig input| InstrumentCoordinatorComponent
InstrumentCoordinator -->|CompiledSchedule device-layer| InstrumentCoordinatorComponent
InstrumentCoordinatorComponent -->|Partial Raw Dataset| InstrumentCoordinator
InstrumentCoordinatorComponent -->|Compiled Instructions| drivers
drivers -->|Data points| InstrumentCoordinatorComponent
drivers <--> instruments
Edited by Calvin Dijksman