top | item 21009098

(no title)

bschmitt | 6 years ago

> It’s the only open-source compiler of it’s kind.

There other compilers/transpilers out there, e.g., ScaffCC[1] and Qubiter[2]. Also inside IBM's framework you have one: Qiskit Terra[3]. You can find more in [4].

> What is very useful about the compiler is that it is retargetable.

Most, if not all, of them have this characteristic. Using Qiskit Terra you can definitely target Rigetti’s machines. You just need to provide the architecture specification, i.e., number of qubits and their coupling graph.

As a side note, one really annoying characteristic in Rigetti's quilc is the impossibility of turning off optimizations.

[1] https://github.com/epiqc/ScaffCC

[2] https://github.com/artiste-qb-net/qubiter

[3] https://github.com/Qiskit/qiskit-terra

[4] https://github.com/qosf/os_quantum_software

discuss

order

reikonomusha|6 years ago

The operative phrase in that quote, and is by no means intended to be a technicality, is “of its kind.” In my opinion, quilc is in a class of its own, being fully automatic, retargetable, and optimizing, without the participation of an API or any sort of “setup” code. (This includes retargeting to every known gate set, not just CNOT or CZ.) Code goes in, code comes out, just like GCC or Clang.

Optimizations may be completely turned off with the directive PRAGMA PRESERVE_BLOCK [0]. Other optimizations can be selectively enabled and disabled with command line options or pragmas. But, as with GCC, the user does not have full control over every aspect of optimization and transformation, but rather just a set of coarse-grained controls. Otherwise, it wouldn’t be a compiler so much as a library/framework for program manipulation.

But one thing is true, quilc is intended to be fully automatic, not requiring (or even allowing) the user to list compilation “passes” or “transpilers”, which is typically what a software engineer expects when their primary concern is writing and running code. Many of the links you’ve listed are either “compilation frameworks” (like scaffcc, akin to LLVM), unitary factorizers (like qubiter, though I’m less familiar), and so on.

[0] http://docs.rigetti.com/en/stable/compiler.html

bschmitt|6 years ago

> Optimizations may be completely turned off with the directive PRAGMA PRESERVE_BLOCK [0]

This turn off compilation itself. If you read the documentation you referred me to, you will notice that code inside the directive won't be guaranteed to be legal QPU code after compilation.

> Many of the links you’ve listed are either “compilation frameworks” (like scaffcc, akin to LLVM), unitary factorizers (like qubiter, though I’m less familiar), and so on.

I don't know what you mean by "compilation framework" nor where you are drawing the line of what is a compiler, but ScaffCC is a compiler. It is built using llvm (so it is akin to Clang, not llvm) and compiles Scaffold to QASM.