Rappresentazione intermedia quantistica

Quantum Intermediate Representation (QIR) è una rappresentazione intermedia che funge da interfaccia comune tra linguaggi di programmazione quantistici/framework e targetpiattaforme di calcolo quantistiche. QIR specifica un set di regole per rappresentare i programmi quantistici usando un linguaggio e un formato agnostico hardware all'interno del runtime di integrazione LLVM. QiR è un progetto sviluppato dall'Alleanza QIR di cui Microsoft è uno dei suoi membri.

Che cos'è una rappresentazione intermedia?

Un modello comune nei compilatori classici consiste nel compilare il linguaggio di origine in una rappresentazione intermedia. Una rappresentazione intermedia è , come indica il nome, un passaggio intermedio nella conversione delle istruzioni dal codice sorgente al linguaggio del computer.

Una rappresentazione intermedia funge da rappresentazione astratta di un programma. Tutti i programmi, indipendentemente dal linguaggio in cui sono scritti, vengono tradotti in questa rappresentazione intermedia da un compilatore front-end cosiddetto, mentre un componente back-end è responsabile della conversione di tale rappresentazione intermedia in una rappresentazione di macchina. La rappresentazione intermedia consente quindi di separare i linguaggi di origine dalle piattaforme hardware e consente di creare un compilatore in modo modulare, in cui ogni nuovo linguaggio richiede solo un nuovo front-end per essere supportato in tutte le piattaforme per cui è disponibile un back-end.

La rappresentazione intermedia è in genere progettata per consentire la rappresentazione di molti linguaggi di origine diversi. Inoltre, a questo livello intermedio è anche possibile eseguire alcune ottimizzazioni e riorganizzare il circuito che rende l'implementazione finale più efficiente. Una volta nota la piattaforma di esecuzione finale target , la rappresentazione intermedia può essere compilata nel codice eseguibile effettivo.

Questo approccio consente a molti linguaggi di origine di condividere un set comune di ottimizzatori e generatori eseguibili. Semplifica anche la compilazione di un singolo linguaggio di origine per molti diversi targets. La rappresentazione intermedia offre una piattaforma comune che può essere condivisa tra molte origini e targets consente un grande riutilizzo nei macchinari del compilatore.

Che cos'è Quantum Intermediate Representation?

QIR è una rappresentazione intermedia per i programmi quantistici sviluppati dall'Alleanza QIR, a cui Appartiene Microsoft. Fornisce un'interfaccia comune che supporta molti linguaggi e target piattaforme per il calcolo quantistico. È possibile pensare a QIR come un linguaggio a metà livello universale che consente la comunicazione tra linguaggi di alto livello e computer. Durante Q# la compilazione in QIR, QIR non è specifico di Q#: qualsiasi framework di programmazione quantistica può sfruttare QIR per rappresentare un programma quantistico. È hardware-agnostico, che significa che non specifica un set di istruzioni quantistiche o gate, lasciandolo all'ambiente target di calcolo.

QIR si basa sul compilatore LLVM open source popolare. LLVM è una raccolta di tecnologie del compilatore e riutilizzabili modulari e riutilizzabili che sono state adattate da un ampio set di linguaggi. QIR specifica un set di regole per rappresentare costrutti quantistici in LLVM, ma non richiede estensioni o modifiche a LLVM.

Il fatto che LLVM è la toolchain sottostante significa che QIR è naturalmente in grado di elaborare sia la logica classica che quantistica. Questa funzionalità è essenziale per gli algoritmi quantistici ibridi, che sono diventati sempre più importanti per le applicazioni di calcolo quantistico. Inoltre, consente di sfruttare gli strumenti di compilazione e ottimizzazione dal settore di calcolo classico e, pertanto, per ridurre il costo di scrittura delle traduzioni.

Molti settori di calcolo quantistico principali hanno già adottato QIR. Ad esempio, NVIDIA, Oak Ridge National Laboratory, Quantinuum, Quantum Circuits Inc.e Rigetti Computing stanno creando toolchain che sfruttano QIR.

Per altre informazioni, vedere La specifica di QIR. Se si è interessati a strumenti e progetti del compilatore che usano QIR, vedere questi repository QIR.

Che cos'è l'Alleanza QIR?

L'alleanza QIR è uno sforzo comune per sviluppare una rappresentazione intermedia quantistica in avanti con l'obiettivo di abilitare l'interoperabilità completa all'interno dell'ecosistema quantistico, ridurre lo sforzo di sviluppo da tutte le parti e fornire una rappresentazione adatta per i processori quantistici attuali e futuri.

