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 programowania kwantowego/strukturami i targetplatformami obliczeń kwantowych. QIR określa zestaw reguł do reprezentowania programów kwantowych przy użyciu języka i formatu niezależnego od sprzętu w ramach środowiska IR LLVM. QIR to projekt opracowany przez QIR Alliance, którego firma Microsoft jest jednym z jej 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 reprezentacji pośredniej. Reprezentacja pośrednia to — jak wskazuje jej nazwa — krok pośredniczący w konwersji instrukcji z kodu źródłowego na język maszynowy.

Reprezentacja pośrednia pełni rolę abstrakcyjnej reprezentacji 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 tworzenie 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 zaprojektowana w celu umożliwienia reprezentowania wielu różnych języków źródłowych. Ponadto na tym poziomie pośrednim istnieje również możliwość przeprowadzenia optymalizacji i ponownego rozmieszczania obwodu, co sprawia, że ostateczna implementacja jest wydajniejsza. Po zdaniu ostatecznej target platformy wykonywania można skompilować pośrednią reprezentację do rzeczywistego kodu wykonywalnego.

Takie podejście umożliwia wielu językom źródłowym 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órą można udostępniać w wielu źródłach i targets umożliwia wiele ponownego użycia w maszynach kompilatora.

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 wspólny interfejs, który obsługuje wiele języków i target platform na potrzeby obliczeń kwantowych. Język QIR można traktować jako uniwersalny język warstwy środkowej, który umożliwia komunikację między językami wysokiego poziomu a maszynami. Chociaż Q# kompiluje się do QIR, technologia QIR nie jest specyficzna dla Q#elementu : 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 środowisku obliczeniowemu target .

Technologia 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ł do reprezentowania konstrukcji kwantowych w maszynie wirtualnej LLVM, jednak nie wymaga żadnych rozszerzeń ani modyfikacji maszyny wirtualnej LLVM.

Fakt, że maszyna wirtualna 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 kompilowania i optymalizacji z branży przetwarzania klasycznego, a zatem w celu obniżenia 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 QIR, zapoznaj się z tymi repozytoriami QIR.

Co to jest QIR Alliance?

QIR Alliance jest wspólnym wysiłkiem na rzecz opracowania przyszłościowej reprezentacji pośredniej w celu umożliwienia pełnej interoperacyjności w ekosystemie kwantowym, zmniejszenia wysiłków programistycznych 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 i udostępnienie pośredniej reprezentacji, która współpracuje z obecnym i przyszłym sprzętem kwantowym.

Ze względu na ich zbiorową pracę i partnerstwo, QIR Alliance ma na celu:

  • Zmniejszenie wymaganych wysiłków programistycznych dla wszystkich stron poprzez promowanie współdziałania 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.
  • Zapewniają elastyczność ł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ólnej pracy Fundacji Rozwoju Linux 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ż usługa 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 stanie 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 innych złożonych przepływów sterowania. QIR dziedziczy również zdolność maszyny wirtualnej LLVM do wyrażania dowolnych obliczeń klasycznych.

Aby uzyskać więcej informacji, watch sesji 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 pośrednie reprezentacje mogą odgrywać ważną rolę, nawet jeśli chcesz tylko opracowywać algorytmy na bardziej teoretycznym poziomie.

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

Ponadto można użyć reprezentacji pośredniej do wygenerowania kodu, który później jest 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 struktury.

Jeśli chodzi o optymalizację kodu, istnieją kroki optymalizacji, które można wykonać na poziomie średniozaawansowanym, co może sprawić, że ogólna implementacja algorytmu będzie wydajniejsza. Badanie tej optymalizacji kodu wejściowego może pomóc w lepszym zrozumieniu, gdzie algorytmy są wydajniejsze i jak ulepszać języki programowania kwantowego.

Inną aplikacją jest użycie standardowej infrastruktury "pass" maszyny wirtualnej LLVM w celu utworzenia kwantowych optymalizatorów kodu, które działają w usłudze QIR. Podejście QIR niezależne od języka i sprzętu umożliwia ponowne używanie tych optymalizatorów dla różnych języków obliczeniowych i platform obliczeniowych bez wysiłku.

Następne kroki