Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Add new multithreaded TwoQubitPeepholeOptimization pass #13419

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from

Commits on Nov 14, 2024

  1. Add new multithreaded TwoQubitPeepholeOptimization pass

    This commit adds a new transpiler pass for physical optimization,
    TwoQubitPeepholeOptimization. This replaces the use of Collect2qBlocks,
    ConsolidateBlocks, and UnitarySynthesis in the optimization stage for
    a default pass manager setup. The pass logically works the same way
    where it analyzes the dag to get a list of 2q runs, calculates the matrix
    of each run, and then synthesizes the matrix and substitutes it inplace.
    The distinction this pass makes though is it does this all in a single
    pass and also parallelizes the matrix calculation and synthesis steps
    because there is no data dependency there.
    
    This new pass is not meant to fully replace the Collect2qBlocks,
    ConsolidateBlocks, or UnitarySynthesis passes as those also run in
    contexts where we don't have a physical circuit. This is meant instead
    to replace their usage in the optimization stage only. Accordingly this
    new pass also changes the logic on how we select the synthesis to use
    and when to make a substituion. Previously this logic was primarily done
    via the ConsolidateBlocks pass by only consolidating to a UnitaryGate if
    the number of basis gates needed based on the weyl chamber coordinates
    was less than the number of 2q gates in the block (see Qiskit#11659 for
    discussion on this). Since this new pass skips the explicit
    consolidation stage we go ahead and try all the available synthesizers
    
    Right now this commit has a number of limitations, the largest are:
    
    - Only supports the target
    - It doesn't support any synthesizers besides the TwoQubitBasisDecomposer,
      because it's the only one in rust currently.
    
    For plugin handling I left the logic as running the three pass series,
    but I'm not sure this is the behavior we want. We could say keep the
    synthesis plugins for `UnitarySynthesis` only and then rely on our
    built-in methods for physical optimiztion only. But this also seems less
    than ideal because the plugin mechanism is how we support synthesizing
    to custom basis gates, and also more advanced approximate synthesis
    methods. Both of those are things we need to do as part of the synthesis
    here.
    
    Additionally, this is currently missing tests and documentation and while
    running it manually "works" as in it returns a circuit that looks valid,
    I've not done any validation yet. This also likely will need several
    rounds of performance optimization and tuning. t this point this is
    just a rough proof of concept and will need a lof refinement along with
    larger changes to Qiskit's rust code before this is ready to merge.
    
    Fixes Qiskit#12007
    Fixes Qiskit#11659
    mtreinish committed Nov 14, 2024
    Configuration menu
    Copy the full SHA
    4d160bc View commit details
    Browse the repository at this point in the history