Skip to main content
IBM Quantum Platform

Qiskit SDK 2.5 notas de lançamento


2.5.2

Prelúdio

O Qiskit v2.5.2 é uma versão de correção que inclui correções de bugs para problemas identificados desde o lançamento da versão v2.5.1.

Correções de bugs

  • Corrigimos um pequeno vazamento de memória nos métodos de síntese de Suzuki-Trotter, que mantinha as alocações de todas as cadeias de Pauli esparsas durante todo o tempo de execução do programa. Corrige o problema #16677.

  • Corrigimos um bug no mecanismo simbólico em que a soma ou a subtração de duas expressões podia ser otimizada incorretamente para 0. Isso ocorreu quando o mesmo símbolo estava presente em ambas as expressões e as partes numéricas resultaram em 0, por exemplo, (1 + x) + (-1 + x).

  • Colisões de camadas fixas nas janelas de texto e de circuitos “ Matplotlib ” quando um corpo de fluxo de controle atua sobre qubits que estão permutados em relação ao circuito externo, por exemplo circuit.append(BoxOp(body), [0, 2, 1]). As instruções dentro do corpo agora são organizadas de acordo com a ordem de desenho externa; assim, os portões que se sobrepõem no layout desenhado são colocados em camadas separadas, em vez de serem desenhados uns sobre os outros. Corrigido o #16510.

  • Corrigimos um problema com o método DAGCircuit.depth() que poderia causar um erro grave ao ser chamado após a exclusão do primeiro Qubit (ou Clbit se não houver objetos Qubit no DAG) no DAGCircuit.

  • Corrigimos um bug no OptimizeCliffordT qual, para circuitos transpilados para uma base Clifford+T que excluem e SXGate SXdgGate, a etapa poderia retornar um circuito que não fosse unitariamente equivalente à sua entrada.

  • Corrigimos vários erros na simplificação de ParameterExpression que resultavam em expressões incorretas.

    Correção do #16259. Corrige o problema #16260. Corrige o problema #16262. Correção do #16263.

  • Corrigimos uma falta de determinismo na ordem de remoção das arestas em e DAGCircuit.remove_qubits() remove_clbits(). Isso fez com que as arestas adicionadas posteriormente tivessem identificadores não determinísticos, afetando alguns algoritmos de percurso. Corrigido o #16655.

  • Corrigimos um problema em que a etapa do transpiler SynthesizeRZRotations poderia entrar em pânico caso o argumento synthesis_error fosse definido com valores específicos. Corrigido o #16540.

  • Corrigimos uma possível falha de segmentação durante a avaliação de ParameterExpression objetos grandes. Corrigido o #16676.

  • O método DAGCircuit.substitute_node_with_dag() agora transfere corretamente as declarações de variáveis no nível do DAG (variáveis de entrada, capturadas e declaradas, além de trechos) do DAG de substituição para o DAG de destino. Anteriormente, esses elementos eram omitidos durante a substituição. Corrigido o #15509.

  • VF2Layout Saída fixa não determinística optimization_level=2 em um Target mapa de acoplamento simétrico. Anteriormente, essa etapa poderia aplicar critérios de desempate diferentes entre as execuções devido à soma não determinística de números de ponto flutuante. Corrigido o #16490.

  • Corrigimos um bug no StatePreparation.inverse() qual StatePreparation objetos especificados por um número inteiro e um argumento num_qubits explícito não preservavam o número de qubits. Corrigido o #16430.


2.5.1

Prelúdio

O Qiskit v2.5.1 é uma nova versão de correção de bugs do Qiskit SDK.

Correções de bugs


2.5.0

Prelúdio

