Le « compilateur » d'IBM transformerait-il mon circuit d'identité en néant ?
Si je devais créer un circuit avec la porte suivante :
$$\tag{1}R_\phi = \begin{bmatrix} 1 & 0 \\ 0 & e^{i \phi} \end{bmatrix},$$
avec$\phi$spécifié égal à 0, alors la porte que j'exécute est juste la porte d'identité, et le circuit ne doit rien faire aux qubits. Le matériel IBM "exécuterait-il" réellement une porte avec un paramètre défini aussi près que possible de 0 ? Ou les compilateurs d'IBM reconnaîtraient-ils que rien ne doit être fait, et n'appliqueraient-ils simplement aucune porte?
Alors que les deux cas seraient idéalement équivalents, en pratique celui où "rien" n'est fait, serait moins susceptible d'erreur, ce qui pourrait faire une différence significative dans les résultats que nous observons.
De même, si on pose deux$X$portes côte à côte dans un circuit à exécuter sur le matériel IBM, les compilateurs d'IBM remarqueraient-ils que le circuit n'est que le circuit d'identité et décideraient-ils de ne rien faire plutôt que d'appliquer deux portes qui s'annulent ?
Dans quelle mesure les logiciels et micrologiciels d'IBM "compilent-ils" des circuits comme celui-ci ?
Réponses
Toute optimisation de compilation/circuit se fait de manière transparente par Qiskit. En tant qu'utilisateur, vous contrôlez ce qui se passe via l' optimization_level
argument passé à transpile()
. Régler le niveau d'optimisation haut (par exemple niveau 3) fera plus d'optimisations de circuit et le régler bas fera peu ou pas d'optimisation (par exemple niveau 0). Les deux exemples que vous donnez sont simples. Ils seront optimisés au niveau d'optimisation 3 et laissés seuls au niveau d'optimisation 0.