Skip to content

Migrate to PyO3 0.21's Bounds API #12121

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

Merged
merged 12 commits into from
Apr 3, 2024
Merged

Conversation

kevinhartman
Copy link
Contributor

Summary

Update PyO3 to version 0.21, which includes the new PyO3 Bounds API.

Details and comments

The PyO3 Bound API migration guide may be useful for reviewers.

We probably ought to run a few benchmarks (e.g. circuit building) to see how this upgrade impacts performance and memory use (it should be a positive change, given that PyO3's memory management has been improved).

@kevinhartman kevinhartman requested a review from a team as a code owner April 2, 2024 22:06
@qiskit-bot
Copy link
Collaborator

One or more of the the following people are requested to review this:

  • @Eric-Arellano
  • @Qiskit/terra-core
  • @kevinhartman
  • @levbishop
  • @mtreinish

@coveralls
Copy link

coveralls commented Apr 2, 2024

Pull Request Test Coverage Report for Build 8541853371

Warning: This coverage report may be inaccurate.

This pull request's base commit is no longer the HEAD commit of its target branch. This means it includes changes from outside the original pull request, including, potentially, unrelated coverage changes.

Details

  • 231 of 255 (90.59%) changed or added relevant lines in 29 files are covered.
  • 15 unchanged lines in 5 files lost coverage.
  • Overall coverage increased (+0.04%) to 89.378%

Changes Missing Coverage Covered Lines Changed/Added Lines %
crates/accelerate/src/quantum_circuit/circuit_data.rs 55 56 98.21%
crates/accelerate/src/utils.rs 1 2 50.0%
crates/accelerate/src/quantum_circuit/circuit_instruction.rs 40 42 95.24%
crates/accelerate/src/sparse_pauli_op.rs 7 11 63.64%
crates/qasm3/src/circuit.rs 29 34 85.29%
crates/qasm3/src/lib.rs 19 24 79.17%
crates/accelerate/src/two_qubit_decompose.rs 17 23 73.91%
Files with Coverage Reduction New Missed Lines %
crates/accelerate/src/sparse_pauli_op.rs 1 93.85%
crates/accelerate/src/quantum_circuit/circuit_instruction.rs 1 88.68%
qiskit/transpiler/layout.py 2 94.71%
crates/qasm2/src/lex.rs 5 92.11%
crates/qasm2/src/parse.rs 6 97.61%
Totals Coverage Status
Change from base Build 8521949858: 0.04%
Covered Lines: 60266
Relevant Lines: 67428

💛 - Coveralls

Copy link
Member

@jakelishman jakelishman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this! I'm really excited to see what the benchmarks show. I think the work you did in quantum_circuit::pyext might mean we see a bit less of an improvement than we otherwise might have, but there's the possibility of some speed-ups in qasm3 still. I'm also interested in making a lot more use of the PyO3 bindings in qasm2 to build the circuit rather more directly, if this all works out, but let's see!

Could we configure the build to disable the gil-refs feature by default, so we don't accidentally re-introduce any?

Comment on lines 598 to 604
fn __reduce__(&self, py: Python) -> Py<PyAny> {
(py.get_type::<Self>(), (PyString::new(py, self.as_str()),)).into_py(py)
(
py.get_type_bound::<Self>(),
(PyString::new_bound(py, self.as_str()),),
)
.into_py(py)
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking again at this (I only just wrote it recently), this actually ought to be a __getnewargs__ impl rather than a __reduce__, but that's not important for this PR.

@jakelishman jakelishman added Changelog: None Do not include in changelog Rust This PR or issue is related to Rust code in the repository labels Apr 2, 2024
@jakelishman jakelishman added this to the 1.1.0 milestone Apr 2, 2024
@mtreinish
Copy link
Member

mtreinish commented Apr 3, 2024

I ran some quick asv benchmarks with this PR because I was curious:

Benchmarks that have improved:

       before           after         ratio
     [4f7b54a6]       [3cdc1c5d]
     <main>       <pyo3-0.21>
-      34.7±0.8μs       31.4±0.2μs     0.90  circuit_construction.CircuitConstructionBench.time_circuit_copy(8, 128)
-      42.1±0.9μs       37.8±0.8μs     0.90  circuit_construction.CircuitConstructionBench.time_circuit_copy(20, 128)
-      15.1±0.2μs       13.5±0.4μs     0.90  circuit_construction.CircuitConstructionBench.time_circuit_copy(8, 8)
-      33.6±0.6μs       29.9±0.6μs     0.89  circuit_construction.CircuitConstructionBench.time_circuit_copy(5, 128)
-      37.8±0.6μs       33.6±0.4μs     0.89  circuit_construction.CircuitConstructionBench.time_circuit_copy(14, 128)
-     1.31±0.04ms      1.15±0.02ms     0.88  circuit_construction.CircuitConstructionBench.time_circuit_copy(8, 8192)
-         340±8μs          297±9μs     0.87  circuit_construction.CircuitConstructionBench.time_circuit_copy(5, 2048)
-     1.31±0.04ms      1.14±0.02ms     0.87  circuit_construction.CircuitConstructionBench.time_circuit_copy(5, 8192)
-      5.26±0.1ms       4.58±0.1ms     0.87  circuit_construction.CircuitConstructionBench.time_circuit_copy(8, 32768)
-         344±5μs        299±0.9μs     0.87  circuit_construction.CircuitConstructionBench.time_circuit_copy(20, 2048)
-         344±5μs          298±2μs     0.87  circuit_construction.CircuitConstructionBench.time_circuit_copy(14, 2048)
-      31.4±0.4μs       27.2±0.3μs     0.87  circuit_construction.CircuitConstructionBench.time_circuit_copy(2, 128)
-     5.34±0.06ms       4.61±0.1ms     0.86  circuit_construction.CircuitConstructionBench.time_circuit_copy(14, 32768)
-     1.29±0.01ms      1.12±0.02ms     0.86  circuit_construction.CircuitConstructionBench.time_circuit_copy(2, 8192)
-      21.1±0.4ms       18.2±0.1ms     0.86  circuit_construction.CircuitConstructionBench.time_circuit_copy(1, 131072)
-      30.4±0.7μs       26.2±0.5μs     0.86  circuit_construction.CircuitConstructionBench.time_circuit_copy(1, 128)
-         333±5μs          286±5μs     0.86  circuit_construction.CircuitConstructionBench.time_circuit_copy(1, 2048)
-         339±9μs          291±4μs     0.86  circuit_construction.CircuitConstructionBench.time_circuit_copy(8, 2048)
-     5.30±0.04ms      4.54±0.05ms     0.86  circuit_construction.CircuitConstructionBench.time_circuit_copy(20, 32768)
-     1.32±0.01ms      1.13±0.02ms     0.86  circuit_construction.CircuitConstructionBench.time_circuit_copy(20, 8192)
-     1.31±0.02ms      1.12±0.02ms     0.85  circuit_construction.CircuitConstructionBench.time_circuit_copy(14, 8192)
-     5.37±0.06ms       4.58±0.1ms     0.85  circuit_construction.CircuitConstructionBench.time_circuit_copy(5, 32768)
-     5.39±0.06ms      4.54±0.09ms     0.84  circuit_construction.CircuitConstructionBench.time_circuit_copy(2, 32768)
-        1.29±0ms      1.09±0.02ms     0.84  circuit_construction.CircuitConstructionBench.time_circuit_copy(1, 8192)
-         340±6μs          285±4μs     0.84  circuit_construction.CircuitConstructionBench.time_circuit_copy(2, 2048)
-      21.2±0.1ms       17.8±0.1ms     0.84  circuit_construction.CircuitConstructionBench.time_circuit_copy(20, 131072)
-      21.4±0.2ms       17.8±0.2ms     0.83  circuit_construction.CircuitConstructionBench.time_circuit_copy(8, 131072)
-     5.24±0.03ms       4.35±0.1ms     0.83  circuit_construction.CircuitConstructionBench.time_circuit_copy(1, 32768)
-      21.3±0.3ms       17.7±0.2ms     0.83  circuit_construction.CircuitConstructionBench.time_circuit_copy(14, 131072)
-     21.3±0.09ms       17.6±0.1ms     0.82  circuit_construction.CircuitConstructionBench.time_circuit_copy(2, 131072)
-      21.4±0.3ms       17.6±0.6ms     0.82  circuit_construction.CircuitConstructionBench.time_circuit_copy(5, 131072)

Benchmarks that have stayed the same:

       before           after         ratio
     [4f7b54a6]       [3cdc1c5d]
     <main>       <pyo3-0.21>
          164±1ms          171±1ms     1.04  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 8192, 2048)
      2.12±0.03ms         2.21±0ms     1.04  converters.ConverterBenchmarks.time_circuit_to_dag(5, 128)
          305±1μs        316±0.4μs     1.04  circuit_construction.CircuitConstructionBench.time_circuit_construction(20, 8)
         1.14±0ms      1.18±0.01ms     1.04  converters.ConverterBenchmarks.time_dag_to_circuit(5, 128)
      1.00±0.01ms         1.04±0ms     1.03  converters.ConverterBenchmarks.time_circuit_to_dag(2, 128)
       25.6±0.2ms       26.4±0.1ms     1.03  converters.ConverterBenchmarks.time_dag_to_circuit(8, 2048)
       22.0±0.3ms       22.7±0.1ms     1.03  converters.ConverterBenchmarks.time_dag_to_circuit(1, 8192)
        389±0.9μs        401±0.9μs     1.03  converters.ConverterBenchmarks.time_dag_to_circuit(1, 128)
          618±3μs          637±4μs     1.03  converters.ConverterBenchmarks.time_circuit_to_dag(1, 128)
          240±1μs          247±1μs     1.03  converters.ConverterBenchmarks.time_circuit_to_dag(5, 8)
       71.8±0.6ms       73.9±0.5ms     1.03  converters.ConverterBenchmarks.time_dag_to_circuit(5, 8192)
        226±0.4ms          232±1ms     1.03  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 32768, 8192)
       91.2±0.5ms       93.6±0.4ms     1.03  converters.ConverterBenchmarks.time_circuit_to_dag(14, 2048)
      16.9±0.06ms      17.3±0.03ms     1.03  converters.ConverterBenchmarks.time_dag_to_circuit(5, 2048)
        261±0.2μs        268±0.5μs     1.02  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 8, 8)
          810±4ms          830±3ms     1.02  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 32768, 32768)
          657±3ms          673±6ms     1.02  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 32768, 2048)
      9.08±0.04ms      9.29±0.03ms     1.02  converters.ConverterBenchmarks.time_circuit_to_dag(20, 128)
      5.56±0.09ms      5.69±0.04ms     1.02  converters.ConverterBenchmarks.time_dag_to_circuit(1, 2048)
      15.3±0.04ms       15.6±0.2ms     1.02  converters.ConverterBenchmarks.time_circuit_to_dag(32, 128)
       70.8±0.5μs       72.3±0.4μs     1.02  converters.ConverterBenchmarks.time_circuit_to_dag(1, 8)
         1.04±0ms      1.06±0.01ms     1.02  circuit_construction.CircuitConstructionBench.time_circuit_construction(20, 128)
      9.19±0.09ms      9.38±0.08ms     1.02  converters.ConverterBenchmarks.time_circuit_to_dag(1, 2048)
          197±2ms          201±2ms     1.02  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 8192, 8192)
      6.34±0.02ms      6.47±0.02ms     1.02  converters.ConverterBenchmarks.time_dag_to_circuit(32, 128)
          126±2μs        129±0.4μs     1.02  converters.ConverterBenchmarks.time_dag_to_circuit(5, 8)
          157±2ms        160±0.2ms     1.02  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 8192, 8)
          210±2ms          214±1ms     1.02  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 32768, 8)
          199±2μs          203±2μs     1.02  converters.ConverterBenchmarks.time_circuit_to_instruction(14, 8)
       52.3±0.9ms       53.3±0.1ms     1.02  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 8192, 2048)
       2.85±0.1ms      2.90±0.02ms     1.02  converters.ConverterBenchmarks.time_dag_to_circuit(14, 128)
          651±4ms          663±3ms     1.02  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 32768, 128)
          266±1μs          271±2μs     1.02  converters.ConverterBenchmarks.time_circuit_to_instruction(20, 8)
         45.9±1ms       46.7±0.1ms     1.02  converters.ConverterBenchmarks.time_dag_to_circuit(14, 2048)
       51.0±0.6μs       51.8±0.2μs     1.02  converters.ConverterBenchmarks.time_dag_to_circuit(1, 8)
          914±5ms          929±3ms     1.02  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 131072, 8)
         800±20ms          813±4ms     1.02  circuit_construction.CircuitConstructionBench.time_circuit_construction(14, 131072)
       30.9±0.4ms       31.4±0.3ms     1.02  converters.ConverterBenchmarks.time_circuit_to_dag(5, 2048)
      11.2±0.05ms      11.3±0.06ms     1.02  circuit_construction.CircuitConstructionBench.time_circuit_construction(1, 2048)
      28.8±0.08ms       29.3±0.5ms     1.02  converters.ConverterBenchmarks.time_circuit_to_dag(53, 128)
      3.96±0.05ms      4.02±0.02ms     1.01  converters.ConverterBenchmarks.time_dag_to_circuit(20, 128)
         92.1±2μs       93.5±0.3μs     1.01  circuit_construction.CircuitConstructionBench.time_circuit_construction(5, 8)
         918±20μs          932±4μs     1.01  circuit_construction.CircuitConstructionBench.time_circuit_construction(14, 128)
      6.20±0.06ms      6.29±0.02ms     1.01  converters.ConverterBenchmarks.time_circuit_to_dag(14, 128)
          158±3ms        160±0.8ms     1.01  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 8192, 128)
          950±9μs          963±3μs     1.01  converters.ConverterBenchmarks.time_dag_to_circuit(53, 8)
          224±3μs          227±3μs     1.01  circuit_construction.CircuitConstructionBench.time_circuit_construction(14, 8)
          643±5ms          652±4ms     1.01  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 32768, 8)
          212±2ms          215±2ms     1.01  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 32768, 128)
         63.0±1ms       63.7±0.4ms     1.01  converters.ConverterBenchmarks.time_circuit_to_dag(2, 8192)
       15.3±0.1ms       15.4±0.2ms     1.01  converters.ConverterBenchmarks.time_circuit_to_dag(2, 2048)
          382±1μs          387±3μs     1.01  converters.ConverterBenchmarks.time_dag_to_circuit(20, 8)
          169±1μs          171±1μs     1.01  converters.ConverterBenchmarks.time_dag_to_circuit(8, 8)
          266±8μs          269±1μs     1.01  converters.ConverterBenchmarks.time_dag_to_circuit(14, 8)
       15.7±0.3ms       15.9±0.1ms     1.01  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 2048, 2048)
      3.59±0.01ms      3.63±0.01ms     1.01  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 128, 128)
       51.1±0.2ms       51.7±0.4ms     1.01  transpiler_levels.TranspilerLevelBenchmarks.time_transpile_from_large_qasm(0)
       70.4±0.3μs       71.1±0.7μs     1.01  converters.ConverterBenchmarks.time_dag_to_circuit(2, 8)
          918±9μs          927±5μs     1.01  converters.ConverterBenchmarks.time_circuit_to_dag(20, 8)
          619±1μs        626±0.8μs     1.01  converters.ConverterBenchmarks.time_dag_to_circuit(2, 128)
       85.1±0.2μs         85.9±1μs     1.01  circuit_construction.CircuitConstructionBench.time_circuit_construction(2, 8)
       2.61±0.02s       2.64±0.01s     1.01  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 131072, 8)
       12.6±0.3ms      12.7±0.08ms     1.01  circuit_construction.CircuitConstructionBench.time_circuit_construction(20, 2048)
      2.53±0.02ms      2.56±0.01ms     1.01  converters.ConverterBenchmarks.time_circuit_to_dag(53, 8)
       38.2±0.5ms       38.6±0.2ms     1.01  converters.ConverterBenchmarks.time_circuit_to_dag(1, 8192)
         68.0±1ms       68.6±0.4ms     1.01  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 8192, 8192)
      3.49±0.04ms      3.52±0.01ms     1.01  converters.ConverterBenchmarks.time_circuit_to_dag(8, 128)
      9.13±0.02ms      9.22±0.03ms     1.01  converters.ConverterBenchmarks.time_dag_to_circuit(2, 2048)
          872±6μs          879±6μs     1.01  circuit_construction.CircuitConstructionBench.time_circuit_construction(2, 128)
        232±0.8μs        234±0.9μs     1.01  converters.ConverterBenchmarks.time_circuit_to_instruction(1, 128)
        110±0.9ms        111±0.2ms     1.01  converters.ConverterBenchmarks.time_dag_to_circuit(8, 8192)
          201±3ms        203±0.6ms     1.01  converters.ConverterBenchmarks.time_circuit_to_dag(8, 8192)
       37.9±0.3ms       38.2±0.3ms     1.01  converters.ConverterBenchmarks.time_dag_to_circuit(2, 8192)
       10.3±0.1ms       10.4±0.1ms     1.01  converters.ConverterBenchmarks.time_dag_to_circuit(53, 128)
          605±5μs          608±8μs     1.01  converters.ConverterBenchmarks.time_circuit_to_instruction(53, 8)
          957±6ms          962±2ms     1.01  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 131072, 32768)
          597±2μs          600±2μs     1.01  converters.ConverterBenchmarks.time_dag_to_circuit(32, 8)
       19.6±0.1ms      19.7±0.09ms     1.01  converters.ConverterBenchmarks.time_circuit_to_instruction(14, 2048)
       12.2±0.2ms       12.3±0.1ms     1.01  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 2048, 128)
          886±7ms          891±6ms     1.01  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 131072, 8192)
       2.63±0.04s       2.65±0.01s     1.00  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 131072, 128)
        129±0.8ms          130±1ms     1.00  converters.ConverterBenchmarks.time_circuit_to_dag(5, 8192)
        122±0.6μs          123±3μs     1.00  converters.ConverterBenchmarks.time_circuit_to_dag(2, 8)
      1.73±0.03ms      1.74±0.01ms     1.00  converters.ConverterBenchmarks.time_dag_to_circuit(8, 128)
        102±0.4ms        102±0.6ms     1.00  transpiler_levels.TranspilerLevelBenchmarks.time_schedule_qv_14_x_14(1)
          926±3μs          929±3μs     1.00  circuit_construction.CircuitConstructionBench.time_circuit_construction(5, 128)
       45.2±0.3ms       45.3±0.4ms     1.00  circuit_construction.CircuitConstructionBench.time_circuit_construction(1, 8192)
       48.4±0.8ms       48.5±0.1ms     1.00  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 8192, 128)
          706±2ms          707±1ms     1.00  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 32768, 8192)
       51.0±0.4ms       51.1±0.2ms     1.00  circuit_construction.CircuitConstructionBench.time_circuit_construction(14, 8192)
       2.73±0.03s          2.73±0s     1.00  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 131072, 8192)
       48.4±0.4ms       48.4±0.1ms     1.00  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 8192, 8)
       3.33±0.01s       3.33±0.02s     1.00  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 131072, 131072)
      3.12±0.02ms      3.12±0.03ms     1.00  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 128, 8)
             2565             2565     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_quantum_volume_transpile_50_x_20(0)
             1403             1403     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_quantum_volume_transpile_50_x_20(1)
             1403             1403     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_quantum_volume_transpile_50_x_20(2)
             1296             1296     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_quantum_volume_transpile_50_x_20(3)
             2705             2705     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_transpile_from_large_qasm(0)
             2005             2005     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_transpile_from_large_qasm(1)
             2005             2005     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_transpile_from_large_qasm(2)
                7                7     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_transpile_from_large_qasm(3)
             2705             2705     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_transpile_from_large_qasm_backend_with_prop(0)
             2005             2005     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_transpile_from_large_qasm_backend_with_prop(1)
             2005             2005     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_transpile_from_large_qasm_backend_with_prop(2)
                7                7     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_transpile_from_large_qasm_backend_with_prop(3)
              323              323     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_transpile_qv_14_x_14(0)
              336              336     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_transpile_qv_14_x_14(1)
              336              336     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_transpile_qv_14_x_14(2)
              272              272     1.00  transpiler_levels.TranspilerLevelBenchmarks.track_depth_transpile_qv_14_x_14(3)
        178±0.7ms          178±2ms     1.00  circuit_construction.CircuitConstructionBench.time_circuit_construction(1, 32768)
       40.7±0.1ms       40.7±0.4ms     1.00  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 2048, 128)
       48.3±0.2ms       48.3±0.5ms     1.00  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 2048, 2048)
          216±1ms        216±0.4ms     1.00  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 32768, 2048)
       13.0±0.2ms      13.0±0.06ms     1.00  circuit_construction.CircuitConstructionBench.time_circuit_construction(5, 2048)
         68.3±1μs      68.2±0.09μs     1.00  circuit_construction.CircuitConstructionBench.time_circuit_construction(1, 8)
       1.50±0.01s       1.49±0.01s     1.00  transpiler_levels.TranspilerLevelBenchmarks.time_quantum_volume_transpile_50_x_20(2)
         51.3±1ms       51.2±0.5ms     1.00  circuit_construction.CircuitConstructionBench.time_circuit_construction(5, 8192)
       2.67±0.01s       2.66±0.01s     1.00  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 131072, 2048)
          369±3μs          368±2μs     1.00  converters.ConverterBenchmarks.time_circuit_to_dag(8, 8)
      1.45±0.01ms         1.45±0ms     1.00  converters.ConverterBenchmarks.time_circuit_to_dag(32, 8)
          871±3μs          868±1μs     1.00  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 8, 8)
       49.2±0.3ms       49.0±0.2ms     1.00  converters.ConverterBenchmarks.time_circuit_to_dag(8, 2048)
         823±20ms          820±4ms     1.00  circuit_construction.CircuitConstructionBench.time_circuit_construction(2, 131072)
       98.5±0.4ms       98.2±0.5ms     1.00  transpiler_levels.TranspilerLevelBenchmarks.time_transpile_qv_14_x_14(0)
       39.8±0.1ms       39.6±0.1ms     1.00  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 2048, 8)
          634±6μs          632±3μs     1.00  converters.ConverterBenchmarks.time_circuit_to_dag(14, 8)
         1.14±0ms         1.13±0ms     1.00  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 128, 128)
          801±4ms         797±10ms     1.00  circuit_construction.CircuitConstructionBench.time_circuit_construction(20, 131072)
          303±3ms          302±1ms     1.00  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 32768, 32768)
          900±2ms          896±6ms     1.00  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 131072, 2048)
       53.4±0.1ms       53.1±0.4ms     0.99  transpiler_levels.TranspilerLevelBenchmarks.time_transpile_from_large_qasm_backend_with_prop(0)
       83.1±0.3ms       82.7±0.5ms     0.99  transpiler_levels.TranspilerLevelBenchmarks.time_transpile_qv_14_x_14(1)
       49.3±0.6ms       49.1±0.5ms     0.99  converters.ConverterBenchmarks.time_circuit_to_instruction(8, 8192)
       12.7±0.2ms      12.6±0.06ms     0.99  circuit_construction.CircuitConstructionBench.time_circuit_construction(14, 2048)
          717±5ms          713±2ms     0.99  circuit_construction.CircuitConstructionBench.time_circuit_construction(1, 131072)
         70.7±1μs       70.2±0.3μs     0.99  converters.ConverterBenchmarks.time_circuit_to_instruction(1, 8)
          902±2ms          896±5ms     0.99  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 131072, 128)
        111±0.3ms        111±0.3ms     0.99  transpiler_levels.TranspilerLevelBenchmarks.time_transpile_from_large_qasm(1)
        127±0.7ms        127±0.3ms     0.99  transpiler_levels.TranspilerLevelBenchmarks.time_transpile_from_large_qasm(3)
          288±4ms        286±0.7ms     0.99  transpiler_levels.TranspilerLevelBenchmarks.time_transpile_qv_14_x_14(3)
        122±0.7ms        122±0.3ms     0.99  transpiler_levels.TranspilerLevelBenchmarks.time_schedule_qv_14_x_14(0)
          200±1ms          198±2ms     0.99  circuit_construction.CircuitConstructionBench.time_circuit_construction(20, 32768)
          140±2μs          139±5μs     0.99  circuit_construction.CircuitConstructionBench.time_circuit_construction(8, 8)
          957±4ms          949±4ms     0.99  transpiler_levels.TranspilerLevelBenchmarks.time_quantum_volume_transpile_50_x_20(0)
       51.9±0.2ms       51.5±0.4ms     0.99  circuit_construction.CircuitConstructionBench.time_circuit_construction(2, 8192)
       2.88±0.01s       2.85±0.01s     0.99  circuit_construction.ParameterizedCircuitConstructionBench.time_build_parameterized_circuit(20, 131072, 32768)
          921±5μs          912±9μs     0.99  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 128, 8)
          259±1ms          257±2ms     0.99  transpiler_levels.TranspilerLevelBenchmarks.time_transpile_qv_14_x_14(2)
        129±0.5ms        128±0.5ms     0.99  transpiler_levels.TranspilerLevelBenchmarks.time_transpile_from_large_qasm_backend_with_prop(3)
       10.7±0.2ms      10.6±0.08ms     0.99  converters.ConverterBenchmarks.time_circuit_to_instruction(1, 8192)
       12.9±0.2ms       12.7±0.1ms     0.99  circuit_construction.CircuitConstructionBench.time_circuit_construction(2, 2048)
          1.84±0s          1.82±0s     0.99  transpiler_levels.TranspilerLevelBenchmarks.time_quantum_volume_transpile_50_x_20(3)
          928±6μs         917±10μs     0.99  circuit_construction.CircuitConstructionBench.time_circuit_construction(8, 128)
          205±2ms          203±1ms     0.99  circuit_construction.CircuitConstructionBench.time_circuit_construction(14, 32768)
       1.26±0.01s          1.25±0s     0.99  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 131072, 131072)
          821±8ms         811±10ms     0.99  circuit_construction.CircuitConstructionBench.time_circuit_construction(8, 131072)
       50.9±0.4ms       50.3±0.2ms     0.99  circuit_construction.CircuitConstructionBench.time_circuit_construction(20, 8192)
       12.1±0.1ms       11.9±0.2ms     0.99  circuit_construction.ParameterizedCircuitBindBench.time_bind_params(20, 2048, 8)
          767±8μs          757±3μs     0.99  circuit_construction.CircuitConstructionBench.time_circuit_construction(1, 128)
       18.5±0.1ms      18.2±0.09ms     0.99  converters.ConverterBenchmarks.time_circuit_to_instruction(2, 8192)
      2.76±0.04ms      2.72±0.01ms     0.99  converters.ConverterBenchmarks.time_circuit_to_instruction(1, 2048)
        231±0.4ms        227±0.6ms     0.98  transpiler_levels.TranspilerLevelBenchmarks.time_transpile_from_large_qasm(2)
      4.51±0.03ms      4.43±0.04ms     0.98  converters.ConverterBenchmarks.time_circuit_to_instruction(53, 128)
          233±1ms        229±0.5ms     0.98  transpiler_levels.TranspilerLevelBenchmarks.time_transpile_from_large_qasm_backend_with_prop(2)
       33.7±0.2ms       33.1±0.3ms     0.98  converters.ConverterBenchmarks.time_circuit_to_instruction(5, 8192)
         825±10μs          810±3μs     0.98  converters.ConverterBenchmarks.time_circuit_to_instruction(8, 128)
      2.90±0.02ms      2.85±0.02ms     0.98  converters.ConverterBenchmarks.time_circuit_to_instruction(32, 128)
        397±0.8ms          389±2ms     0.98  transpiler_levels.TranspilerLevelBenchmarks.time_quantum_volume_transpile_50_x_20(1)
          394±5μs          386±4μs     0.98  converters.ConverterBenchmarks.time_circuit_to_instruction(32, 8)
          207±1ms          203±1ms     0.98  circuit_construction.CircuitConstructionBench.time_circuit_construction(8, 32768)
         51.3±1ms       50.1±0.5ms     0.98  circuit_construction.CircuitConstructionBench.time_circuit_construction(8, 8192)
          361±3μs          353±1μs     0.98  converters.ConverterBenchmarks.time_circuit_to_instruction(2, 128)
         1.33±0ms      1.30±0.01ms     0.98  converters.ConverterBenchmarks.time_circuit_to_instruction(14, 128)
       84.0±0.3μs       82.1±0.2μs     0.98  converters.ConverterBenchmarks.time_circuit_to_instruction(2, 8)
       13.0±0.1ms       12.7±0.1ms     0.97  circuit_construction.CircuitConstructionBench.time_circuit_construction(8, 2048)
        114±0.3ms        111±0.9ms     0.97  transpiler_levels.TranspilerLevelBenchmarks.time_transpile_from_large_qasm_backend_with_prop(1)
       49.1±0.8μs       47.8±0.2μs     0.97  circuit_construction.CircuitConstructionBench.time_circuit_extend(20, 8)
       11.6±0.1μs      11.3±0.03μs     0.97  circuit_construction.CircuitConstructionBench.time_circuit_copy(2, 8)
          591±4μs        575±0.8μs     0.97  converters.ConverterBenchmarks.time_circuit_to_instruction(5, 128)
      4.56±0.05ms      4.44±0.05ms     0.97  converters.ConverterBenchmarks.time_circuit_to_instruction(2, 2048)
          118±1ms        115±0.4ms     0.97  circuit_construction.CircuitConstructionBench.time_circuit_extend(20, 131072)
        119±0.9μs          116±2μs     0.97  converters.ConverterBenchmarks.time_circuit_to_instruction(5, 8)
        147±0.4μs          143±1μs     0.97  converters.ConverterBenchmarks.time_circuit_to_instruction(8, 8)
      11.5±0.06ms      11.1±0.06ms     0.97  converters.ConverterBenchmarks.time_circuit_to_instruction(8, 2048)
          211±2ms          203±3ms     0.96  circuit_construction.CircuitConstructionBench.time_circuit_construction(2, 32768)
      7.90±0.04ms      7.61±0.03ms     0.96  converters.ConverterBenchmarks.time_circuit_to_instruction(5, 2048)
      1.85±0.02ms      1.78±0.02ms     0.96  converters.ConverterBenchmarks.time_circuit_to_instruction(20, 128)
        137±0.7μs          131±2μs     0.96  circuit_construction.CircuitConstructionBench.time_circuit_extend(14, 128)
      7.44±0.07ms      7.14±0.05ms     0.96  circuit_construction.CircuitConstructionBench.time_circuit_extend(5, 8192)
         836±20ms          800±3ms     0.96  circuit_construction.CircuitConstructionBench.time_circuit_construction(5, 131072)
      12.7±0.04μs      12.1±0.07μs     0.96  circuit_construction.CircuitConstructionBench.time_circuit_copy(5, 8)
          209±2ms          200±1ms     0.96  circuit_construction.CircuitConstructionBench.time_circuit_construction(5, 32768)
          158±3μs        151±0.8μs     0.95  circuit_construction.CircuitConstructionBench.time_circuit_extend(20, 128)
         1.87±0ms      1.78±0.02ms     0.95  circuit_construction.CircuitConstructionBench.time_circuit_extend(5, 2048)
       30.1±0.5ms      28.7±0.09ms     0.95  circuit_construction.CircuitConstructionBench.time_circuit_extend(20, 32768)
          133±1μs        126±0.4μs     0.95  circuit_construction.CircuitConstructionBench.time_circuit_extend(5, 128)
      7.54±0.04ms      7.18±0.05ms     0.95  circuit_construction.CircuitConstructionBench.time_circuit_extend(14, 8192)
          121±1ms        115±0.7ms     0.95  circuit_construction.CircuitConstructionBench.time_circuit_extend(14, 131072)
      1.72±0.01ms      1.63±0.01ms     0.95  circuit_construction.CircuitConstructionBench.time_circuit_extend(1, 2048)
      1.91±0.03ms      1.82±0.01ms     0.95  circuit_construction.CircuitConstructionBench.time_circuit_extend(14, 2048)
       30.3±0.4ms      28.7±0.09ms     0.95  circuit_construction.CircuitConstructionBench.time_circuit_extend(5, 32768)
      1.93±0.01ms      1.83±0.01ms     0.95  circuit_construction.CircuitConstructionBench.time_circuit_extend(20, 2048)
       7.38±0.1ms      6.99±0.02ms     0.95  circuit_construction.CircuitConstructionBench.time_circuit_extend(2, 8192)
      7.68±0.02ms      7.27±0.04ms     0.95  circuit_construction.CircuitConstructionBench.time_circuit_extend(20, 8192)
       29.5±0.4ms       27.9±0.3ms     0.95  circuit_construction.CircuitConstructionBench.time_circuit_extend(2, 32768)
      1.93±0.01ms      1.83±0.01ms     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(8, 2048)
          118±1ms        111±0.9ms     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(2, 131072)
       30.2±0.4ms       28.5±0.2ms     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(14, 32768)
          121±2ms          114±2ms     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(5, 131072)
      15.8±0.08μs       14.9±0.1μs     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(5, 8)
      22.9±0.06μs       21.5±0.4μs     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(8, 8)
      14.6±0.04μs      13.7±0.05μs     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(2, 8)
       11.3±0.1μs      10.6±0.04μs     0.94  circuit_construction.CircuitConstructionBench.time_circuit_copy(1, 8)
        123±0.5ms        115±0.7ms     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(8, 131072)
       37.5±0.6μs       35.2±0.6μs     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(14, 8)
        136±0.8μs          127±2μs     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(8, 128)
        125±0.5μs        117±0.5μs     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(2, 128)
       27.6±0.1ms       25.8±0.2ms     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(1, 32768)
      12.8±0.08μs      12.0±0.05μs     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(1, 8)
      7.68±0.05ms      7.19±0.06ms     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(8, 8192)
      1.88±0.01ms      1.76±0.01ms     0.94  circuit_construction.CircuitConstructionBench.time_circuit_extend(2, 2048)
       30.7±0.1ms       28.6±0.3ms     0.93  circuit_construction.CircuitConstructionBench.time_circuit_extend(8, 32768)
        115±0.9μs        107±0.5μs     0.93  circuit_construction.CircuitConstructionBench.time_circuit_extend(1, 128)
       19.9±0.4μs      18.5±0.05μs     0.93  circuit_construction.CircuitConstructionBench.time_circuit_copy(14, 8)
       23.4±0.5μs       21.7±0.6μs     0.93  circuit_construction.CircuitConstructionBench.time_circuit_copy(20, 8)
        110±0.7ms          102±1ms     0.92  circuit_construction.CircuitConstructionBench.time_circuit_extend(1, 131072)
      6.87±0.02ms      6.31±0.03ms     0.92  circuit_construction.CircuitConstructionBench.time_circuit_extend(1, 8192)

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.
PERFORMANCE INCREASED.

@kevinhartman
Copy link
Contributor Author

Great, thanks @jakelishman for the review, and @mtreinish for running the benchmarks!

Should be good to go.

Copy link
Member

@jakelishman jakelishman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, this looks good to me now, thanks! I realised after I'd written it up top that PyO3 defaults to showing deprecation warnings around the GIL refs, so my previous review comment isn't so important.

This is a fairly mechanical PR, so I think I'll just merge it now, so we can all start making better use of the new PyO3 interfaces.

@jakelishman jakelishman enabled auto-merge April 3, 2024 16:13
@jakelishman jakelishman added this pull request to the merge queue Apr 3, 2024
Merged via the queue into Qiskit:main with commit d76e53a Apr 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Changelog: None Do not include in changelog Rust This PR or issue is related to Rust code in the repository
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants