Kvantová střední reprezentace

Quantum Intermediate Representation QIR je zprostředkující reprezentace, která slouží jako společné rozhraní mezi kvantovými programovacími jazyky a architekturami a targetplatformami pro kvantové výpočty. QIR určuje sadu pravidel pro reprezentaci kvantových programů pomocí formátu nezávislého na jazyce a hardwaru v rámci prostředí LLVM IR. QIR je projekt vyvinutý společností QIR Alliance, jehož členem je Microsoft.

Co je zprostředkující reprezentace?

Běžným vzorem v klasických kompilátorech je začít kompilací zdrojového jazyka do zprostředkující reprezentace. Zprostředkující reprezentace je – jak naznačuje její název – zprostředkující krok při převodu instrukcí ze zdrojového kódu do strojového jazyka.

Zprostředkující reprezentace funguje jako abstraktní reprezentace programu. Všechny programy, bez ohledu na jazyk, ve kterém jsou napsané, jsou do této zprostředkující reprezentace přeloženy takzvaným front-endovým kompilátorem, zatímco back-endová komponenta zodpovídá za překlad této zprostředkující reprezentace do strojové reprezentace. Zprostředkující reprezentace tak umožňuje oddělit zdrojové jazyky od hardwarových platforem a umožňuje modulárním způsobem sestavit kompilátor, kde každý nový jazyk vyžaduje pouze podporu nového front-endu na všech platformách, pro které je k dispozici back-end.

Zprostředkující reprezentace je obvykle navržená tak, aby umožňovala reprezentaci mnoha různých zdrojových jazyků. Kromě toho je na této střední úrovni také možné provést určitou optimalizaci a přeuspořádáním okruhů, které zefektivní konečnou implementaci. Jakmile je známa platforma konečného target spuštění, je možné zkompilovat zprostředkující reprezentaci do skutečného spustitelného kódu.

Tento přístup umožňuje mnoha zdrojovým jazykům sdílet společnou sadu optimalizátorů a generátorů spustitelných souborů. To také usnadňuje kompilaci jednoho zdrojového jazyka pro mnoho různých targets. Zprostředkující reprezentace poskytuje společnou platformu, kterou lze sdílet mezi mnoha zdroji a targets umožňuje velké množství opětovného použití v strojích kompilátoru.

Co je Quantum Intermediate Representation?

QIR je zprostředkující reprezentace kvantových programů vyvinutých společností QIR Alliance, do které patří Microsoft. Poskytuje společné rozhraní, které podporuje mnoho jazyků a target platforem pro kvantové výpočty. QIR si můžete představit jako univerzální jazyk střední vrstvy, který umožňuje komunikaci mezi jazyky a počítači vysoké úrovně. Zatímco Q# se kompiluje na QIR, QIR není specifický pro Q#: jakákoli architektura kvantového programování může využít QIR k reprezentaci kvantového programu. Je nezávislá na hardwaru, což znamená, že neurčuje kvantovou instrukci ani sadu bran, což ponechá na výpočetním target prostředí.

QIR je založen na oblíbeném klasickém opensourcovém kompilátoru LLVM . LLVM je kolekce modulárních a opakovaně použitelných kompilátorů a technologií toolchain, které byly přizpůsobeny širokou sadou jazyků. QIR určuje sadu pravidel pro reprezentaci kvantových konstruktorů v LLVM, ale nevyžaduje žádná rozšíření ani úpravy LLVM.

Skutečnost, že LLVM je základní sadou nástrojů, znamená, že funkce QIR je přirozeně schopna zpracovávat klasickou i kvantovou logiku. Tato funkce je nezbytná pro hybridní kvantové a klasické algoritmy, které jsou stále důležitější pro aplikace kvantových výpočtů. Kromě toho vám umožňuje využít nástroje pro kompilaci a optimalizaci z klasického výpočetního odvětví, a proto snížit náklady na psaní překladů.

Mnoho předních odvětví kvantových výpočtů už technologii QIR přijalo. Například NVIDIA, Oak Ridge National Laboratory, Quantinuum, Quantum Circuits Inc. a Rigetti Computing vytvářejí sady nástrojů, které využívají QIR.

Další informace najdete ve specifikaci QIR. Pokud vás zajímají nástroje kompilátoru a projekty, které používají QIR, podívejte se prosím na tato úložiště QIR.

Co je QIR Alliance?

