Udostępnij za pośrednictwem


Reprezentacja pośrednia kwantowa

Quantum Intermediate Representation (QIR) to pośrednia reprezentacja, która służy jako wspólny interfejs między językami/strukturami programowania kwantowego i docelowymi platformami obliczeń kwantowych. QIR określa zestaw reguł reprezentujących programy kwantowe przy użyciu języka i formatu niezależnego od sprzętu w ramach środowiska LLVM IR. QIR to projekt opracowany przez QIR Alliance, którego firma Microsoft jest jednym z jego członków.

Co to jest reprezentacja pośrednia?

Typowym wzorcem w klasycznych kompilatorach jest rozpoczęcie od skompilowania języka źródłowego do pośredniej reprezentacji. Reprezentacja pośrednia to — jak wskazuje jej nazwa — pośredni krok konwersji instrukcji z kodu źródłowego na język maszynowy.

Reprezentacja pośrednia działa jako abstrakcyjna reprezentacja programu. Wszystkie programy, niezależnie od języka, w jakim są napisane, są tłumaczone na tę pośrednią reprezentację przez tak zwany kompilator front-end, podczas gdy komponent back-end jest odpowiedzialny za tłumaczenie tej pośredniej reprezentacji na reprezentację maszynową. Reprezentacja pośrednia pozwala w ten sposób rozdzielić języki źródłowe z platform sprzętowych i umożliwia kompilowanie kompilatora w modularny sposób, gdzie każdy nowy język wymaga obsługi tylko nowego frontonu na wszystkich platformach, dla których jest dostępny zaplecze.

Reprezentacja pośrednia jest zwykle przeznaczona do umożliwienia reprezentowania wielu różnych języków źródłowych. Ponadto na tym poziomie pośrednim można również przeprowadzić optymalizację i zmiana układu obwodu, co sprawia, że ostateczna implementacja jest wydajniejsza. Gdy znana jest ostateczna target platforma wykonawcza, można skompilować reprezentację pośrednią do faktycznego kodu wykonywalnego.

Takie podejście umożliwia wielu języków źródłowych współużytkowanie wspólnego zestawu optymalizatorów i generatorów wykonywalnych. Ułatwia również kompilowanie pojedynczego języka źródłowego dla wielu różnych języków targets. Reprezentacja pośrednia zapewnia wspólną platformę, która może być współużytkowana w wielu źródłach i targets, oraz umożliwia znaczne ponowne wykorzystanie mechanizmów kompilacyjnych.

Co to jest Quantum Intermediate Representation?

QIR to pośrednia reprezentacja programów kwantowych opracowanych przez QIR Alliance, do których należy firma Microsoft. Udostępnia on wspólny interfejs, który obsługuje wiele języków i target platform na potrzeby obliczeń kwantowych. QIR można traktować jako uniwersalny język warstwy średniej, który umożliwia komunikację między językami wysokiego poziomu i maszynami. Podczas gdy Q# kompiluje się do QIR, technologia QIR nie jest specyficzna dla Q#: każda struktura programowania kwantowego może wykorzystać QIR do reprezentowania programu kwantowego. Jest ona niezależna od sprzętu, co oznacza, że nie określa instrukcji kwantowych ani zestawu bram, pozostawiając je w środowisku obliczeniowym target.

Funkcja QIR jest oparta na popularnym klasycznym kompilatorze LLVM typu open source. LLVM to kolekcja modularnych i wielokrotnego użytku technologii kompilatora i łańcucha narzędzi, które zostały dostosowane przez szeroki zestaw języków. Funkcja QIR określa zestaw reguł reprezentujących konstrukcje kwantowe w maszynie wirtualnej LLVM, jednak nie wymaga żadnych rozszerzeń ani modyfikacji maszyny wirtualnej LLVM.

Fakt, że LLVM jest podstawowym łańcuchem narzędzi oznacza, że technologia QIR jest naturalnie w stanie przetwarzać zarówno logikę klasyczną, jak i kwantową. Ta funkcja jest niezbędna w przypadku hybrydowych algorytmów kwantowych i klasycznych, które stają się coraz ważniejsze w przypadku zastosowań obliczeń kwantowych. Ponadto umożliwia korzystanie z narzędzi do kompilacji i optymalizacji z klasycznej branży obliczeniowej, a zatem w celu zmniejszenia kosztów pisania tłumaczeń.

Wiele wiodących branż przetwarzania kwantowego przyjęło już QIR. Na przykład NVIDIA, Oak Ridge National Laboratory, Quantinuum, Quantum Circuits Inc. i Rigetti Computing budują łańcuchy narzędzi wykorzystujące QIR.

Aby uzyskać więcej informacji, zobacz specyfikację QIR. Jeśli interesuje Cię narzędzia kompilatora i projekty korzystające z funkcji QIR, zapoznaj się z tymi repozytoriami QIR.

Co to jest QIR Alliance?