O Qiskit v2.5.0 é uma nova versão com novos recursos do Qiskit SDK. Os destaques desta versão são:

  • API C ampliada e maior acesso. A API C contém muitas novas funções e tipos (consulte a seção “Recursos da API C” abaixo), principalmente aqueles destinados a inspecionar o fluxo de controle e expressões clássicas. qiskit.capi também ganhou ctypes ligações à API C, para facilitar o acesso à depuração.
  • Suporte inicial ao gerenciador de passagens em etapas para múltiplos IRs. Uma nova MultiStagePassManager funcionalidade permite compilações que reduzem progressivamente o código por meio de múltiplos IRs. As futuras versões ampliarão os recursos de múltiplos IRs do Qiskit.
  • Gerenciadores de passagem predefinidos para Clifford+T e PBC. Duas novas funções, generate_preset_clifford_t_pass_manager() e generate_preset_pbc_pass_manager(), oferecem pipelines pré-configurados para o cálculo baseado em Clifford+T e no método de Pauli (PBC), respectivamente. Este é um primeiro passo rumo a uma compilação mais robusta e tolerante a falhas no Qiskit.
  • Novas otimizações padrão para o transpiler de dois qubits. A otimização padrão de ressíntese de dois qubits do Qiskit (ativada nos níveis 2 e 3 nos pipelines predefinidos) agora utiliza uma nova TwoQubitPeepholeOptimization etapa. Em comparação com a combinação anterior de ConsolidateBlocks e UnitarySynthesis, essa opção apresenta melhor desempenho e é mais eficaz na seleção da decomposição de maior fidelidade.
  • Melhorias no desempenho do transpiler. É comum observar aumentos na velocidade de 2-3x em benchpress diversos circuitos. Isso se deve ao fato de várias passagens do transpiler terem ganhado suporte a multithreading, além de muitas outras melhorias, como a nova síntese de dois qubits mencionada acima, aprimoramentos algorítmicos em SabreLayout, otimizações em rustworkx, e rotinas mais eficientes de hash, alocação e álgebra linear.

Recursos da API C

Recursos do Circuits

  • InstructionEspecializada LinearFunction.inverse() de modo a retornar um LinearFunction que represente a transformação inversa, em vez de não conseguir construir um opaco.

  • loop_parameterQuantumCircuit.for_loop() agora aceita um expr.Var do types.Uint tipo como argumento. Quando usada na forma de gerenciador de contexto, a variável do loop é automaticamente declarada como uma input variável do corpo do loop e fica disponível para uso dentro do escopo do loop. Por exemplo:

    from qiskit.circuit import QuantumCircuit, ClassicalRegister
    from qiskit.circuit.classical import expr, types
    
    qc = QuantumCircuit(1, 1)
    cr = ClassicalRegister(5, "reps")
    qc.add_register(cr)
    
    with qc.for_loop(range(5), expr.Var.new("a", types.Uint(32))) as v:
        qc.measure(0, 0)
        qc.store(expr.index(cr, v), qc.clbits[0])
  • Adicionado QuantumCircuit.estimate_fidelity(), que é usado para estimar a fidelidade da simulação de um circuito em um determinado Target.

  • ClassicalRegister Objetos com mais de 65.535 bits agora podem ser usados com o qiskit.circuit.classical sistema de expressões.

  • ParameterVector agora aceita um argumento opcional uuid no construtor e expõe sua classe base UUID por meio de seu uuid atributo. Isso pode ser usado para reconstruir vetores cujos elementos sejam iguais entre si.

Artigos sobre Informação Quântica

Recursos do transpiler

Recursos de visualização

Notas sobre a atualização do transpiler

  • A transpile() função agora utiliza um fluxo de trabalho de compilação diferente e mais eficiente ao compilar para uma base Clifford+T. Neste fluxo de trabalho, não são mais utilizados os plug-ins genéricos de síntese unitária para sintetizar operadores unitários de um único qubit em sequências Clifford+T. Atualmente, o sistema se baseia na compilação em portas de RZR_Z e e na síntese direta dessas portas, o que proporciona melhor qualidade e desempenho em tempo de execução. Como resultado, os "unitary_synthesis_method" argumentos e "unitary_synthesis_plugin_config" não afetam mais a síntese Clifford+T em transpile(). Em vez disso, a precisão pode ser definida globalmente ao configurar o approximation_degree, ou usando generate_preset_clifford_t_pass_manager() que disponibiliza rz_synthesis_config o argumento para passar uma configuração para a síntese do RZR_Z.

