Partilhar via


Representação intermediária quântica

Quantum Intermediate Representation (QIR) é uma representação intermediária que serve como uma interface comum entre linguagens/frameworks de programação quântica e targetplataformas de computação quântica. QIR especifica um conjunto de regras para representar programas quânticos usando um formato agnóstico de linguagem e hardware dentro do LLVM IR. O QIR é um projeto desenvolvido pela QIR Alliance da qual a Microsoft é um dos seus membros.

O que é uma representação intermédia?

Um padrão comum em compiladores clássicos é começar compilando a linguagem de origem em uma representação intermediária. Uma representação intermediária é – como o próprio nome indica – uma etapa intermediária na conversão de instruções de código-fonte para linguagem de máquina.

Uma representação intermediária atua como uma representação abstrata de um programa. Todos os programas, independentemente da linguagem em que estão escritos, são traduzidos para essa representação intermediária por um compilador de front-end, enquanto um componente de back-end é responsável por traduzir essa representação intermediária em uma representação de máquina. A representação intermediária permite, assim, dissociar as linguagens de origem das plataformas de hardware e torna possível construir um compilador de forma modular, onde cada nova linguagem requer apenas um novo front-end para ser suportado em todas as plataformas para as quais um back-end está disponível.

A representação intermédia é normalmente concebida para permitir a representação de muitas línguas de partida diferentes. Além disso, neste nível intermediário também é possível realizar algumas otimizações e rearranjos de circuitos que tornam a implementação final mais eficiente. Uma vez que a plataforma de execução final target é conhecida, a representação intermediária pode ser compilada para o código executável real.

Essa abordagem permite que muitas linguagens de origem compartilhem um conjunto comum de otimizadores e geradores executáveis. Também facilita a compilação de uma única linguagem de origem para muitos targets. A representação intermediária fornece uma plataforma comum que pode ser compartilhada entre muitas fontes e targets permite uma grande reutilização em máquinas compiladoras.

O que é o Quantum Intermediate Representation?

QIR é uma representação intermediária para programas quânticos desenvolvidos pela QIR Alliance, à qual a Microsoft pertence. Ele fornece uma interface comum que suporta muitas linguagens e target plataformas para computação quântica. Você pode pensar no QIR como uma linguagem de camada intermediária universal que permite a comunicação entre linguagens e máquinas de alto nível. Embora Q# compile para QIR, QIR não é específico para Q#: qualquer estrutura de programação quântica pode alavancar QIR para representar um programa quântico. É agnóstico em relação ao hardware, o que significa que não especifica uma instrução quântica ou um conjunto de portas, deixando isso para o ambiente de target computação.

QIR é baseado no popular compilador clássico LLVM de código aberto. LLVM é uma coleção de compiladores modulares e reutilizáveis e tecnologias de cadeia de ferramentas que foi adaptada por um amplo conjunto de linguagens. QIR especifica um conjunto de regras para representar construções quânticas em LLVM, no entanto, não requer quaisquer extensões ou modificações para LLVM.

O fato de que LLVM é a cadeia de ferramentas subjacente significa que QIR é naturalmente capaz de processar tanto a lógica clássica quanto a quântica. Esta característica é essencial para algoritmos híbridos quântico-clássicos, que se tornaram cada vez mais importantes para aplicações de computação quântica. Além disso, permite que você aproveite as ferramentas de compilação e otimização da indústria de computação clássica e, portanto, reduza o custo de escrever traduções.

Muitas indústrias líderes de computação quântica já adotaram o QIR. Por exemplo, NVIDIA, Oak Ridge National Laboratory, Quantinuum, Quantum Circuits Inc., e Rigetti Computing estão construindo cadeias de ferramentas que aproveitam o QIR.

Para obter mais informações, consulte a Especificação QIR. Se você está interessado em ferramentas de compilador e projetos que usam QIR, por favor, dê uma olhada nestes repositórios QIR.

O que é a QIR Alliance?

A QIR Alliance é um esforço conjunto para desenvolver uma representação intermediária quântica voltada para o futuro com o objetivo de permitir a interoperabilidade total dentro do ecossistema quântico, reduzir o esforço de desenvolvimento de todas as partes e fornecer uma representação adequada para processadores quânticos heterogêneos atuais e futuros.

