LookaheadSwap
class qiskit.transpiler.passes.LookaheadSwap(*args, **kwargs)
Bases: TransformationPass
Mapear o circuito de entrada em uma topologia de backend por meio da inserção de SWAPs.
Implementação do envio do swap mapper de Sven Jandura para o Qiskit Developer Challenge de 2018, adaptado para integração à arquitetura do transpilador.
A função da passagem do swapper é modificar o circuito inicial para que seja compatível com a topologia do dispositivo de destino (o conjunto de portas de dois qubits disponíveis no hardware) Para isso, a passagem inserirá portas SWAP para realocar os qubits virtuais para cada porta seguinte em um conjunto de qubits físicos acoplados. No entanto, como as portas SWAP são particularmente deficitárias, o objetivo é realizar esse remapeamento e, ao mesmo tempo, introduzir o menor número possível de SWAPs adicionais.
Esse algoritmo pesquisa as combinações disponíveis de portas SWAP por meio de uma pesquisa de melhor primeiro/feixe, descrita a seguir:
- Comece com um layout de qubits virtuais em qubits físicos.
- Encontre quaisquer portas no circuito de entrada que possam ser executadas com o layout atual e marque-as como mapeadas.
- Para todos os possíveis portões SWAP, calcule o layout que resultaria de sua aplicação e classifique-os de acordo com a distância do layout resultante em relação aos portões futuros (consulte _calc_layout_distance)
- Para os quatro SWAPs de classificação mais alta (search_width), repita o processo acima no layout que seria gerado se eles fossem aplicados.
- Repita esse processo até uma profundidade de quatro (search_depth) SWAPs de distância do layout inicial, para um total de 256 (search_width^search_depth) layouts em potencial.
- Escolha o layout que maximiza o número de dois qubits que podem ser executados. Adicione suas portas mapeadas, incluindo os SWAPs gerados, ao circuito de saída.
- Repita o procedimento acima até que todas as portas do circuito inicial sejam mapeadas.
Para obter mais detalhes sobre o algoritmo, consulte a publicação do blog de Sven: https://medium.com/qiskit/improving-a-quantum-compiler-48410d7a7084
LookaheadSwap inicializador.
Parâmetros
- coupling_map (Union[CouplingMap, Target]) – CouplingMap do backend de destino.
- search_depth (int) – profundidade da árvore de lookahead ao classificar as melhores opções de SWAP.
- search_width (int) – largura da árvore de lookahead ao classificar as melhores opções de SWAP.
- fake_run (bool) – se for verdadeiro, ele apenas fingirá fazer o roteamento, ou seja, nenhuma troca será efetivamente adicionada.
Atributos
is_analysis_pass
Verificar se o passe é um passe de análise.
Se a passagem for um AnalysisPass,, isso significa que a passagem pode analisar o DAG e escrever os resultados dessa análise no conjunto de propriedades. As modificações no DAG não são permitidas por esse tipo de passe.
is_transformation_pass
Verificar se o passe é um passe de transformação.
Se a passagem for um TransformationPass,, isso significa que a passagem pode manipular o DAG, mas não pode modificar o conjunto de propriedades (mas pode ser lido).
Métodos
execute
execute(passmanager_ir, state, callback=None)
Executar a tarefa de otimização para a entrada Qiskit IR.
Parâmetros
- passmanager_ir (Any) – Qiskit IR para otimizar.
- state (PassManagerState) – Estado associado à execução do fluxo de trabalho pelo próprio gerenciador de passes.
- callback (Callable | None) – Uma função de retorno de chamada que é chamada a cada execução da tarefa de otimização.
Retorna
Qiskit IR otimizado e estado do fluxo de trabalho.
Tipo de retorno
tupla [ Any, PassManagerState ]
name
run
run(dag)
Execute o passe LookaheadSwap no dag.
Parâmetros
dag (DAGCircuit) – o gráfico acíclico direcionado a ser mapeado
Retorna
Um dag mapeado para ser compatível com o coupling_map em
a propriedade_set.
Tipo de retorno
Aumentos
- TranspilerError - Se o mapa de acoplamento ou o layout não forem
- compatível com o DAG**, ou ** se o coupling_map=None -
update_status
update_status(state, run_state)
Atualizar o status do fluxo de trabalho.
Parâmetros
- state (PassManagerState) – Passar o estado do gerenciador para atualizar.
- run_state (RunState) – Status de conclusão da tarefa atual.
Retorna
Estado do gerenciador de passes atualizado.
Tipo de retorno