Skip to content

Release 0.9.0: major internal improvements, architecture system, and pass management

Compare
Choose a tag to compare
@jvanstraten jvanstraten released this 27 May 20:39
· 592 commits to develop since this release
fd70c71

Added

  • architecture system: platform and compilation strategy defaults are now built into OpenQL, preventing the need for users to copypaste configuration files from the tests directory
  • interface (C++ and Python) to compile cQASM 1.x
  • allow 'wait' and 'barrier' in JSON section 'gate_decomposition'
  • CC backend:
    • improved reporting on JSON semantic errors
    • added check for dimension of "instruments/qubits" against "instruments/ref_control_mode/control_bits"
    • added check for dimension of "instructions//cc/[signals,ref_signal]/value" against "instruments/ref_control_mode/control_bits"
    • added cross check of "instruments/ref_control_mode" against "instrument_definitions"
    • added support for "pragma/break" in JSON definition to define 'gate' that breaks out of loop
    • added support to distribute measurement results via DSM
    • added support for conditional gates
    • added compile option "--backend_cc_run_once"
    • added compile option "--backend_cc_verbose"

Changed

  • pass management: instead of a hardcoded compilation strategy, the strategy can be adjusted and fine-tuned manually
  • pass options: instead of doing everything with global options, global options were replaced with pass options as much as possible
  • most documentation is now generated from code and can be queried using API calls
  • scheduler resources are completely reworked to be made more generic
  • major internal refactoring and restructuring to facilitate the above two things
  • CC backend:
    • renamed JSON field "signal_ref" to "ref_signal"
    • renamed JSON field "ref_signals_type" to "signal_type"
    • changed JSON field "static_codeword_override" to be a vector with one element per qubit parameter. To edit a JSON file using Sublime, use Replace with Regular Expressions: find="static_codeword_override": ([0-9])+, replace="static_codeword_override": [\1]
    • adopted new module synchronization scheme ("seq_bar semantics", requires CC software >= v0.2.0, PycQED after commit 470df5b)
    • JSON field "instruction/type" no longer used by backend, use "instruction/cc/readout_mode" to flag measurement instructions
    • allow specification of 2 triggers in JSON field "control_modes/*/trigger_bits" to support dual-QWG
    • changed label in generated code from "mainLoop" to "mainLoop". Do not start kernel names with "" (this should be specified by the API)
    • removed initial 1 cycle (20 ns) delay at start of kernels (resulting from bundle start_cycle starting at 1)
    • correctly handle kernel names containing "_" in conjunction with looping (formerly duplicate labels could arise)
    • added "seq_out 0,1" to program start to allow tracing of actual program start

Removed

  • CC-light code generation, as the CC-light is being phased out in the lab, and its many passes were obstacles for pass management and refactoring
  • rotation optimization based on matrices; matrices in general were removed entirely because no one was using it
  • the commute variation pass, as it has been superseded by in-place commutations within the scheduler
  • the toffoli decomposition pass, as it wasn't really used; to decompose a toffoli gate, use generic platform-driven decomposition instead
  • the defunct fidelity estimation logic from metrics.cc; this may be added again later, but requires lots of cleanup and isn't currently in use
  • quantumsim and qsoverlay output; apparently this was no longer being used, and it was quite intertwined with the CC-light backend

Fixed

  • changed register used for FOR loop, so it doesn't clash with delay setting
  • fixed documentation for python setup and running tests
  • various miscellaneous bugs, dangling pointers, and memory leaks