Skip to content

Pulse transformation passes #6121

@nkanazawa1989

Description

@nkanazawa1989

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    mod: pulseRelated to the Pulse moduletype: enhancementIt's working, but needs polishing

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions