VF2 oggetti del passaggio del compilatore
QkVF2LayoutConfiguration
typedef struct QkVF2LayoutConfiguration QkVF2LayoutConfigurationLa configurazione per il layout dell' VF2 e è stata approvata. Si tratta di una configurazione incapsulata che consente di apportare modifiche all'API nel tempo; è possibile crearla e modificarla utilizzando il costruttore e i setter riportati di seguito.
qk_vf2_layout_configuration_new
QkVF2LayoutConfiguration *qk_vf2_layout_configuration_new(void)
Crea una nuova configurazione per i passaggi dell' VF2 e che esegue tutto senza alcuna limitazione.
Chiama qk_vf2_layout_configuration_free con il valore di ritorno per liberare la memoria al termine.
Risultati
Un puntatore alla configurazione.
qk_vf2_layout_configuration_free
void qk_vf2_layout_configuration_free(QkVF2LayoutConfiguration *config)
Libera un QkVf2LayoutConfiguration oggetto.
Sicurezza
Il comportamento è indefinito se config è un puntatore non nullo, ma non punta a un oggetto valido QkVF2LayoutConfiguration e allineato.
Parametri
- config – Un puntatore alla configurazione.
qk_vf2_layout_configuration_set_call_limit
void qk_vf2_layout_configuration_set_call_limit(QkVF2LayoutConfiguration *config, int64_t before, int64_t after)
Limita il numero di volte in cui l'algoritmo VF2 tenterà di estendere la mappatura prima e dopo aver trovato la prima corrispondenza.
L'algoritmo dell' VF2 e tiene traccia del numero di passi effettuati e termina quando raggiunge il limite. Dopo aver trovato la prima corrispondenza, il limite passa dal limite "prima" al limite "dopo" senza azzerare il numero di passaggi effettuati.
Sicurezza
Il comportamento è indefinito se non config è un puntatore valido, allineato e diverso da null a un QkVF2LayoutConfiguration.
Parametri
- config – La configurazione da aggiornare.
- prima – Il numero di tentativi consentiti prima che venga trovato il primo riscontro. Impostare un numero negativo per non avere limiti.
- dopo – Il numero di tentativi consentiti dopo che è stata trovata la prima corrispondenza (se presente). Impostare un numero negativo per non avere limiti.
qk_vf2_layout_configuration_set_time_limit
void qk_vf2_layout_configuration_set_time_limit(QkVF2LayoutConfiguration *config, double limit)
Limitare il tempo di esecuzione della ricerca dell' VF2.
Questo non è un limite rigido; viene verificato solo quando si incontra un layout migliorato. L'utilizzo di questa opzione rende inoltre il passaggio non deterministico. Si consiglia generalmente di utilizzare qk_vf2_layout_configuration_set_call_limit invece.
Sicurezza
Il comportamento è indefinito se non config è un puntatore valido, allineato e diverso da null a un QkVF2LayoutConfiguration.
Parametri
- config – La configurazione da aggiornare.
- limite – Il tempo consentito in secondi. Impostare un valore non positivo per eseguire senza limiti.
qk_vf2_layout_configuration_set_max_trials
void qk_vf2_layout_configuration_set_max_trials(QkVF2LayoutConfiguration *config, uint64_t limit)
Limita il numero totale di miglioramenti completi trovati.
Poiché l'albero di ricerca dell' VF2 e viene potato al volo in base al punteggio nel QkTarget, questo limite non è particolarmente potente. Vedi qk_vf2_layout_configuration_set_call_limit per un limite più stretto.
Sicurezza
Il comportamento è indefinito se non config è un puntatore valido, allineato e diverso da null a un QkVF2LayoutConfiguration.
Parametri
- config – La configurazione da aggiornare.
- limite – Il numero di layout completi consentiti prima della chiusura. Impostare su 0 per eseguire senza limiti.
qk_vf2_layout_configuration_set_shuffle_seed
void qk_vf2_layout_configuration_set_shuffle_seed(QkVF2LayoutConfiguration *config, uint64_t seed)
Attiva il rimescolamento dei nodi dei grafici di input con un dato seme.
Ciò determina effettivamente una modifica dell'ordine di corrispondenza di VF2, il che in teoria significa che lo spazio di una ricerca limitata non è influenzato dagli indici dei nodi. In pratica, Qiskit utilizza i miglioramenti dell'ordinamento dell' VF2++ e quando funziona in modalità "media" (corrispondente alla ricerca del layout iniziale) e parte dalla mappatura dell'identità in modalità "esatta". Entrambe queste euristiche di ordinamento sono in genere molto più efficaci nel trovare risultati per un dato problema rispetto alla randomizzazione.
Se questa funzione non è stata richiamata, non viene eseguito alcun rimescolamento dei nodi.
Sicurezza
Il comportamento è indefinito se non config è un puntatore valido, allineato e diverso da null a un QkVF2LayoutConfiguration.
Parametri
- config – La configurazione da aggiornare.
- seed – Il seme da utilizzare per l'ordinamento attivato.
qk_vf2_layout_configuration_set_score_initial
void qk_vf2_layout_configuration_set_score_initial(QkVF2LayoutConfiguration *config, bool score_initial)
Se valutare con entusiasmo il layout iniziale "banale" del grafico di interazione.
In genere è consigliabile impostare questo parametro true se si utilizzano i passaggi dell' VF2 per migliorare un circuito già ridotto all'hardware, al fine di impostare una linea di base per il pruning basato sul punteggio. In caso contrario, è possibile lasciare questa impostazione come false (impostazione predefinita), per evitare un calcolo che probabilmente non avrà alcun impatto.
Sicurezza
Il comportamento è indefinito se non config è un puntatore valido, allineato e diverso da null a un VF2LayoutConfiguration.
Parametri
- config – La configurazione da aggiornare.
- score_initial – Se valutare immediatamente il layout iniziale banale.
QkVF2LayoutResult
typedef struct QkVF2LayoutResult QkVF2LayoutResultQuando si esegue la qk_transpiler_pass_standalone_vf2_layout funzione, questa restituisce il risultato dell'analisi come oggetto QkVF2LayoutResult . Questo oggetto contiene il risultato del passaggio del transpiler, se il passaggio è riuscito a trovare un layout o meno e quale layout è stato selezionato dal passaggio.
Funzioni
qk_vf2_layout_result_has_match
bool qk_vf2_layout_result_has_match(const QkVF2LayoutResult *layout)
Verifica se è stato trovato un risultato.
Un true valore include la situazione in cui la configurazione specificata per provare il layout "triviale" è risultata essere la migliore (e di conseguenza non è necessaria alcuna rietichettatura dei qubit, ad eccezione dell'espansione ancilla, se appropriato). Vedere qk_vf2_layout_result_has_improvement per distinguere se è memorizzata una rimappatura esplicita.
Sicurezza
Il comportamento è indefinito se non layout è un puntatore valido e non nullo a un QkVF2LayoutResult.
Parametri
- layout – un puntatore al layout
Risultati
true se il passaggio di layout VF2-based ha trovato una corrispondenza.
qk_vf2_layout_result_has_improvement
bool qk_vf2_layout_result_has_improvement(const QkVF2LayoutResult *layout)
Verifica se il risultato rappresenta un miglioramento rispetto al layout banale.
Sicurezza
Il comportamento è indefinito se non layout è un puntatore valido e non nullo a un QkVF2LayoutResult.
Parametri
- layout – un puntatore al layout
Risultati
true se il passaggio di layout dell' VF2-based e ha trovato una corrispondenza migliorata.
qk_vf2_layout_result_map_virtual_qubit
uint32_t qk_vf2_layout_result_map_virtual_qubit(const QkVF2LayoutResult *layout, uint32_t qubit)
Ottieni il qubit fisico per un dato qubit virtuale
Sicurezza
Il comportamento è indefinito se non layout è un puntatore valido e non nullo a un QkVF2LayoutResult contenente un risultato, o se il qubit è fuori intervallo per il circuito iniziale.
Parametri
- layout – un puntatore al layout
- qubit – il qubit virtuale per ottenere il qubit fisico di
Risultati
Il qubit fisico mappato dal qubit virtuale specificato