Gli SDK quantistici e i linguaggi appaiono e si evolveno a un ritmo rapido, insieme ai nuovi processori quantistici con funzionalità univoche e distinte tra loro. Per garantire l'interoperabilità tra nuovi linguaggi e nuove funzionalità hardware, è imperativo sviluppare e condividere una rappresentazione intermedia che funziona con hardware quantistico presente e futuro.

Con il loro lavoro collettivo e la collaborazione, l'Alleanza QIR mira a:

  • Ridurre lo sforzo di sviluppo necessario per tutte le parti promuovendo l'interoperabilità tra framework e linguaggi diversi.
  • Abilitare lo sviluppo di librerie condivise sia per lo sviluppo di applicazioni quantistiche che per lo sviluppo del compilatore quantistico.
  • Creare una tecnologia del compilatore di tipo state-of-the-art e sfruttare gli strumenti, le librerie e gli apprendimento esistenti dal calcolo ad alte prestazioni.
  • Consentire l'evoluzione incrementale e progressiva nel modo in cui i calcoli classici e quantistici possono interagire a livello di hardware.
  • Offrire la flessibilità per connettere facilmente le tecnologie emergenti in modo da consentire la sperimentazione con funzionalità hardware distinte e differenziate.

L'alleanza QIR fa parte del lavoro di Joint Development Foundation di Linux Foundation sugli standard aperti. I membri fondatori includono Microsoft, oltre a Quantinuum (in precedenza Honeywell), Oak Ridge National Laboratory, Quantum Circuits Inc e Rigetti Computing.

Cosa sembra Quantum Intermediate Representation ?

Poiché QIR si basa su LLVM, QIR è simile a LLVM.

Si consideri ad esempio il codice seguente Q# per generare una coppia Bell:

operation CreateBellPair(q1 : Qubit, q2 : Qubit) : Unit {
    H(q1);
    CNOT(q1, q2);
}

Quando compilato in QIR, diventa:

define void @CreateBellPair__body(%Qubit* %q1, %Qubit* %q2) {
entry:
  call void @__quantum__qis__h(%Qubit* %q1)
  call void @__quantum__qis__cnot(%Qubit* %q1, %Qubit* %q2)
  ret void
}

In questo frammento di codice è possibile visualizzare alcune funzionalità di QIR:

  • Le operazioni in Q# (o qualsiasi altro linguaggio di programmazione quantistico) sono rappresentate dalle funzioni LLVM.
  • I qubit sono rappresentati come puntatori a un tipo di struttura opaco denominato %Qubit.

Mentre qiR per l'operazione CreateBellPair è molto semplice, QIR eredita tutte le funzionalità di LLVM per esprimere cicli, condizionali e altro flusso di controllo complesso. QIR eredita anche la capacità di LLVM di esprimere il calcolo classico arbitrario.

Per altre informazioni, watch sessione di sviluppo di Microsoft dall'evento Q2B 2021.

Perché è Quantum Intermediate Representation importante?

QIR è uno strumento essenziale quando si eseguono algoritmi quantistici su hardware reale. Ma le rappresentazioni intermedie possono svolgere un ruolo importante anche se si vogliono sviluppare algoritmi a un livello più teorico.

Ad esempio, un'applicazione abilitata da QIR consiste nell'usare il compilatore Clang, un front-end del linguaggio C per LLVM, per compilare QIR nel codice del computer eseguibile per un oggetto classico target. In questo modo è possibile creare un simulatore in C o C++ implementando le istruzioni quantistiche, che potrebbero semplificare la creazione di simulatori quantistici.

Inoltre, è possibile usare la rappresentazione intermedia per generare il codice fornito in un secondo momento come input in un simulatore quantistico, anziché in un dispositivo reale, che potrebbe potenzialmente usare un linguaggio diverso rispetto al codice sorgente. In questo modo, è possibile confrontare e confrontare facilmente diversi linguaggi o simulatori usando un framework comune.

In termini di ottimizzazione del codice, sono disponibili passaggi di ottimizzazione che possono essere eseguiti a livello intermedio che possono rendere più efficiente l'implementazione complessiva dell'algoritmo. L'analisi di questa ottimizzazione del codice di input consente di ottenere una migliore comprensione della posizione in cui rendere più efficienti gli algoritmi e come migliorare i linguaggi di programmazione quantistici.

Un'altra applicazione consiste nell'usare l'infrastruttura LLVM "pass" standard per creare ottimizzatori di codice quantistico che operano su QIR. L'approccio indipendente dal linguaggio e hardware di QIR consente di riutilizzare tali ottimizzatori per diversi linguaggi di calcolo e piattaforme di calcolo senza sforzo.

Passaggi successivi