Representação intermediária quântica

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

O que é uma representação intermediária?

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 nome indica, uma etapa intermediária na conversão de instruções do código-fonte para a linguagem do computador.

Uma representação intermediária funciona como uma representação abstrata de um programa. Todos os programas, independentemente da linguagem em que são escritos, são convertidos para essa representação intermediária por um chamado compilador front-end, enquanto um componente de back-end é responsável por converter essa representação intermediária em uma representação de computador. A representação intermediária permite, portanto, separar as linguagens de origem das plataformas de hardware e possibilita a criação de um compilador de maneira modular, em que cada nova linguagem só exige o suporte de um novo front-end em todas as plataformas nas quais um back-end esteja disponível.

Normalmente, a representação intermediária é projetada para permitir que muitas diferentes linguagens de origem sejam representadas. Além disso, nesse nível intermediário, também é possível executar alguma otimização e a reorganização de circuito que torna a implementação final mais eficiente. Depois que a plataforma de execução final target for conhecida, a representação intermediária poderá ser compilada para o código executável real.

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

O que é o Quantum Intermediate Representation?

A QIR é uma representação intermediária para programas quânticos desenvolvidos pela QIR Alliance, à qual a Microsoft pertence. Ele fornece uma interface comum que dá suporte a muitas linguagens e target plataformas para computação quântica. Você pode considerar a QIR como uma linguagem universal de camada média que permite a comunicação entre linguagens de alto nível e computadores. Embora o Q# seja compilado para a QIR, a QIR não é específica do Q#: qualquer estrutura de programação quântica pode aproveitar a QIR para representar um programa quântico. Ele é independente de hardware, o que significa que ele não especifica uma instrução quântica ou um conjunto de portões, deixando isso para o target ambiente de computação.

A QIR é baseada no popular compilador clássico LLVM de software livre. O LLVM é uma coleção de tecnologias modulares e reutilizáveis de compilador e cadeia de ferramentas que foi adaptado por um amplo conjunto de linguagens. A QIR especifica um conjunto de regras para representar constructos quânticos no LLVM, mas não exige extensões nem modificações no LLVM.

O fato de o LLVM ser a cadeia de ferramentas subjacente significa que a QIR é naturalmente capaz de processar a lógica clássica e quântica. Esse recurso é essencial para algoritmos quânticos-clássicos híbridos, que se tornaram cada vez mais importantes para os aplicativos de computação quântica. Além disso, ele permite que você aproveite as ferramentas de compilação e otimização do setor de computação clássica e, portanto, reduza o custo de gravação de conversões.

Muitos dos principais setores de computação quântica já adotaram a QIR. Por exemplo, a NVIDIA, a Oak Ridge National Laboratory, a Quantinuum, a Quantum Circuits Inc. e a Rigetti Computing estão criando cadeias de ferramentas que aproveitam a QIR.

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

O que é a Aliança QIR?

A QIR Alliance é um esforço conjunto para desenvolver uma representação intermediária quântica prospectiva com o objetivo de habilitar 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.

Os SDKs e as linguagens quânticas aparecem e evoluem em um ritmo rápido, com novos processadores quânticos e funcionalidades exclusivas e distintas umas das outras. Para fornecer interoperabilidade entre novas linguagens e novas funcionalidades de hardware, é imperativo que o ecossistema desenvolva e compartilhe uma representação intermediária que funcione com hardware quântico presente e futuro.

Com seu trabalho coletivo e parceria, a Aliança QIR pretende:

  • 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 para o desenvolvimento de aplicativos e compiladores quânticos.
  • Criar uma tecnologia de compilador de última geração e aproveitar as ferramentas, as bibliotecas e os aprendizados existentes com a computação de alto desempenho.
  • Permitir a evolução incremental e progressiva na forma como os cálculos clássicos e quânticos podem interagir no nível do hardware.
  • Fornecer a flexibilidade para conectar com facilidade tecnologias emergentes de uma forma que permita a experimentação com funcionalidades de hardware distintas e diferenciadas.

A QIR Alliance faz parte do trabalho da Joint Development Foundation da Linux Foundation com padrões abertos. Os membros fundadores incluem a Microsoft, bem como Quantinuum (antigo Honeywell), Oak Ridge National Laboratory, Quantum Circuits Inc. e Rigetti Computing.

Qual é a Quantum Intermediate Representation aparência?

Como a QIR é baseada no LLVM, ela se parece com o LLVM.

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

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

Quando compilado para a QIR, isso passa a ser:

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 snippet, você poderá ver alguns recursos da QIR:

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

Embora a QIR para a operação CreateBellPair seja muito simples, a QIR herda todas as funcionalidades do LLVM para expressar loops, condicionais e outro fluxos de controle complexos. A QIR também herda a capacidade do LLVM de expressar a computação clássica arbitrária.

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

Por que é Quantum Intermediate Representation importante?

A QIR é uma ferramenta essencial na execução de algoritmos quânticos em hardware real. Porém, as representações intermediárias podem ter um papel importante, mesmo que você queira apenas desenvolver algoritmos em um nível mais teórico.

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

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

Em termos de otimização de código, há 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 código de entrada pode ajudar você a entender melhor os aspectos em que os algoritmos podem ficar mais eficientes e como aprimorar as linguagens de programação quântica.

Outro aplicativo é usar a infraestrutura padrão de "passagem" da LLVM para criar otimizadores de código quântico que operam no QIR. A abordagem independente de linguagem e de hardware da QIR permite reutilizar esses otimizadores para diferentes linguagens e plataformas de computação quase sem nenhum esforço.

Próximas etapas