QIR Alliance je společným úsilím o vývoj kvantových mezilehlých reprezentací s cílem umožnit plnou interoperabilitu v rámci kvantového ekosystému, snížit úsilí všech stran o vývoj a poskytnout reprezentaci vhodnou pro současné a budoucí heterogenní kvantové procesory.

Kvantové sady SDK a jazyky se objevují a vyvíjejí rychlým tempem spolu s novými kvantovými procesory s jedinečnými a odlišnými funkcemi. Pro zajištění interoperability mezi novými jazyky a novými hardwarovými funkcemi je nezbytné, aby ekosystém vyvinul a sdílel zprostředkující reprezentaci, která funguje se současným i budoucím kvantovým hardwarem.

QIR Alliance se svou společnou prací a partnerstvím usiluje o:

  • Snížit úsilí potřebného vývoje pro všechny strany tím, že bude podporována interoperabilita mezi různými architekturami a jazyky.
  • Povolte vývoj sdílených knihoven pro vývoj kvantových aplikací i pro vývoj kvantových kompilátorů.
  • Využijte nejmodernější technologii kompilátoru a využijte stávající nástroje, knihovny a poznatky z vysoce výkonného výpočetního prostředí.
  • Umožňuje přírůstkový a progresivní vývoj v tom, jak můžou klasické a kvantové výpočty interagovat na hardwarové úrovni.
  • Poskytněte flexibilitu pro snadné propojení nově vznikajících technologií způsobem, který umožňuje experimentovat s jedinečnými a diferencovanými hardwarovými funkcemi.

QIR Alliance je součástí práce nadace Linux Foundation joint Development Foundation na otevřených standardech. Mezi zakládající členy patří Microsoft a také Quantinuum (dříve Honeywell), Oak Ridge National Laboratory, Quantum Circuits Inc. a Rigetti Computing.

Jak vypadá Quantum Intermediate Representation ?

Vzhledem k tomu, že funkce QIR je založená na LLVM, vypadá QIR jako LLVM.

Představte si například následující Q# kód pro vygenerování páru Bell:

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

Při kompilaci do QIR se stane:

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
}

V tomto fragmentu kódu uvidíte několik funkcí QIR:

  • Operace v Q# (nebo jiném kvantovém programovacím jazyce) jsou reprezentovány funkcemi LLVM.
  • Qubity jsou reprezentovány jako ukazatele na pojmenovaný typ neprůsvné struktury s názvem %Qubit.

Zatímco QIR pro CreateBellPair operaci je velmi jednoduché, QIR dědí všechny možnosti LLVM pro vyjádření smyček, podmíněných a dalších složitých toků řízení. QIR také dědí schopnost LLVM vyjádřit libovolné klasické výpočty.

Další informace watch vývojářské relaci Microsoftu z události Q2B 2021.

Proč je Quantum Intermediate Representation důležité?

QIR je nezbytný nástroj při spouštění kvantových algoritmů na skutečném hardwaru. Střední reprezentace ale mohou hrát důležitou roli i v případě, že chcete vyvíjet algoritmy na teoretičtější úrovni.

Například jedna aplikace povolená pomocí QIR je použít kompilátor Clang, front-end jazyka C pro LLVM, ke kompilaci QIR do spustitelného strojového kódu pro klasický target. To poskytuje snadnou cestu k vytvoření simulátoru v jazyce C nebo C++ implementací kvantových instrukcí, které by mohly zjednodušit vytváření kvantových simulátorů.

Kromě toho můžete zprostředkující reprezentaci použít k vygenerování kódu, který se později poskytne jako vstup do kvantového simulátoru (místo skutečného zařízení), který by mohl potenciálně používat jiný jazyk než zdrojový kód. Tímto způsobem můžete snadno porovnávat a testovat různé jazyky nebo simulátory pomocí společné architektury.

Pokud jde o optimalizaci kódu, existují kroky optimalizace, které lze provést na střední úrovni, které mohou zefektivnit celkovou implementaci algoritmu. Prozkoumání této optimalizace vstupního kódu vám může pomoct lépe pochopit, kde algoritmy zefektivnit a jak zlepšit kvantové programovací jazyky.

Další aplikací je použití standardní infrastruktury LLVM "pass" k vytvoření optimalizátorů kvantového kódu, které pracují s QIR. Přístup QIR nezávislý na jazyce a hardwaru umožňuje téměř bez úsilí znovu použít optimalizátory pro různé výpočetní jazyky a výpočetní platformy.

Další kroky