What is the expected enhancement?
Based on recent updates of pulse program representation (especially, schedule block #5679 and frame #5977), a pulse program needs a chain of data processing, i.e. transformation, to conform to the OpenPulse API. This transformation level depends on how the backend compiler is implemented, thus porting concept of passmanager from the circuit transpiler seems to be reasonable approach.
The first attempt has already made by @taalexander:
https://github.com/taalexander/qiskit-terra/tree/pulse-compiler
Now it is good timing to reconsider this great work, while keeping connectivity to the transpiler passmanager.
Necessary transformation chain may look like
- Create a program with pulse builder -> ScheduleBlock with Signal formalism (waveform + frame) # if backend support block and frame, we can directly submit this
- Apply alignment transform to block -> Schedule with Signal formalism
- Resolve Frame -> Schedule with conventional waveform/channel model
- optionally, we can convert ScheduleBlock into DAG representation to resolve time allocation of frame changes before alignment transforms
- Inline subroutines (if transfer layer doesn't support subroutine def) -> Schedule with no subroutine call
- Flatten -> Schedule without nesting # for visualizer
- ParametricPulse to Waveform conversion -> Schedule with acceptable pulses
- Consecutive frame change (phase, frequency) merging -> Schedule without redundant instruction
- Remove compiler directives, i.e. barriers -> Schedule consisting of vISA # this is currently accepted by PulseQobj
What is the expected enhancement?
Based on recent updates of pulse program representation (especially, schedule block #5679 and frame #5977), a pulse program needs a chain of data processing, i.e. transformation, to conform to the OpenPulse API. This transformation level depends on how the backend compiler is implemented, thus porting concept of passmanager from the circuit transpiler seems to be reasonable approach.
The first attempt has already made by @taalexander:
https://github.com/taalexander/qiskit-terra/tree/pulse-compiler
Now it is good timing to reconsider this great work, while keeping connectivity to the transpiler passmanager.
Necessary transformation chain may look like