|
|
|
|
|
by jfitzsimons
2347 days ago
|
|
Quantum processors don't have the same gate sets as are used in conventional computers, since they can be in superpositions rather than in just the 0 and 1 state. Instead of NAND gates, a universal set of quantum gates will include a gate capable of producing quantum mechanical interference, such as a Hadamard gate. Almost all programming languages are currently at this gate level, often implemented through Python or another high-level language which you can use to build the circuit (e.g. IBM Qiskit, or Rigetti PyQuil). Our focus has been on building higher level languages to get to a point where the level of abstraction is such that the same code can be compiled for both conventional and quantum processors, which is not something that can be done with existing tools without resorting to the extremely inefficient direct simulation of quantum processors. The exact output we shoot for depends on the processor. For the Rigetti processors, for example, the native set of gates are limited to specific single qubit rotations and specific two-bit gates (CZ or parameterised XY gates). It is sufficient to construct a program using these gates, although we implement a transpiler to convert between any universal set of gates. For various reasons (usually to combat noise or increase performance of the processor) it is sometimes useful to be able to compile to lower level operations. In particular, for most quantum processors gate operations are implemented using laser/microwave/radiowave pulses, and so ultimately you aim to a sequence of such pulses. Being able to tweak the shape, phase, frequency and duration of such pulses is important for maximising the performance of the device. This is usually done to minimise error rates, but can also be done in an. attempt to realise faster logic gates etc. |
|