QIR Alliance to wspólny wysiłek, aby opracować perspektywiczną reprezentację pośrednią kwantową z celem umożliwienia pełnej interoperacyjności w ekosystemie kwantowym, zmniejszenia nakładu pracy deweloperskiego ze wszystkich stron zaangażowanych i zapewnienia reprezentacji odpowiedniej dla obecnych i przyszłych heterogenicznych procesorów kwantowych.

Zestawy SDK i języki kwantowe pojawiają się i ewoluują w szybkim tempie wraz z nowymi procesorami kwantowymi z unikatowymi i odrębnymi możliwościami. Aby zapewnić współdziałanie między nowymi językami i nowymi możliwościami sprzętowymi, konieczne jest opracowanie ekosystemu i udostępnienie pośredniej reprezentacji, która współpracuje z obecnym i przyszłym sprzętem kwantowym.

Ze względu na ich wspólną pracę i partnerstwo, Sojusz QIR ma na celu:

  • Zmniejsz wymagane nakłady pracy programistycznej dla wszystkich stron, promując współdziałanie między różnymi strukturami i językami.
  • Umożliwia tworzenie bibliotek udostępnionych zarówno na potrzeby tworzenia aplikacji kwantowych, jak i tworzenia kompilatora kwantowego.
  • Wykorzystaj najnowocześniejszą technologię kompilatorów oraz istniejące narzędzia, biblioteki i doświadczenia wynikające z obliczeń o wysokiej wydajności.
  • Umożliwia przyrostową i progresywną ewolucję sposobu interakcji obliczeń klasycznych i kwantowych na poziomie sprzętu.
  • Zapewnienie elastyczności łatwego łączenia nowych technologii w sposób umożliwiający eksperymentowanie z odrębnymi i zróżnicowanymi możliwościami sprzętowymi.

QIR Alliance jest częścią pracy Fundacji Wspólnego Rozwoju Linux Foundation nad otwartymi standardami. Członkowie założycieli to Microsoft, a także Quantinuum, Oak Ridge National Laboratory, Quantum Circuits Inc. i Rigetti Computing.

Quantum Intermediate Representation Jak wygląda?

Ponieważ funkcja QIR jest oparta na maszynie wirtualnej LLVM, funkcja QIR wygląda jak maszyna wirtualna LLVM.

Rozważmy na przykład następujący Q# kod, aby wygenerować parę bell:

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

Po skompilowaniu do QIR, to staje się:

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
}

W tym fragmencie kodu można zobaczyć kilka funkcji QIR:

  • Operacje w Q# (lub dowolnym innym języku programowania kwantowego) są reprezentowane przez funkcje LLVM.
  • Kubity są reprezentowane jako wskaźniki do nazwanego typu struktury nieprzezroczystej o nazwie %Qubit.

Chociaż QIR dla CreateBellPair operacji jest bardzo prosty, QIR dziedziczy wszystkie możliwości LLVM do wyrażania pętli, instrukcji warunkowych i innego złożonego sterowania przepływem. QIR również dziedziczy zdolność LLVM do wyrażania dowolnych obliczeń klasycznych.

Aby uzyskać więcej informacji, obejrzyj sesję deweloperów firmy Microsoft z wydarzenia 2021 Q2B.

Dlaczego jest Quantum Intermediate Representation ważne?

QIR to podstawowe narzędzie podczas uruchamiania algorytmów kwantowych na rzeczywistym sprzęcie. Jednak reprezentacje pośrednie mogą odgrywać ważną rolę, nawet jeśli chcesz po prostu opracować algorytmy na bardziej teoretycznym poziomie.

Na przykład jedna aplikacja włączona przez funkcję QIR polega na użyciu kompilatora języka Clang, frontonu języka C dla maszyny wirtualnej LLVM, aby skompilować funkcję QIR do kodu maszyny wykonywalnej dla klasycznego targetelementu . Zapewnia to łatwą ścieżkę do tworzenia symulatora w języku C lub C++, implementując instrukcje kwantowe, co może uprościć tworzenie symulatorów kwantowych.

Ponadto możesz użyć pośredniej reprezentacji do wygenerowania kodu, który jest później dostarczany jako dane wejściowe do symulatora kwantowego — zamiast rzeczywistego urządzenia — co może potencjalnie używać innego języka niż kod źródłowy. W ten sposób można łatwo porównać i ocenić różne języki lub symulatory, korzystając ze wspólnych ram.

Pod względem optymalizacji kodu istnieją kroki optymalizacji, które można wykonać na poziomie pośrednim, dzięki czemu ogólna implementacja algorytmu będzie wydajniejsza. Badanie tej optymalizacji kodu wejściowego może pomóc lepiej zrozumieć, gdzie algorytmy są wydajniejsze i jak ulepszyć języki programowania kwantowego.

Inną aplikacją jest użycie standardowej infrastruktury "pass" LLVM w celu utworzenia optymalizatorów kodu kwantowego działających na QIR. Niezależne od języka i sprzętu podejście QIR umożliwia ponowne używanie tych optymalizatorów dla różnych języków obliczeniowych i platform obliczeniowych bez wysiłku.