Tussenliggende kwantumweergave
Quantum Intermediate Representation (QIR) is een tussenliggende weergave die fungeert als een gemeenschappelijke interface tussen kwantumprogrammeertalen/frameworks en gerichte kwantumberekeningsplatforms. QIR geeft een set regels op voor het vertegenwoordigen van kwantumprogramma's met behulp van een taal- en hardwareagnostische indeling binnen de LLVM IR. De QIR is een project dat is ontwikkeld door de QIR Alliance waarvan Microsoft een van zijn leden is.
Wat is een tussenliggende weergave?
Een veelvoorkomend patroon in klassieke compilers is om te beginnen met het compileren van de brontaal in een tussenliggende weergave. Een tussenliggende weergave is – zoals de naam aangeeft – een tussenliggende stap in de conversie van instructies van broncode naar computertaal.
Een tussenliggende representatie fungeert als een abstracte representatie van een programma. Alle programma's, ongeacht de taal waarin ze zijn geschreven, worden vertaald in deze tussenliggende weergave door een zogenaamde front-end-compiler, terwijl een back-endonderdeel verantwoordelijk is voor het vertalen van die tussenliggende weergave in een computerweergave. De tussenliggende weergave maakt het dus mogelijk om brontalen los te koppelen van hardwareplatforms en maakt het mogelijk om een compiler op een modulaire manier te bouwen, waarbij voor elke nieuwe taal alleen een nieuwe front-end moet worden ondersteund op alle platforms waarvoor een back-end beschikbaar is.
De tussenliggende weergave is doorgaans zodanig ontworpen dat veel verschillende brontalen kunnen worden weergegeven. Bovendien is het op dit tussenliggende niveau ook mogelijk om een aantal optimalisaties en circuitherschikkingen uit te voeren die de uiteindelijke implementatie efficiënter maakt. Zodra het uiteindelijke target uitvoeringsplatform bekend is, kan de tussenliggende weergave worden gecompileerd naar de werkelijke uitvoerbare code.
Met deze benadering kunnen veel brontalen een gemeenschappelijke set optimalisatieprogramma's en uitvoerbare generatoren delen. Het maakt het ook eenvoudig om één brontaal te compileren voor veel verschillende targets. De tussenliggende weergave biedt een gemeenschappelijk platform dat kan worden gedeeld in veel bronnen en targets die veel hergebruik in compilermachines mogelijk maakt.
Wat is Quantum Intermediate Representation?
QIR is een tussenliggende weergave voor kwantumprogramma's die zijn ontwikkeld door de QIR Alliance, waartoe Microsoft behoort. Het biedt een algemene interface die ondersteuning biedt voor veel talen en target platforms voor kwantumberekening. U kunt QIR beschouwen als een universele middellaagstaal waarmee communicatie tussen talen op hoog niveau en computers mogelijk is. Tijdens Q# het compileren naar QIR is QIR niet specifiek voor Q#: elk kwantumprogrammeerframework kan gebruikmaken van QIR om een kwantumprogramma weer te geven. Het is hardware-agnostisch, wat betekent dat er geen kwantuminstructie of gateset wordt opgegeven, waardoor deze wordt overgelaten aan de target computeromgeving.
QIR is gebaseerd op de populaire opensource LLVM klassieke compiler. LLVM is een verzameling modulaire en herbruikbare compiler- en toolchaintechnologieën die zijn aangepast door een breed scala aan talen. QIR geeft een set regels op voor het weergeven van kwantumconstructies in LLVM, maar hiervoor zijn geen extensies of wijzigingen in LLVM vereist.
Het feit dat LLVM de onderliggende toolchain is, betekent dat QIR natuurlijk zowel klassieke als kwantumlogica kan verwerken. Deze functie is essentieel voor hybride kwantum-klassieke algoritmen, die steeds belangrijker zijn geworden voor toepassingen van kwantumcomputing. Daarnaast kunt u gebruikmaken van compilatie- en optimalisatiehulpprogramma's uit de klassieke computerindustrie en daarom de kosten voor het schrijven van vertalingen verlagen.
Veel toonaangevende kwantumcomputingindustrieën hebben al QIR aangenomen. Nvidia, Oak Ridge National Laboratory, Quantinuum, Quantum Circuits Inc.en Rigetti Computing bouwen bijvoorbeeld toolchains die gebruikmaken van QIR.
Zie de QIR-specificatie voor meer informatie. Als u geïnteresseerd bent in compilerhulpprogramma's en projecten die gebruikmaken van QIR, bekijkt u deze QIR-opslagplaatsen.
Wat is de QIR Alliance?
De QIR Alliance is een gezamenlijke inspanning om een vooruitziende kwantumbemiddeling te ontwikkelen met als doel volledige interoperabiliteit binnen het kwantumecosysteem mogelijk te maken, de ontwikkelingsinspanningen van alle partijen te verminderen en een representatie te bieden die geschikt is voor huidige en toekomstige heterogene kwantumprocessors.
Kwantum-SDK's en talen verschijnen en ontwikkelen zich in een snel tempo, samen met nieuwe kwantumprocessors met unieke en unieke mogelijkheden van elkaar. Om interoperabiliteit tussen nieuwe talen en nieuwe hardwaremogelijkheden te bieden, is het noodzakelijk dat het ecosysteem een tussenliggende representatie ontwikkelt en deelt die werkt met huidige en toekomstige kwantumhardware.
Met hun collectieve werk en partnerschap streeft de QIR Alliance ernaar:
- Verminder de vereiste ontwikkelingsinspanningen voor alle partijen door de interoperabiliteit tussen verschillende frameworks en talen te bevorderen.
- Schakel de ontwikkeling van gedeelde bibliotheken in voor zowel de ontwikkeling van kwantumtoepassingen als voor de ontwikkeling van kwantumcompilatoren.
- Bouw voort op geavanceerde compilertechnologie en maak gebruik van bestaande hulpprogramma's, bibliotheken en leermateriaal van high-performance computing.
- Sta incrementele en progressieve evolutie toe in de manier waarop klassieke en kwantumberekeningen op hardwareniveau kunnen communiceren.
- Bied de flexibiliteit om eenvoudig opkomende technologieën te verbinden op een manier die experimenten met afzonderlijke en gedifferentieerde hardwaremogelijkheden mogelijk maakt.
De QIR Alliance maakt deel uit van de Joint Development Foundation van de Linux Foundation voor open standaarden. Oprichters zijn Onder andere Microsoft, evenals Quantinuum (voorheen Honeywell), Oak Ridge National Laboratory, Quantum Circuits Inc. en Rigetti Computing.
Quantum Intermediate Representation Hoe ziet het eruit?
Omdat QIR is gebaseerd op LLVM, ziet QIR eruit als LLVM.
Denk bijvoorbeeld aan de volgende Q# code om een belpaar te genereren:
operation CreateBellPair(q1 : Qubit, q2 : Qubit) : Unit {
H(q1);
CNOT(q1, q2);
}
Wanneer deze wordt gecompileerd naar QIR, wordt dit:
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 dit fragment ziet u enkele QIR-functies:
- Bewerkingen in Q# (of een andere kwantumprogrammeertaal) worden vertegenwoordigd door LLVM-functies.
- Qubits worden weergegeven als aanwijzers naar een benoemd ondoorzichtig structuurtype met de naam
%Qubit
.
Hoewel de QIR voor de CreateBellPair
bewerking heel eenvoudig is, neemt QIR alle mogelijkheden van LLVM over om lussen, voorwaarden en andere complexe controlestroom uit te drukken. QIR neemt ook het vermogen van LLVM over om willekeurige klassieke berekeningen uit te drukken.
Bekijk de ontwikkelaarssessie van Microsoft van de Q2B-gebeurtenis 2021 voor meer informatie.
Waarom is Quantum Intermediate Representation belangrijk?
QIR is een essentieel hulpprogramma bij het uitvoeren van kwantumalgoritmen op echte hardware. Maar tussenliggende representaties kunnen een belangrijke rol spelen, zelfs als u alleen algoritmen op theoretisch niveau wilt ontwikkelen.
Eén toepassing die is ingeschakeld door QIR, is bijvoorbeeld het gebruik van de Clang-compiler, een C-taalfront-end voor LLVM, om QIR te compileren in uitvoerbare computercode voor een klassiek target. Dit biedt een eenvoudig pad naar het bouwen van een simulator in C of C++ door de kwantuminstructies te implementeren, waardoor het maken van kwantumsimulators kan worden vereenvoudigd.
Bovendien kunt u de tussenliggende weergave gebruiken om code te genereren die later wordt geleverd als invoer in een kwantumsimulator, in plaats van een echt apparaat, die mogelijk een andere taal kan gebruiken dan de broncode. Op deze manier kunt u eenvoudig verschillende talen of simulators vergelijken en benchmarken met behulp van een gemeenschappelijk framework.
Wat betreft codeoptimalisatie zijn er optimalisatiestappen die kunnen worden uitgevoerd op het tussenliggende niveau die de algehele implementatie van het algoritme efficiënter kunnen maken. Door deze optimalisatie van uw invoercode te onderzoeken, krijgt u meer inzicht in waar algoritmen efficiënter kunnen worden en hoe u de kwantumprogrammeertalen kunt verbeteren.
Een andere toepassing is het gebruik van de standaard-LLVM-'pass'-infrastructuur om kwantumcodeoptimalisaties te maken die op QIR werken. De taal- en hardwareonafhankelijke benadering van QIR maakt het mogelijk om deze optimalisatieprogramma's voor verschillende rekentalen en computerplatformen zonder moeite te hergebruiken.