Notas diversas sobre a atualização

  • A versão mínima exigida do NumPy é agora a 2.0, em conformidade com as recomendações do SPEC 0.

  • O Qiskit agora conta com uma política formal de versões de dependências, descrita na documentação sobre contribuições do repositório. Isso é:

    • NumPy e SciPy seguem o padrão SPEC 0 da comunidade científica Python (dois anos de suporte);
    • Todas as demais dependências do Python e do Rust não têm restrições além da compatibilidade com a plataforma;
    • As dependências opcionais, exclusivas para compilação e exclusivas para desenvolvedores do Python não têm restrições e não precisam ser compatíveis com todas as versões de tempo de execução do Python nem com todas as plataformas de hospedagem.

Circuitos: Funcionalidades obsoletas

  • O CommutationChecker não mantém mais um cache interno de relações de comutação. Os itens a seguir estão, portanto, obsoletos e serão removidos do Qiskit v3.0:

Obras obsoletas da Síntese

  • Vários comportamentos dos argumentos de qs_decomposition() estão agora obsoletos e serão removidos no Qiskit v3.0.

    • Não é mais necessário definir opt_a1 e opt_a2 ; a função determina automaticamente se as otimizações podem ser aplicadas.
    • decomposer_1q e decomposer_2q devem ser instâncias de OneQubitEulerDecomposer ou TwoQubitBasisDecomposer, respectivamente; o uso de funções chamáveis arbitrárias do tipo Python apresenta baixo desempenho em comparação com o núcleo do Rust.

Alterações no sistema de compilação

  • A ferramenta de geração de ligações integrada ao repositório foi renomeada de qiskit-bindgen-c para qiskit-bindgen-cli. A receita make c preferida Makefile não é afetada.

  • qiskit-bindgen-cli adquiriu um check-abi comando capaz de verificar se duas listas de slots (seja provenientes de qiskit-bindgen-cli show-slots ou compiladas em qiskit-cext-vtable) são compatíveis com o semver para os números de versão relevantes.

  • qiskit-bindgen-cli adquiriu o show-slots comando, que exibe uma lista das atribuições de slots para a ligação em tempo de execução à API C (por exemplo, por meio do pacote Qiskit com o espaço “ Python ”).

  • A versão mínima da dependência setuptools-rust de compilação foi atualizada para 1.13 para permitir o uso do novo Extension(generated_files=...) argumento.

  • Agora, o Qiskit pode ser compilado, opcionalmente, usando o mimalloc como alocador global. QISKIT_BUILD_WITH_MIMALLOC=1Para ativar o uso do mimalloc, defina a variável de ambiente. Essa opção pode ser usada tanto na compilação do pacote Python quanto ao utilizar o Makefile (make c) para compilar uma biblioteca compartilhada independente.

  • A versão mínima compatível do Rust (MSRV) para compilar o Qiskit a partir do código-fonte foi aumentada de 1.85 para 1.87. O Rust 1.87 precisou ser atualizado para as versões mais recentes de nossas dependências de código-fonte. Mais especificamente, o nalgebra 0.34 requer o Rust 1.87.

  • A versão mínima exigida do stestr nos requisitos de teste foi alterada de 2.0 para 3.2.0. Isso foi feito para aproveitar os novos recursos do stestr, principalmente o stestr history comando, em tarefas de teste de integração contínua Python.

