Skip to main content
IBM Quantum Platform

VF2 Objets de passe du compilateur


QkVF2LayoutConfiguration

typedef struct QkVF2LayoutConfiguration QkVF2LayoutConfiguration

La configuration pour la disposition de l' VF2 est validée. Il s'agit d'une configuration encapsulée permettant d'apporter des modifications à l'API au fil du temps; vous pouvez la créer et la modifier à l'aide du constructeur et des setters ci-dessous.

qk_vf2_layout_configuration_new

QkVF2LayoutConfiguration *qk_vf2_layout_configuration_new(void)

Créez une nouvelle configuration pour les passes d' VF2 s qui exécute tout sans aucune limite.

Appelez qk_vf2_layout_configuration_free avec la valeur de retour pour libérer la mémoire une fois terminé.

Retours

Un pointeur vers la configuration.

qk_vf2_layout_configuration_free

void qk_vf2_layout_configuration_free(QkVF2LayoutConfiguration *config)

Libérer un QkVf2LayoutConfiguration objet.

Sécurité

Le comportement est indéfini si config est un pointeur non nul, mais ne pointe pas vers un objet valide QkVF2LayoutConfiguration et aligné.

Paramètres

  • config – Pointeur vers la configuration.

qk_vf2_layout_configuration_set_call_limit

void qk_vf2_layout_configuration_set_call_limit(QkVF2LayoutConfiguration *config, int64_t before, int64_t after)

Limitez le nombre de fois où l'algorithme d' VF2 e tentera d'étendre son mappage avant et après avoir trouvé la première correspondance.

L'algorithme d' VF2 e garde la trace du nombre de pas qu'il a effectués et s'arrête lorsqu'il atteint la limite. Une fois le premier match trouvé, la limite passe de la limite « avant » à la limite « après » sans réinitialiser le nombre de pas effectués.

Sécurité

Le comportement est indéfini si config n'est pas un pointeur valide, aligné et non nul vers un QkVF2LayoutConfiguration.

Paramètres

  • config – La configuration à mettre à jour.
  • avant – Nombre de tentatives autorisées avant que la première correspondance ne soit trouvée. Définissez une valeur négative pour ne pas avoir de limite.
  • après – Nombre de tentatives autorisées après la première correspondance (le cas échéant). Définissez une valeur négative pour ne pas avoir de limite.

qk_vf2_layout_configuration_set_time_limit

void qk_vf2_layout_configuration_set_time_limit(QkVF2LayoutConfiguration *config, double limit)

Limitez la durée d'exécution de la recherche d' VF2.

Il ne s'agit pas d'une limite stricte; elle n'est vérifiée que lorsqu'une mise en page améliorée est détectée. L'utilisation de cette option rend également le passage non déterministe. Il est généralement recommandé d'utiliser qk_vf2_layout_configuration_set_call_limit à la place.

Sécurité

Le comportement est indéfini si config n'est pas un pointeur valide, aligné et non nul vers un QkVF2LayoutConfiguration.

Paramètres

  • config – La configuration à mettre à jour.
  • limite – Le temps autorisé en secondes. Définissez une valeur non positive pour exécuter sans limite.

qk_vf2_layout_configuration_set_max_trials

void qk_vf2_layout_configuration_set_max_trials(QkVF2LayoutConfiguration *config, uint64_t limit)

Limiter le nombre total d'améliorations complètes trouvées.

Étant donné que l'arbre de recherche de l' VF2 est élagué à la volée en fonction du score dans le QkTarget, cette limite n'est pas particulièrement puissante. Voir qk_vf2_layout_configuration_set_call_limit pour une limite plus stricte.

Sécurité

Le comportement est indéfini si config n'est pas un pointeur valide, aligné et non nul vers un QkVF2LayoutConfiguration.

Paramètres

  • config – La configuration à mettre à jour.
  • limite – Nombre de mises en page complètes autorisées avant la fin. Définissez la valeur sur 0 pour une exécution illimitée.

qk_vf2_layout_configuration_set_shuffle_seed

void qk_vf2_layout_configuration_set_shuffle_seed(QkVF2LayoutConfiguration *config, uint64_t seed)

Activer le remaniement des nœuds des graphes d'entrée avec une graine donnée.

