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 frontonu, podczas gdy składnik zaplecza 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. Po zdaniu ostatecznej target platformy wykonywania można skompilować reprezentację pośrednią do rzeczywistego 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 umożliwia wiele ponownego użycia w maszynach kompilatora.

Co to jest usługa 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 Q# kompilowania do QIR funkcja QIR nie jest specyficzna dla Q#: każda struktura programowania kwantowego może wykorzystać QIR do reprezentowania programu kwantowego. Jest on niezależny 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. 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ę kwantową w celu umożliwienia pełnej współdziałania w ekosystemie kwantowym, zmniejszenia nakładu pracy deweloperskich ze wszystkich stron 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.
  • Korzystaj z najnowocześniejszej technologii kompilatora i korzystaj z istniejących narzędzi, bibliotek i uczenia się 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ą Wspólnego Rozwoju Foundation Linux Foundation pracy nad otwartymi standardami. Członkowie założycieli to Microsoft, a także Quantinuum (dawniej Honeywell), 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 funkcji QIR staje się to:

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ż funkcja QIR dla CreateBellPair operacji jest bardzo prosta, funkcja QIR dziedziczy wszystkie możliwości maszyny wirtualnej LLVM do wyrażania pętli, warunkowych i innego złożonego przepływu sterowania. Funkcja QIR dziedziczy również zdolność maszyny wirtualnej 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 porównać różne języki lub symulatory przy użyciu wspólnej platformy.

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" maszyny wirtualnej LLVM w celu utworzenia optymalizatorów kodu kwantowego działających na platformie 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.