1) While defining a circuit on QISkit, does q[0] always correspond to the same qubit on a device
(e.g. the qubit labeled q0 on the device manual)? If so, how can I only use for example qubit 12 and
13 of ibmq_16_melbourne (just as an example)?
Resposta rápida: nem sempre.
A maneira como o Qiskit trabalha com circuitos quânticos e back-ends é:
- Gere o circuito quântico com a API. O circuito quântico é armazenado em um
QuantumCircuit
objeto.
- Transforme este
QuantumCircuit
objeto em um DAGCircuit
objeto que represente o mesmo circuito quântico, mas use um DAG em vez de uma lista de portas.
- Dê esse
DAGCircuit
objeto ao compilador. O compilador cuida de várias coisas:
- Respeitando a topologia do backend para o qual você está compilando. Este é o passo que o incomodará, pois o compilador provavelmente "embaralhará" (não de maneira aleatória, é claro) seus qubits. Uma exceção que vejo é quando o circuito já respeita a topologia de back-end. Nesse caso, o compilador não pode alterar os qubits.
- Respeitando os portões básicos usados pelo back-end.
- Otimizando seu circuito. Esta etapa também pode ser problemática. Não sei se essa otimização está presente no compilador Qiskit, mas se o compilador tentar otimizar também com relação às taxas de erros, você poderá acabar com qubits "embaralhados".
Você precisará verificar o que estou dizendo experimentalmente.
2) If one job is being executed on a device, say for instance using 3 qubits, is any other job being
ran on that device at the same time?
Parece improvável para mim, mas vamos aguardar a resposta de um dos desenvolvedores do Qiskit.
3) How many CNOT gates one circuit can have so that its error stays reasonable? Basically, how
deep can a circuit be on any of the devices to get a reasonable result?
Muito pouco.
Q12
Q13
CX
CX
( 1 - 0,041 )nnCX
10 CX
≈0.6620≈0.43