SDKs e linguagens quânticas aparecem e evoluem em um ritmo rápido, juntamente com novos processadores quânticos com recursos únicos e distintos uns dos outros. Para fornecer interoperabilidade entre novas linguagens e novos recursos de hardware, é imperativo que o ecossistema desenvolva e compartilhe uma representação intermediária que funcione com hardware quântico presente e futuro.

Com o seu trabalho coletivo e parceria, a QIR Alliance visa:

  • Reduzir o esforço de desenvolvimento necessário para todas as partes, promovendo a interoperabilidade entre diferentes estruturas e linguagens.
  • Permitir o desenvolvimento de bibliotecas compartilhadas tanto para o desenvolvimento de aplicativos quânticos quanto para o desenvolvimento de compiladores quânticos.
  • Desenvolva a tecnologia de compilador de última geração e aproveite as ferramentas, bibliotecas e aprendizados existentes da computação de alto desempenho.
  • Permita uma evolução incremental e progressiva na forma como os cálculos clássicos e quânticos podem interagir ao nível do hardware.
  • Forneça a flexibilidade para conectar facilmente tecnologias emergentes de uma forma que permita a experimentação com recursos de hardware distintos e diferenciados.

A QIR Alliance faz parte do trabalho da Fundação Linux para o Desenvolvimento Conjunto em padrões abertos. Os membros fundadores incluem a Microsoft, bem como a Quantinuum (anteriormente Honeywell), Oak Ridge National Laboratory, Quantum Circuits Inc.

Qual é a Quantum Intermediate Representation aparência?

Como o QIR é baseado em LLVM, o QIR se parece com LLVM.

Por exemplo, considere o seguinte Q# código para gerar um par Bell:

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

Quando compilado para QIR, isso se torna:

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
}

Neste trecho, você pode ver alguns recursos do QIR:

  • As operações em Q# (ou qualquer outra linguagem de programação quântica) são representadas por funções LLVM.
  • Qubits são representados como ponteiros para um tipo de estrutura opaca nomeado chamado %Qubit.

Enquanto o QIR para a CreateBellPair operação é muito simples, o QIR herda todos os recursos do LLVM para expressar loops, condicionais e outros fluxos de controle complexos. QIR também herda a capacidade do LLVM de expressar computação clássica arbitrária.

Para obter mais informações, assista à sessão de desenvolvedores da Microsoft do evento Q2B 2021.

Por que é Quantum Intermediate Representation importante?

QIR é uma ferramenta essencial ao executar algoritmos quânticos em hardware real. Mas as representações intermediárias podem desempenhar um papel importante, mesmo que você queira apenas desenvolver algoritmos em um nível mais teórico.

Por exemplo, uma aplicação habilitada pelo QIR é usar o compilador Clang, um front-end de linguagem C para LLVM, para compilar QIR em código de máquina executável para um clássico target. Isso fornece um caminho fácil para construir um simulador em C ou C++ implementando as instruções quânticas, o que poderia simplificar a criação de simuladores quânticos.

Além disso, você pode usar a representação intermediária para gerar código que é posteriormente fornecido como entrada em um simulador quântico – em vez de um dispositivo real – que poderia potencialmente usar uma linguagem diferente do código-fonte. Desta forma, você pode facilmente comparar e comparar diferentes linguagens ou simuladores usando uma estrutura comum.

Em termos de otimização de código, existem etapas de otimização que podem ser executadas no nível intermediário que podem tornar a implementação geral do algoritmo mais eficiente. Investigar essa otimização do seu código de entrada pode ajudá-lo a entender melhor onde tornar os algoritmos mais eficientes e como melhorar as linguagens de programação quânticas.

Outra aplicação é usar a infraestrutura padrão LLVM "pass" para criar otimizadores de código quântico que operam em QIR. A abordagem independente de linguagem e hardware do QIR permite reutilizar esses otimizadores para diferentes linguagens de computação e plataformas de computação com quase nenhum esforço.