Problemas Conhecidos

  • O Qiskit v2.2 e v2.3 podem gerar arquivos QPY ilegíveis para circuitos que contenham um ParameterExpression , nos quais todas as instâncias contidas Parameter foram anuladas na expressão final. Por exemplo, se a expressão 0*x + 1.5 aparecer em um circuito, tanto o Qiskit v2.2 quanto o v2.3 produzirão um arquivo QPY que não poderá ser lido por nenhuma versão do Qiskit, incluindo os próprios e o v2.4, devido a erros na geração do arquivo QPY.

    Esse erro geralmente aparece (pelo menos no v2.4 do Qiskit) como um QpyError acompanhado de uma mensagem do tipo “expressão inválida: a pilha estava vazia antes que a expressão fosse concluída”.

  • Os arquivos QPY gerados pelo qiskit-terrav0.24 e versões anteriores podem definir ParameterVector instâncias cujos elementos possuam atributos desconectados Parameter.uuid , o que não permite uma conversão completa de ida e volta. Antes desta versão do Qiskit, o QPY emitia um aviso caso detectasse um implícito ParameterVector que não tivesse sido completamente reconstruído. O QPY não exibirá mais avisos nessa situação.

    Para observar o comportamento perigoso, é necessário que todos os seguintes requisitos sejam atendidos:

    • você carrega duas cargas úteis de circuito QPY distintas (no mesmo arquivo ou em arquivos separados) geradas pelo qiskit-terrav0.24 ou versões anteriores.
    • ParameterVectorOs dois circuitos utilizam ParameterVectorElement instâncias derivadas do mesmo.
    • Um circuito utiliza um determinado elemento do vetor, enquanto o outro não o utiliza.
    • você tenta comparar o elemento deserializado ParameterVectorElement diretamente do circuito que o utilizou com o mesmo índice de elemento, mas recuperado por meio da ParameterVectorElement.vector referência reversa de um elemento diferente do circuito que não utiliza o elemento comparado.

    O aviso foi removido porque, na versão atual do Qiskit, trata-se de um falso positivo com muito mais frequência do que de um problema efetivamente observado. O Qiskit, a partir da versão v2.5, criará, de fato, um conjunto implícito ParameterVector cujos elementos são considerados iguais entre os circuitos.

Problemas de segurança

  • Os analisadores do OpenQASM 2 (qasm2.load() e qasm2.loads()) agora encerrarão a execução com um RecursionError ao tentar avaliar uma expressão excessivamente profunda. A profundidade máxima permitida é obtida a partir de sys.getrecursionlimit() Python no ponto de entrada nos analisadores.

    Anteriormente, os analisadores podiam realizar recursões arbitrárias no espaço de Rust, acabando por exceder o espaço máximo da pilha e causando uma falha de segmentação no processo.

