QkTranspiler
La qk_transpile() funzione espone il transpiler (qiskit.transpiler) di Qiskit in C. Le funzionalità di base utilizzano lo stesso codice sottostante della versione Python -space, ma il transpiler accessibile da C presenta più limitazioni rispetto a quello accessibile da Python. Il transpiler presuppone un circuito realizzato utilizzando esclusivamente l'API C ed è progettato per funzionare solo nel caso di un'API C autonoma. Potrebbe non funzionare correttamente in un contesto misto in cui si utilizzano sia l' Python che /C. Se stai combinando circuiti in C e in Python, dovresti chiamare le funzioni generate_preset_pass_manager() transpile() o per quei circuiti.
Tipi di dati
QkTranspileResult
struct QkTranspileResult
L'oggetto contenitore dei risultati di qk_transpile
Quando il transpiler compila con successo un circuito quantistico per un determinato target, restituisce il circuito transpilato e il layout. La funzione qk_transpile scrive i puntatori ai campi di questa struttura quando viene eseguita con successo; è possibile inizializzare questa struttura con puntatori nulli o lasciarli non impostati, in quanto i valori non vengono mai letti da qk_transpile , ma solo scritti. Dopo aver richiamato qk_transpile è necessario richiamare qk_circuit_free e qk_transpile_layout_free sui membri di questa struttura.
QkCircuit *circuito
Il circuito assemblato.
QkTranspileLayout *layout
Metadati relativi ai layout iniziali e finali da virtuale a fisico.
QkTranspileOptions
struct QkTranspileOptions
Le opzioni per l'esecuzione del transpiler
uint8_t livello_ottimizzazione
Il livello di ottimizzazione con cui eseguire il transpiler. I valori validi sono 0, 1, 2 o 3.
int64_t seme
Il seme per il transpiler. Se impostato su un numero negativo, significa che non verrà impostato alcun seme e che gli RNG usati nel transpiler saranno seminati dall'entropia del sistema.
doppia approssimazione_grado
Il grado di approssimazione è indicato da un indicatore euristico in cui “ 1.0 ” indica l’assenza di approssimazione (fatta salva la tolleranza numerica) e “ 0.0 ” indica l’approssimazione massima. Un NAN valore indica che, per un'operazione nell'obiettivo, è consentita un'approssimazione entro i limiti del tasso di errore riportato.
QkTranspilerStageState
struct QkTranspilerStageState
Un contenitore che raccoglie gli attributi individuali condivisi dalle fasi del transpiler. Se la transpilazione avviene correttamente, ogni singola fase scrive in questo contenitore gli attributi specifici di cui avranno bisogno le fasi successive. Se il contenitore non è stato inizializzato, ogni fase inizializzerà un nuovo oggetto quando necessario.
qk_transpile_state_new
void qk_transpile_state_new(QkTranspilerStageState **state)Crea un puntatore a un oggetto
QkTranspilerStageStatevuotoSicurezza
Il comportamento è indefinito se non
stateè un puntatore valido allocato.Parametri
- stato – un puntatore allo spazio di memoria allocato in cui memorizzare il puntatore.
qk_transpile_state_free
void qk_transpile_state_free(QkTranspilerStageState *state)Libera un
QkTranspilerStageStateoggettoSicurezza
Il comportamento è indefinito se non
stateè un puntatore valido e non nullo a unQkTranspilerStageState.Parametri
- stato – un puntatore allo stato da liberare
qk_transpile_state_layout
QkTranspileLayout *qk_transpile_state_layout(QkTranspilerStageState *state)Ottiene un
QkTranspileLayoutoggetto da unQkTranspilerStageStateoggetto.Questo puntatore appartiene
stateall'oggetto e non deve essere liberato utilizzandoqk_transpile_layout_free. Libera invece l'oggettostateoriginale utilizzandoqk_transpile_state_free.Sicurezza
Il comportamento è indefinito se non
stateè un puntatore valido e non nullo a unQkTranspilerStageState.Parametri
- stato – un puntatore allo stato da cui recuperare il layout.
Risultati
un puntatore a un
QkTranspileLayoutoggetto di proprietà dello Stato.qk_transpile_state_layout_set
void qk_transpile_state_layout_set(QkTranspilerStageState *state, QkTranspileLayout *layout)Imposta un
QkTranspileLayoutoggetto come layout per unQkTranspilerStageStateoggetto.La chiamata a questo metodo consuma
QkTranspileLayoutl'oggetto, il che significa che l'utente non dovrà richiamarloqk_transpile_layout_free. L'utente dovrebbe comunque liberare lo spazio ad esso assegnato utilizzandofree.Sicurezza
Il comportamento è indefinito se non
stateè un puntatore valido e non nullo a unQkTranspilerStageState. Il comportamento è indefinito se nonstateè un puntatore valido a unQkTranspileLayout.Parametri
- stato – un puntatore allo stato per il quale impostare il layout.
- layout – un puntatore al layout da utilizzare. Potrebbe servire
NULLper annullare l'impostazione del layout.
Funzioni
qk_transpiler_default_options
QkTranspileOptions qk_transpiler_default_options(void)
Generare le opzioni predefinite del transpiler
Questa funzione genera un QkTranspileOptions con le impostazioni predefinite Attualmente è optimization_level 2, nessun seme e nessuna approssimazione.
Risultati
Un QkTranspileOptions oggetto con impostazioni predefinite.
qk_transpile_stage_init
QkExitCode qk_transpile_stage_init(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState **state, char **error)
Esegui la fase di inizializzazione predefinita del transpiler su un circuito
Il transpiler Qiskit è un compilatore di circuiti quantistici che riscrive un dato circuito di input per adattarlo ai vincoli di una QPU e ottimizza il circuito per l'esecuzione. Questa funzione esegue la prima fase del transpiler, init, che esegue ottimizzazioni dei circuiti astratti e riduce le operazioni multi-qubit in operazioni a uno e due qubit. Per ulteriori dettagli, consultare la sezione Fase di inizializzazione.
Questa funzione deve essere utilizzata solo con circuiti costruiti utilizzando l'API C di Qiskit. Esso formula ipotesi sul circuito utilizzando solo le funzionalità esposte tramite C. Se ci si trova in un ambiente misto Python e e C, in genere è preferibile richiamare il transpiler tramite Python.
Questa funzione è multithread internamente e lancerà un pool di thread con thread pari al numero di CPU segnalato dal sistema operativo per impostazione predefinita. Questo include i core logici sulle CPU con multithreading simultaneo. È possibile regolare il numero di thread con la variabile d'ambiente RAYON_NUM_THREADS . Ad esempio, impostando RAYON_NUM_THREADS=4 si limita il pool di thread a 4 thread.
Sicurezza
Il comportamento è indefinito se dag, target, o non sono puntatori validi e non statenulli rispettivamente a, QkDag QkTarget, o a QkTranspileLayout . options deve essere un puntatore valido a a QkTranspileOptions o NULL. error deve essere un puntatore valido a un char puntatore o a NULL. Il valore del puntatore interno per state verrà sovrascritto da questa funzione. Se il valore a cui punta il puntatore deve essere liberato, ciò deve essere fatto al di fuori di questa funzione, poiché essa non provvederà a liberarlo.
Parametri
- dag – Un puntatore al circuito su cui eseguire il transpiler.
- target - Un puntatore al target per cui compilare il circuito.
- options - Un puntatore a un oggetto options che definisce le opzioni dell'utente. Se il puntatore è nullo, verranno utilizzati i valori predefiniti. Per maggiori dettagli sui valori predefiniti, vedere
qk_transpile_default_options. - tipo – Un puntatore a un puntatore a un
QkTranspilerStageStateoggetto. In caso di esecuzione riuscita (codice di ritorno 0), a questo puntatore verrà assegnato un puntatore all'oggetto di stato creato dal transpiler. - errore – Un puntatore a un puntatore con una stringa terminata da nul con una descrizione dell'errore. Se il transpiler fallisce, un puntatore alla stringa con la descrizione dell'errore verrà scritto su questo puntatore. Quel puntatore deve essere liberato con
qk_str_free. Questo può essere un puntatore nullo, nel qual caso l'errore non verrà registrato.
Risultati
Il codice di ritorno del transpiler, QkExitCode_Success significa successo e tutti gli altri valori indicano un errore.
qk_transpile_stage_routing
QkExitCode qk_transpile_stage_routing(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState *state, char **error)
Esegui la fase di routing predefinita del transpiler su un circuito
Il transpiler Qiskit è un compilatore di circuiti quantistici che riscrive un dato circuito di input per adattarlo ai vincoli di una QPU e ottimizza il circuito per l'esecuzione. Questa funzione esegue la terza fase del gestore di passaggi preimpostati, il routing, che traduce tutte le istruzioni nel circuito in quelle supportate dal target. Per ulteriori dettagli, consultare la sezione Fase di instradamento.
Questa funzione deve essere utilizzata solo con circuiti costruiti utilizzando l'API C di Qiskit. Esso formula ipotesi sul circuito utilizzando solo le funzionalità esposte tramite C. Se ci si trova in un ambiente misto Python e e C, in genere è preferibile richiamare il transpiler tramite Python.
Questa funzione è multithread internamente e lancerà un pool di thread con thread pari al numero di CPU segnalato dal sistema operativo per impostazione predefinita. Questo include i core logici sulle CPU con multithreading simultaneo. È possibile regolare il numero di thread con la variabile d'ambiente RAYON_NUM_THREADS . Ad esempio, impostando RAYON_NUM_THREADS=4 si limita il pool di thread a 4 thread.
Sicurezza
Il comportamento è indefinito se dag, target, o layout, non sono puntatori validi e non nulli rispettivamente a QkDag, QkTarget, o un QkTranspileLayout puntatore. options deve essere un puntatore valido a a QkTranspileOptions o NULL. error deve essere un puntatore valido a un char puntatore o NULL.
Parametri
- dag – Un puntatore al circuito su cui eseguire il transpiler.
- target - Un puntatore al target per cui compilare il circuito.
- options - Un puntatore a un oggetto options che definisce le opzioni dell'utente. Se il puntatore è nullo, verranno utilizzati i valori predefiniti. Per maggiori dettagli sui valori predefiniti, vedere
qk_transpile_default_options. - stato – Un puntatore a un puntatore a un
QkTranspilerStageStateoggetto contenente il layout. In genere è necessario eseguireqk_transpile_stage_layoutprima di questa funzione; ciò fornirà unQkTranspilerStageStateoggetto con il layout iniziale già impostato. Vuoi prendere lo stato di output di quella funzione e utilizzarlo come input per questa. Se non disponi di un oggetto layout (ad esempio, se hai eseguito un ciclo di layout personalizzato). È possibile eseguireqk_transpile_layout_generate_from_mappingil comando per generare una configurazione banale (in cui il qubit virtuale 0 nel circuito è mappato sul qubit fisico 0 nel target, 1->1, 2->2, ecc.) per il DAG nel suo stato attuale. In questo modo potrai generare un oggetto di layout per la fase di instradamento se crei un layout personalizzato. - errore – Un puntatore a un puntatore con una stringa terminata da nul con una descrizione dell'errore. Se il transpiler fallisce, un puntatore alla stringa con la descrizione dell'errore verrà scritto su questo puntatore. Quel puntatore deve essere liberato con
qk_str_free. Questo può essere un puntatore nullo, nel qual caso l'errore non verrà registrato.
Risultati
Il codice di ritorno del transpiler, QkExitCode_Success significa successo e tutti gli altri valori indicano un errore.
qk_transpile_stage_optimization
QkExitCode qk_transpile_stage_optimization(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, char **error, QkTranspilerStageState *state)
Esegui la fase di ottimizzazione preimpostata del transpiler su un circuito
Il transpiler Qiskit è un compilatore di circuiti quantistici che riscrive un dato circuito di input per adattarlo ai vincoli di una QPU e ottimizza il circuito per l'esecuzione. Questa funzione esegue la quarta fase del gestore di passaggi preimpostati, l'ottimizzazione, che ottimizza il circuito per l'obiettivo dato dopo che il circuito è stato trasformato in un circuito fisico. Per ulteriori dettagli, consultare la fase di ottimizzazione.
Questa funzione deve essere utilizzata solo con circuiti costruiti utilizzando l'API C di Qiskit. Esso formula ipotesi sul circuito utilizzando solo le funzionalità esposte tramite C. Se ci si trova in un ambiente misto Python e e C, in genere è preferibile richiamare il transpiler tramite Python.
Questa funzione è multithread internamente e lancerà un pool di thread con thread pari al numero di CPU segnalato dal sistema operativo per impostazione predefinita. Questo include i core logici sulle CPU con multithreading simultaneo. È possibile regolare il numero di thread con la variabile d'ambiente RAYON_NUM_THREADS . Ad esempio, impostando RAYON_NUM_THREADS=4 si limita il pool di thread a 4 thread.
Sicurezza
Il comportamento è indefinito se dag e non target sono puntatori validi e non nulli rispettivamente a QkTarget o a QkDag. options deve essere un puntatore valido a a QkTranspileOptions o NULL. error deve essere un puntatore valido a un char puntatore o NULL.
Parametri
- dag – Un puntatore al circuito su cui eseguire il transpiler.
- target - Un puntatore al target per cui compilare il circuito.
- options - Un puntatore a un oggetto options che definisce le opzioni dell'utente. Se il puntatore è nullo, verranno utilizzati i valori predefiniti. Per maggiori dettagli sui valori predefiniti, vedere
qk_transpile_default_options. - errore – Un puntatore a un puntatore con una stringa terminata da nul con una descrizione dell'errore. Se il transpiler fallisce, un puntatore alla stringa con la descrizione dell'errore verrà scritto su questo puntatore. Quel puntatore deve essere liberato con
qk_str_free. Questo può essere un puntatore nullo, nel qual caso l'errore non verrà registrato. - stato – Un puntatore a un
QkTranspilerStageStateoggetto contenente il layout. In genere, dovrai eseguire la funzioneqk_transpile_stage_layoutprima di questa; ciò fornirà unQkTranspileLayoutoggetto con il layout iniziale desiderato. Dovrai quindi prendere il layout di output di quella funzione e utilizzarlo come input per questa. Se non disponi di un oggetto layout (ad esempio, se hai eseguito un ciclo di layout personalizzato). È possibile eseguireqk_transpile_layout_generate_from_mappingil comando per generare una configurazione banale (in cui il qubit virtuale 0 nel circuito è mappato sul qubit fisico 0 nel target, 1->1, 2->2, ecc.) per il DAG nel suo stato attuale. In questo modo potrai generare un oggetto di layout per la fase di ottimizzazione se crei un layout personalizzato.
Risultati
Il codice di ritorno del transpiler, QkExitCode_Success significa successo e tutti gli altri valori indicano un errore.
qk_transpile_stage_translation
QkExitCode qk_transpile_stage_translation(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, char **error)
Esegui la fase di traduzione preimpostata del transpiler su un circuito
Il transpiler Qiskit è un compilatore di circuiti quantistici che riscrive un dato circuito di input per adattarlo ai vincoli di una QPU e ottimizza il circuito per l'esecuzione. Questa funzione esegue la quarta fase del gestore di passaggi preimpostati, la traduzione, che traduce tutte le istruzioni nel circuito in quelle supportate dalla destinazione. Per ulteriori dettagli, consultare la sezione Fase di traduzione.
Questa funzione deve essere utilizzata solo con circuiti costruiti utilizzando l'API C di Qiskit. Esso formula ipotesi sul circuito utilizzando solo le funzionalità esposte tramite C. Se ci si trova in un ambiente misto Python e e C, in genere è preferibile richiamare il transpiler tramite Python.
Questa funzione è multithread internamente e lancerà un pool di thread con thread pari al numero di CPU segnalato dal sistema operativo per impostazione predefinita. Questo include i core logici sulle CPU con multithreading simultaneo. È possibile regolare il numero di thread con la variabile d'ambiente RAYON_NUM_THREADS . Ad esempio, impostando RAYON_NUM_THREADS=4 si limita il pool di thread a 4 thread.
Sicurezza
Il comportamento è indefinito se dag e non target sono puntatori validi e non nulli rispettivamente a a QkTarget QkDage. options deve essere un puntatore valido a a QkTranspileOptions o NULL. error deve essere un puntatore valido a un char puntatore o NULL.
Parametri
- dag – Un puntatore al circuito su cui eseguire il transpiler.
- target - Un puntatore al target per cui compilare il circuito.
- options - Un puntatore a un oggetto options che definisce le opzioni dell'utente. Se il puntatore è nullo, verranno utilizzati i valori predefiniti. Per maggiori dettagli sui valori predefiniti, vedere
qk_transpile_default_options. - errore – Un puntatore a un puntatore con una stringa terminata da nul con una descrizione dell'errore. Se il transpiler fallisce, un puntatore alla stringa con la descrizione dell'errore verrà scritto su questo puntatore. Quel puntatore deve essere liberato con
qk_str_free. Questo può essere un puntatore nullo, nel qual caso l'errore non verrà registrato.
Risultati
Il codice di ritorno del transpiler, QkExitCode_Success significa successo e tutti gli altri valori indicano un errore.
qk_transpile_stage_layout
QkExitCode qk_transpile_stage_layout(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState **state, char **error)
Eseguire la fase di layout predefinita del transpiler su un circuito
Il transpiler Qiskit è un compilatore di circuiti quantistici che riscrive un dato circuito di input per adattarlo ai vincoli di una QPU e ottimizza il circuito per l'esecuzione. Questa funzione esegue la seconda fase del layout del gestore di passaggi preimpostati, che sceglie la mappatura iniziale dei qubit virtuali ai qubit fisici, compresa l'espansione del circuito per contenere ancille esplicite. Per ulteriori dettagli, consultare la fase di layout.
Questa funzione deve essere utilizzata solo con circuiti costruiti utilizzando l'API C di Qiskit. Esso formula ipotesi sul circuito utilizzando solo le funzionalità esposte tramite C. Se ci si trova in un ambiente misto Python e e C, in genere è preferibile richiamare il transpiler tramite Python.
Questa funzione è multithread internamente e lancerà un pool di thread con thread pari al numero di CPU segnalato dal sistema operativo per impostazione predefinita. Questo include i core logici sulle CPU con multithreading simultaneo. È possibile regolare il numero di thread con la variabile d'ambiente RAYON_NUM_THREADS . Ad esempio, impostando RAYON_NUM_THREADS=4 si limita il pool di thread a 4 thread.
Sicurezza
Il comportamento è indefinito se dag o target, non sono puntatori validi e non nulli rispettivamente a un QkTarget o a QkDag un. Il comportamento è inoltre indefinito se non layout è un puntatore valido e allineato a un puntatore a un QkTranspileLayout o a un puntatore a un NULL puntatore. options deve essere un puntatore valido a a QkTranspileOptions o NULL. error deve essere un puntatore valido a un char puntatore o NULL.
Parametri
- dag – Un puntatore al circuito su cui eseguire il transpiler.
- target - Un puntatore al target per cui compilare il circuito.
- options - Un puntatore a un oggetto options che definisce le opzioni dell'utente. Se il puntatore è nullo, verranno utilizzati i valori predefiniti. Per maggiori dettagli sui valori predefiniti, vedere
qk_transpile_default_options. - tipo – Un puntatore a un puntatore a un
QkTranspilerStageStateoggetto. In caso di esecuzione riuscita (codice di ritorno 0), l'oggetto layout creato dal transpiler verrà scritto nell'oggetto di stato indicato da questo puntatore. Il puntatore interno corrispondente può essere nullo se non esiste alcun oggetto di stato o di layout. In genere, quando si esegue quella funzione, si prendeqk_transpile_stage_initlo stato di output e si utilizza la sua struttura come input per questa. Ma se non si dispone di un layout, il puntatore interno può essere nullo e verrà allocato un nuovoQkTranspilerStageStateoggetto con un layout, e quel puntatore verrà impostato sul valore interno del layout in questo punto. - errore – Un puntatore a un puntatore con una stringa terminata da nul con una descrizione dell'errore. Se il transpiler fallisce, un puntatore alla stringa con la descrizione dell'errore verrà scritto su questo puntatore. Quel puntatore deve essere liberato con
qk_str_free. Questo può essere un puntatore nullo, nel qual caso l'errore non verrà registrato.
Risultati
Il codice di ritorno del transpiler, QkExitCode_Success significa successo e tutti gli altri valori indicano un errore.
qk_transpile
QkExitCode qk_transpile(const QkCircuit *qc, const QkTarget *target, const QkTranspileOptions *options, QkTranspileResult *result, char **error)
Transpile un singolo circuito.
Il transpiler Qiskit è un compilatore di circuiti quantistici che riscrive un circuito in ingresso per adattarlo ai vincoli di una QPU e ottimizza il circuito per l'esecuzione. Questa funzione deve essere utilizzata solo con circuiti costruiti utilizzando l'API C di Qiskit. Fa delle ipotesi sul circuito solo utilizzando le funzionalità esposte tramite C; se si è in un ambiente misto Python e C, in genere è meglio invocare il transpiler tramite Python.
Questa funzione è multithread internamente e lancerà un pool di thread con thread pari al numero di CPU segnalato dal sistema operativo per impostazione predefinita. Questo include i core logici sulle CPU con multithreading simultaneo. È possibile regolare il numero di thread con la variabile d'ambiente RAYON_NUM_THREADS . Ad esempio, impostando RAYON_NUM_THREADS=4 si limita il pool di thread a 4 thread.
Sicurezza
Il comportamento è indefinito se circuit, target, o result, non sono puntatori validi e non nulli rispettivamente a QkCircuit, QkTranspileResult QkTarget, o. options deve essere un puntatore valido a a QkTranspileOptions o NULL. error deve essere un puntatore valido a un char puntatore o NULL.
Parametri
- qc - Un puntatore al circuito su cui eseguire il transpiler.
- target - Un puntatore al target per cui compilare il circuito.
- options - Un puntatore a un oggetto options che definisce le opzioni dell'utente. Se il puntatore è nullo, verranno utilizzati i valori predefiniti. Per maggiori dettagli sui valori predefiniti, vedere
qk_transpile_default_options. - result - Un puntatore alla posizione di memoria del risultato del transpiler. Se l'esecuzione ha successo (codice di ritorno 0), l'output del transpiler viene scritto nel puntatore. I membri della struttura dei risultati sono di proprietà del chiamante e l'utente è responsabile della liberazione dei membri utilizzando le rispettive funzioni free.
- errore – Un puntatore a un puntatore con una stringa terminata da nul con una descrizione dell'errore. Se il transpiler fallisce, un puntatore alla stringa con la descrizione dell'errore verrà scritto su questo puntatore. Quel puntatore deve essere liberato con
qk_str_free. Questo può essere un puntatore nullo, nel qual caso l'errore non verrà registrato.
Risultati
Il codice di ritorno del transpiler, QkExitCode_Success significa successo e tutti gli altri valori indicano un errore.