Il "compilatore" di IBM trasformerebbe il mio circuito di identità in nulla?

Aug 17 2020

Se dovessi creare un circuito con la seguente porta:

$$\tag{1}R_\phi = \begin{bmatrix} 1 & 0 \\ 0 & e^{i \phi} \end{bmatrix},$$

insieme a$\phi$specificato per essere uguale a 0, quindi il gate che sto eseguendo è solo il gate di identità e il circuito non deve fare nulla ai qubit. L'hardware IBM "eseguirebbe" effettivamente un gate con alcuni parametri impostati il ​​​​più vicino possibile a 0? O i compilatori di IBM riconoscerebbero che non è necessario fare nulla e semplicemente non "applicano" alcun gate?

Mentre i due casi sarebbero idealmente equivalenti, in pratica quello in cui "non si fa nulla" sarebbe meno suscettibile di errore, il che potrebbe fare una differenza significativa nei risultati che osserviamo.

Allo stesso modo, se mettiamo due$X$porte l'una accanto all'altra in un circuito da eseguire sull'hardware IBM, i compilatori di IBM noteranno che il circuito è solo il circuito di identità e decideranno di non fare nulla piuttosto che applicare due porte che si annullano a vicenda?

Fino a che punto il software e il firmware di IBM "compila" circuiti come questo?

Risposte

9 AliJavadi Aug 17 2020 at 10:56

Qualsiasi ottimizzazione di compilazione/circuito avviene in modo trasparente da Qiskit. Come utente hai il controllo su ciò che accade tramite l' optimization_levelargomento passato a transpile(). Impostando un livello di ottimizzazione alto (es. livello 3) si otterranno più ottimizzazioni del circuito e impostandolo su un livello basso si otterrà poca o nessuna ottimizzazione (es. livello 0). I due esempi che fornisci sono semplici. Saranno ottimizzati al livello di ottimizzazione 3 e lasciati soli al livello di ottimizzazione 0.