Correções de bugs

  • Corrigida ConstrainedReschedule a geração de um TranspilerError ao reprogramar um circuito que contém um Barrier. Corrigido o #16135.

  • synth_cz_depth_line_mr() agora gerará um erro de espaço ValueError “ Python ” em caso de entradas malformadas, em vez de um panic de espaço “Rust”. Corrigido o #16152.

  • Corrigiu um bug em ElidePermutations e StarPreRouting ao compor layouts de permutação virtual (permutações implícitas aplicadas no final do circuito).

  • ConstrainedReschedule não gerará AttributeError mais se o argumento opcional target não for fornecido. Veja o nº 16245.

  • CRXGateCorrigiu-se um erro na CommutationChecker avaliação das relações de comutatividade entre as portas de rotação controlada, CRYGate e CRZGate e outras portas padrão. CommutationAnalysisEm particular, corrigiu-se o comportamento das passagens, CommutativeCancellation, CommutativeOptimization e qk_transpiler_pass_standalone_commutative_cancellation() na presença dessas portas.

    Corrigido o #16164.

  • Corrigimos um bug no InverseCancellation qual CSGate os pares de e CSdgGate com argumentos de qubit invertidos eram cancelados de forma inconsistente. Anteriormente, uma sequência de CS−CS†CS-CS^\dagger (com argumentos de qubit invertidos) foi cancelada, mas CS†−CSCS^\dagger-CS não foi. Agora, ambos são cancelados constantemente.

    Corrigido o #15855.

  • Corrigido MultiplierGate de forma que sua decomposição padrão preserve o número solicitado de qubits de resultado. Anteriormente, ele ignorava esse argumento e sempre realizava a decomposição utilizando o dobro do número de qubits de estado para os qubits de resultado. Corrigido o #16168.

  • Corrigiu uma falha grave que ocorria RemoveIdentityEquivalent quando a fase global do circuito continha ParameterVectorElement objetos. The message was:

    Não é possível clonar um ponteiro na pilha de Python sem que a thread esteja vinculada.

    Veja o nº 16053.

  • latex``π/2A visualização do circuito não imprime mais um sinal de grau redundante à esquerda 1 para ângulos dentro da tolerância de π/k\pi/k para valores inteiros de kk (por exemplo 1π/2 , agora é ), incluindo os modos de saída, mpl, e qasm .

    Corrige o problema #16170.

  • Corrigido qpy.load() para versões do QPY >=13, nas quais Delay instruções com durações inteiras podiam ser deserializadas para tipos incorretos. Isso poderia fazer com que o código posterior gerasse erros, como, por exemplo, qasm3.dumps_experimental() retornar uma mensagem de erro informando “Falha ao analisar o valor do parâmetro”. Consulte o nº 16076 para obter mais detalhes.

  • Corrigida Statevector.evolve() a modificação do vetor de estado de entrada no próprio local quando a instrução possui uma fase global. Veja o nº 15750.

  • Certifique-se de que não ocorra nenhum “pânico de subtração” devido a subfluxo em ConstrainedReschedule. Corrigido o #16231.

  • Corrigiu-se um bug no UnrollForLoops qual, ao desdobrar uma função estática QuantumCircuit.for_loop() cujo corpo contivesse um valor diferente QuantumCircuit.global_phase de zero, era adicionada uma cópia extra da fase do corpo.

    Corrigido o #16185.

  • VF2Layout e VF2PostLayout não entrará mais em pânico dizendo “os valores de ponto flutuante não devem retornar nan” ao se deparar com instruções cujos erros são relatados como 1.0.

  • Corrigido LinearFunction.inverse() : sempre atendendo CircuitError chamadas de plantão. Veja o nº 16184.

  • Corrigimos um problema em que o transpile_optimization_level campo do arquivo de configuração do usuário não era respeitado ao chamar generate_preset_pass_manager(). transpile()Anteriormente, isso afetava apenas.

  • plot_bloch_vector() não altera list mais as entradas.

  • CouplingMap agora ignorará as arestas que conectam um qubit a si mesmo e exibirá um aviso a respeito. Anteriormente, esses erros eram aceitos silenciosamente de forma incorreta, o que poderia causar erros de longo prazo no código, dependendo do gráfico de acoplamento.

  • Corrigido dagdependency_to_circuit() para preservar corretamente a fase global do circuito durante a conversão. Corrigido o #16166.

  • Corrigido BitArray.bitcount() para que ignore os bits de preenchimento não utilizados no armazenamento de bytes compactados. Veja o nº 16173.

  • Corrigimos um bug no CommutationChecker qual certos portões baseados em Rust, como o UnitaryGate, podiam contornar a verificação do tamanho da matriz e levar ao cálculo de matrizes grandes.

  • Corrigido circuit_to_dagdependency() o erro que impedia a cópia do global_phase. Veja o nº 14537.

  • clifford_6_4()Corrigimos os modelos, rzx_xz(), rzx_zz1(), rzx_zz2(), e rzx_zz3() para que TemplateOptimization agora o os aceite e os aplique. Cada um desses modelos implementa a identidade apenas até uma fase global em seu conteúdo de porta, mas não incluía o campo de compensação global_phase , o que fazia TemplateOptimization com que fossem rejeitados silenciosamente a cada execução. Veja o nº 14538.

  • Corrigida CommutativeCancellation a alteração incorreta da fase global em −π-\pi ao acumular uma rotação de 2π2\pi usando a opção PhaseGate ou U1Gate. Corrigido o #16377.

  • Corrigido Commuting2qGateRouter para que preserve a fase global do circuito de entrada, em vez de adicioná-la novamente ao compor operações acumuladas não roteadas. Corrigido o #16205.

  • Corrigimos um problema em ConsolidateBlocks que a seleção do portão de base nem sempre era determinística no caso em que o conjunto de bases contivesse múltiplos portões paramétricos ou múltiplos portões não paramétricos de 2 qubits. Isso poderia resultar em circuitos transpilados diferentes entre as execuções.

  • Fixo ForLoopOp com números inteiros negativos em seu conjunto de índices. Anteriormente, foi levantada uma OverflowError questão. Veja o nº 16412.

  • Apenas no Qiskit v2.5.0rc1, o tipo QkLoopElements da API em C listava erroneamente seu elements membro como const size_t *. Isso agora const ptrdiff_t * serve para levar em conta valores negativos.

  • Corrigimos um bug em ConsolidateBlocks quando force_consolidate=True, no qual os blocos e as sequências não eram consolidados se os portões de base não permitissem a seleção de um decompositor.

  • Corrigido Initialize.gates_to_uncompute() para retornar um circuito com o número correto de qubits, quando a porta foi construída usando uma forma inteira (por exemplo, Initialize(1, num_qubits=2)). Corrigido o #16413.

  • Corrigimos uma mensagem de erro ambígua em Initialize.inverse(), que agora gera imediatamente um erro quando chamada, uma vez que a instrução não é invertível.

    Veja o nº 15595.

  • Corrigimos um problema com as qk_transpile() funções da API C e qk_transpile_stage_optimization() ao usar optimization_level 3 no QkTranspileOptions. Anteriormente, a lógica interna de rastreamento do ponto mínimo não atualizava o DAG mesmo após encontrar um circuito melhor. Isso resultou na geração de um circuito cuja profundidade e tamanho não haviam sido otimizados corretamente.

  • Corrigimos um bug na etapa do OptimizeAnnotated transpiler em que os modificadores de controle com controles abertos não eram combinados corretamente. Veja o nº 16410.

  • ParameterExpression instâncias com variáveis anuladas (como x - x) agora manterão a referência a x após uma passagem pelo QPY e pickle.

  • pickleParameterExpression instâncias cujo resultado seja um valor simples (como 0*x + 2) agora passarão com sucesso pelo QPY e pelo.

  • Corrigiram-se as verificações de comutatividade entre duas PauliProductMeasurement instruções que medem o mesmo bit clássico, as quais anteriormente não respeitavam a ordem de gravação observável.

  • Corrigimos um problema na serialização para o QPY de PauliProductMeasurement e PauliProductRotationGate , em que os operadores de Pauli eram tratados incorretamente, prejudicando a compatibilidade com versões anteriores do Qiskit. Veja o nº 16099.

  • Corrigida qasm3.dump_experimental() a dumps_experimental() exibição incorreta de um us sufixo para atrasos especificados em ms. Corrigido o #16097.

  • Corrigimos a conversão para ns em qasm3.dump_experimental() e dumps_experimental() ao gerar os atrasos especificados em ps. Corrigido o #16097.

  • Corrigido synth_qft_line() para sintetizar corretamente circuitos com 32 ou mais qubits.

  • Corrigimos um problema em que a execução da SynthesizeRZRotations etapa do transpiler várias vezes com diferentes limites de erros poderia gerar resultados incorretos ou provocar erros críticos internos.

    Veja o nº 16385.

  • Corrigimos o tratamento da fase global em TemplateOptimization, que anteriormente redefinia silenciosamente a fase global do circuito de entrada para zero e não corrigia as fases globais dos modelos.

    Corrige o problema #14537.

  • Corrigido QuantumCircuit.compose() o erro que ocorria ValueError quando front=True era usado com um mapeamento explícito qubits . Veja o nº 15834.

  • Corrigimos um bug na etapa CommutativeOptimization do transpiler em que pares de XXPlusYYGate portas que atuavam nos mesmos qubits, mas em ordem invertida, podiam ser simplificados incorretamente. Veja o nº 16161.

  • Corrigido um erro no BasisTranslator qual um circuito com operações de fluxo de controle aninhadas fazia com que seus blocos ignorassem as transformações calculadas.

    Veja os números #13162, #14025 e #15734.

  • A desserialização do QPY não emite mais um aviso ao carregar um circuito que utilize alguns, mas não todos, os elementos de um ParameterVector.

  • Corrige um problema em que o LightCone processamento falhava devido a erros de índice ou falhas por falta de memória ao encontrar operações grandes ou complexas. Corrigimos os problemas #15021 e #13828.

  • Corrigimos um problema na decomposição de Schur para determinadas matrizes, reimplementando-a usando faer em vez de nalgebra. O problema pode ocorrer ao executar a decomposição de Shannon quântica por meio de qs_decomposition(), bem como por meio da UnitarySynthesis etapa do transpiler ou por meio de transpile().

    Veja o nº 15870.

  • QuantumCircuit.remove_final_measurements() não exibirá mais um aviso indesejado sobre a tentativa de adicionar registros quando for chamado em um circuito com layout definido.

  • Os circuitos com Reset instruções agora podem ser agendados em relação a um GenericBackendV2.

  • Corrigimos um problema de não determinismo em random_clifford_circuit(), mesmo quando se define uma semente. Veja o nº 16138.