Cela entraîne effectivement une modification de l'ordre de correspondance de l' VF2, ce qui signifie en théorie que l'espace d'une recherche bornée n'est pas biaisé en fonction des indices des nœuds. En pratique, Qiskit utilise les améliorations de l'ordre d' VF2++ s lorsqu'il fonctionne en mode « moyen » (correspondant à la recherche de disposition initiale), et commence par le mappage d'identité en mode « exact ». Ces deux heuristiques de classement sont généralement beaucoup plus susceptibles de trouver des résultats pour un problème donné que la randomisation.

Si cette fonction n'a pas été appelée, aucun remaniement des nœuds n'a lieu.

Sécurité

Le comportement est indéfini si config n'est pas un pointeur valide, aligné et non nul vers un QkVF2LayoutConfiguration.

Paramètres

  • config – La configuration à mettre à jour.
  • seed – La graine à utiliser pour le brassage activé.

qk_vf2_layout_configuration_set_score_initial

void qk_vf2_layout_configuration_set_score_initial(QkVF2LayoutConfiguration *config, bool score_initial)

Faut-il évaluer avec enthousiasme la disposition initiale « insignifiante » du graphique d'interaction?

Vous souhaitez généralement définir cette option true si vous utilisez les passes d'optimisation de circuit ( VF2 ) pour améliorer un circuit déjà réduit au niveau matériel, afin de définir une base de référence pour l'élagage basé sur le score. Si ce n'est pas le cas, vous pouvez laisser cette option telle quelle false (valeur par défaut) afin d'éviter un calcul qui n'aura probablement aucun impact.

Sécurité

Le comportement est indéfini si config n'est pas un pointeur valide, aligné et non nul vers un VF2LayoutConfiguration.

Paramètres

  • config – La configuration à mettre à jour.
  • score_initial – Indique s'il faut évaluer immédiatement la disposition initiale triviale.

QkVF2LayoutResult

typedef struct QkVF2LayoutResult QkVF2LayoutResult

Lorsque vous exécutez la qk_transpiler_pass_standalone_vf2_layout fonction, celle-ci renvoie le résultat de son analyse sous la forme d'un QkVF2LayoutResult objet. Cet objet contient le résultat du passage du transpilateur, qu'il ait réussi ou non à trouver une mise en page, ainsi que la mise en page sélectionnée par le passage.

Fonctions

qk_vf2_layout_result_has_match

bool qk_vf2_layout_result_has_match(const QkVF2LayoutResult *layout)

Vérifiez si un résultat a été trouvé.

Une true valeur inclut la situation où la configuration spécifiée pour essayer la disposition « triviale » s'est avérée être la meilleure (et où, par conséquent, aucun réétiquetage des qubits n'est nécessaire, à l'exception de l'expansion des qubits auxiliaires, le cas échéant). Voir qk_vf2_layout_result_has_improvement pour distinguer si un remappage explicite est stocké.

Sécurité

Le comportement est indéfini si layout n'est pas un pointeur valide et non nul vers un QkVF2LayoutResult.

Paramètres

  • layout – un pointeur vers la mise en page

Retours

true si le passage de mise en page de l' VF2-based a trouvé une correspondance.

qk_vf2_layout_result_has_improvement

bool qk_vf2_layout_result_has_improvement(const QkVF2LayoutResult *layout)

Vérifiez si le résultat constitue une amélioration par rapport à la disposition triviale.

Sécurité

Le comportement est indéfini si layout n'est pas un pointeur valide et non nul vers un QkVF2LayoutResult.

Paramètres

  • layout – un pointeur vers la mise en page

Retours

true si le passage de mise en page de l' VF2-based e a trouvé une correspondance améliorée.

qk_vf2_layout_result_map_virtual_qubit

uint32_t qk_vf2_layout_result_map_virtual_qubit(const QkVF2LayoutResult *layout, uint32_t qubit)

Obtenir le qubit physique pour un qubit virtuel donné

Sécurité

Le comportement est indéfini si layout n'est pas un pointeur valide et non nul vers un QkVF2LayoutResult contenant un résultat, ou si le qubit est hors de la plage pour le circuit initial.

Paramètres

  • layout – un pointeur vers la mise en page
  • qubit – le qubit virtuel pour obtenir le qubit physique de

Retours

Le qubit physique mappé par le qubit virtuel spécifié

qk_vf2_layout_result_free

void qk_vf2_layout_result_free(QkVF2LayoutResult *layout)

Libérer un QkVF2LayoutResult objet

Exemple
QkCircuit *qc = qk_circuit_new(1, 0);
Sécurité

Le comportement est indéfini si layout n'est pas un pointeur valide et non nul vers un QkVF2Layout.

Paramètres

  • layout – un pointeur vers la disposition à libérer
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.