Aprimoramentos de desempenho

  • A biblioteca interna de álgebra linear utilizada por TwoQubitBasisDecomposer e TwoQubitWeylDecomposition é agora a nalgebra. Isso oferece alocações na pilha e operações otimizadas para matrizes pequenas. Ambas as passagens agora têm melhor desempenho e consomem menos memória. Consulte os números #15928 e #15960 para obter mais detalhes.

  • Melhorou-se o desempenho dos níveis de otimização 1, 2 e 3 na compilação para conjuntos de bases Clifford+T, especialmente para circuitos muito profundos. Anteriormente, a profundidade do circuito era usada como indicador para determinar se um ponto fixo nas etapas de otimização havia sido alcançado; esse indicador foi substituído pelas contagens de RZ e T (dependendo da etapa de otimização). Isso não só é significativamente mais rápido, como também reflete melhor a métrica alvo. Consulte o nº 16218 para obter mais detalhes.

  • A etapa do ConsolidateBlocks transpiler e sua função qk_transpiler_pass_standalone_consolidate_blocks() da API em C agora são multithread, o que resulta em melhor desempenho em tempo de execução. Consulte o nº 16230 para obter mais detalhes.

  • Corrigimos uma regressão de desempenho que ocorria apenas em v2.5.0rc1 ao executar VF2Layout e VF2PostLayout em mapas de acoplamento de grande porte com conectividade de grau muito elevado.

  • PauliProductRotationGate.to_matrix()Melhorou-se o tempo de execução do método. Para os operadores de Paul 10‑qubit, isso resulta em um aumento de velocidade de cerca de 500×.

  • As versões pré-compiladas disponíveis em PyPI agora são compiladas utilizando o mimalloc como alocador global. Isso melhora o desempenho em tempo de execução e o uso de memória do Qiskit. Para mais detalhes, consulte o #16024.

  • A etapa Optimize1qGatesDecomposition do transpiler e suas funções qk_transpiler_pass_optimize_1q_sequences() da API em C e qk_transpiler_pass_standalone_optimize_1q_sequences() agora são multithread, o que resulta em melhor desempenho em tempo de execução. Consulte o nº 15567 para obter mais detalhes.

  • A etapa do CommutationAnalysis transpiler agora é multithread, o que resulta em melhor desempenho em tempo de execução. Consulte o nº 16014 para obter mais detalhes.

  • A etapa do CommutativeCancellation transpiler agora é parcialmente multithread internamente (quando executa a análise de comutação). Isso resultou em uma melhoria no desempenho em tempo de execução. Consulte o nº 16014 para obter mais detalhes.

  • A função qk_transpiler_pass_standalone_commutative_cancellation() da API C agora é parcialmente multithread internamente (quando executa a análise de comutação). Isso resultou em uma melhoria no desempenho em tempo de execução. Consulte o nº 16014 para obter mais detalhes.

  • A etapa do UnitarySynthesis transpiler agora é multithread quando executada com o plug-in de síntese padrão, o que resulta em melhor desempenho em tempo de execução. Consulte o nº 16275 para obter mais detalhes.

  • A função qk_transpiler_pass_standalone_unitary_synthesis() da API C agora é multithread internamente. Isso resulta em um melhor desempenho em tempo de execução. Consulte o nº 16275 para obter mais detalhes.

  • BitArray.bitcount() agora utiliza internamente uma chamada mais eficiente do tipo “ NumPy ”, com um aumento de velocidade de aproximadamente 5x em 100 qubits. Consulte o nº 15836 para obter mais detalhes.

  • ParameterVector foi reimplementado em Rust. Agora, sua construção é aproximadamente cinco vezes mais rápida, e seus elementos vetoriais ocupam significativamente menos memória.

  • O roteamento Sabre (utilizado em SabreSwap e SabreLayout) agora atualiza sua estrutura de camadas de conjunto estendido no próprio local, em vez de reconstruí-la a cada porta roteada. Trata-se de uma melhoria significativa no desempenho para circuitos amplos com estruturas de camadas densas; um circuito de volume quântico de 115 qubits agora é roteado em aproximadamente 2/3 do tempo anterior. Consulte o nº 14912 para obter mais detalhes.

  • Melhorou o desempenho em SubstitutePi4Rotations cenários práticos. Normalmente, apenas uma fração muito pequena das portas de rotação é substituída por portas equivalentes fixas, e é significativamente mais rápido substituir as operações no próprio código do que reconstruir o DAG. Para circuitos com um grande número de portas, isso pode reduzir significativamente o tempo de execução; por exemplo, uma redução de mais de 10x para um circuito QSVT com 43 milhões de portas. Consulte o #16217 para obter mais detalhes e resultados de testes de desempenho.

  • qk_transpiler_pass_standalone_basis_translator()O transpiler passa BasisTranslator, UnitarySynthesis, e Split2QUnitaries, e suas funções correspondentes da API C, qk_transpiler_pass_standalone_unitary_synthesis(), qk_transpiler_pass_split_2q_unitaries() e qk_transpiler_pass_standalone_split_2q_unitaries(), alteraram internamente a ordenação topológica utilizada na geração de sua saída DAGCircuit , o que melhora o desempenho em tempo de execução dessas etapas, evitando a sobrecarga causada pela ordenação topológica lexicográfica utilizada anteriormente. Consulte o nº 15987 para obter mais detalhes.

  • A nova TwoQubitPeepholeOptimization etapa do transpiler agora é utilizada como parte dos gerenciadores de etapas predefinidas, conforme gerados por generate_preset_pass_manager() e utilizados internamente por transpile(), para a etapa de otimização nos níveis de otimização 2 e 3. Isso substitui o uso anterior das ConsolidateBlocks passagens de transpilação e UnitarySynthesis nesses níveis na etapa de otimização para realizar a otimização peephole. A nova passagem oferece melhor desempenho em tempo de execução e heurísticas mais precisas para a síntese.

  • O algoritmo de hash interno utilizado para os tipos indexmap do Rust foi alterado para usar o foldhash em vez da biblioteca ahash, utilizada anteriormente. Isso resultou em ganhos de velocidade para algumas das funcionalidades que utilizam intensamente o indexmap internamente. Consulte o nº 15920 para obter mais detalhes.

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.