Skip to main content
IBM Quantum Platform

VF2 objetos de paso del compilador


QkVF2LayoutConfiguration

typedef struct QkVF2LayoutConfiguration QkVF2LayoutConfiguration

La configuración para el diseño « VF2 » se aprueba. Esta es una configuración encapsulada que permite realizar cambios en la API con el tiempo; se crea y modifica utilizando el constructor y los setters que se indican a continuación.

qk_vf2_layout_configuration_new

QkVF2LayoutConfiguration *qk_vf2_layout_configuration_new(void)

Crea una nueva configuración para las pasadas « VF2 » que ejecute todo sin ningún tipo de restricción.

Llame qk_vf2_layout_configuration_free con el valor de retorno para liberar la memoria cuando haya terminado.

Devuelve

Un puntero a la configuración.

qk_vf2_layout_configuration_free

void qk_vf2_layout_configuration_free(QkVF2LayoutConfiguration *config)

Liberar un QkVf2LayoutConfiguration objeto.

Seguridad

El comportamiento es indefinido si config es un puntero distinto de nulo, pero no apunta a un objeto válido QkVF2LayoutConfiguration y alineado.

Parámetros

  • config : un puntero a la configuración.

qk_vf2_layout_configuration_set_call_limit

void qk_vf2_layout_configuration_set_call_limit(QkVF2LayoutConfiguration *config, int64_t before, int64_t after)

Limita el número de veces que el algoritmo VF2 intentará ampliar su mapeo antes y después de encontrar la primera coincidencia.

El algoritmo « VF2 » lleva la cuenta del número de pasos que ha dado y finaliza cuando alcanza el límite. Una vez encontrado el primer partido, el límite cambia del límite «antes» al límite «después» sin restablecer el número de pasos realizados.

Seguridad

El comportamiento es indefinido si no config es un puntero válido, alineado y distinto de nulo a un QkVF2LayoutConfiguration.

Parámetros

  • config : la configuración que se va a actualizar.
  • antes : el número de intentos que se permiten antes de encontrar la primera coincidencia. Establezca un número negativo para que no haya límite.
  • después : el número de intentos que se permiten después de encontrar la primera coincidencia (si la hay). Establezca un número negativo para que no haya límite.

qk_vf2_layout_configuration_set_time_limit

void qk_vf2_layout_configuration_set_time_limit(QkVF2LayoutConfiguration *config, double limit)

Limitar el tiempo de ejecución de la búsqueda « VF2 ».

No se trata de un límite estricto; solo se comprueba cuando se encuentra un diseño mejorado. El uso de esta opción también hace que el pase sea no determinista. Por lo general, se recomienda utilizar qk_vf2_layout_configuration_set_call_limit en su lugar.

Seguridad

El comportamiento es indefinido si no config es un puntero válido, alineado y distinto de nulo a un QkVF2LayoutConfiguration.

Parámetros

  • config : la configuración que se va a actualizar.
  • límite : el tiempo permitido en segundos. Establezca un valor no positivo para ejecutar sin límite.

qk_vf2_layout_configuration_set_max_trials

void qk_vf2_layout_configuration_set_max_trials(QkVF2LayoutConfiguration *config, uint64_t limit)

Limitar el número total de mejoras completas encontradas.

Dado que el árbol de búsqueda « VF2 » se poda sobre la marcha en función de la puntuación en el QkTarget, este límite no es especialmente potente. Véase qk_vf2_layout_configuration_set_call_limit para un límite más estricto.

Seguridad

El comportamiento es indefinido si no config es un puntero válido, alineado y distinto de nulo a un QkVF2LayoutConfiguration.

Parámetros

  • config : la configuración que se va a actualizar.
  • límite : el número de diseños completos que se permiten antes de finalizar. Establezca en 0 para ejecutar sin límites.

qk_vf2_layout_configuration_set_shuffle_seed

void qk_vf2_layout_configuration_set_shuffle_seed(QkVF2LayoutConfiguration *config, uint64_t seed)

Activa la reorganización de nodos de los gráficos de entrada con una semilla determinada.

Esto provoca efectivamente una modificación del orden de coincidencia de VF2, lo que en teoría significa que el espacio de una búsqueda limitada no está sesgado en función de los índices de los nodos. En la práctica, Qiskit utiliza las mejoras de ordenamiento VF2++ cuando se ejecuta en modo “promedio” (correspondiente a la búsqueda de diseño inicial) y comienza desde el mapeo de identidad realizado en modo “exacto”. Ambas heurísticas de ordenación suelen ser mucho más propensas a encontrar resultados para el problema dado que la aleatorización.

Si no se invocó esta función, no se produce ninguna reorganización de nodos.

Seguridad

El comportamiento es indefinido si no config es un puntero válido, alineado y distinto de nulo a un QkVF2LayoutConfiguration.

Parámetros

  • config : la configuración que se va a actualizar.
  • semilla : la semilla que se utilizará para el barajado activado.

qk_vf2_layout_configuration_set_score_initial

void qk_vf2_layout_configuration_set_score_initial(QkVF2LayoutConfiguration *config, bool score_initial)

Si se debe puntuar con entusiasmo el diseño inicial «trivial» del gráfico de interacción.

Normalmente, querrás configurar esto true si estás utilizando las pasadas de optimización de código ( VF2 ) para mejorar un circuito que ya se ha reducido al hardware, con el fin de establecer una base de referencia para la poda basada en puntuación. Si no es así, puede dejarlo como false (el valor predeterminado), para evitar un cálculo que probablemente no tendrá ningún impacto.

Seguridad

El comportamiento es indefinido si no config es un puntero válido, alineado y distinto de nulo a un VF2LayoutConfiguration.

Parámetros

  • config : la configuración que se va a actualizar.
  • score_initial : si se debe puntuar con entusiasmo el diseño trivial inicial.

QkVF2LayoutResult

typedef struct QkVF2LayoutResult QkVF2LayoutResult

Al ejecutar la qk_transpiler_pass_standalone_vf2_layout función, esta devuelve el resultado de su análisis como un QkVF2LayoutResult objeto. Este objeto contiene el resultado del paso del transpilador, si el paso pudo encontrar un diseño o no, y cuál fue el diseño seleccionado por el paso.

Funciones

qk_vf2_layout_result_has_match

bool qk_vf2_layout_result_has_match(const QkVF2LayoutResult *layout)

Comprueba si se ha encontrado algún resultado.

Un true valor incluye la situación en la que se especificó la configuración para probar el diseño «trivial» y se determinó que era el mejor (y, por lo tanto, no es necesario volver a etiquetar los qubits, salvo la expansión de ancilla, si procede). Consulte qk_vf2_layout_result_has_improvement para distinguir si se almacena una reasignación explícita.

Seguridad

El comportamiento es indefinido si no layout es un puntero válido y distinto de nulo a un QkVF2LayoutResult.

Parámetros

  • diseño : un puntero al diseño

Devuelve

true si la pasada de diseño VF2-based encontró alguna coincidencia.

qk_vf2_layout_result_has_improvement

bool qk_vf2_layout_result_has_improvement(const QkVF2LayoutResult *layout)

Comprueba si el resultado supone una mejora con respecto al diseño trivial.

Seguridad

El comportamiento es indefinido si no layout es un puntero válido y distinto de nulo a un QkVF2LayoutResult.

Parámetros

  • diseño : un puntero al diseño

Devuelve

true si el paso de diseño VF2-based encontró una coincidencia mejorada.

qk_vf2_layout_result_map_virtual_qubit

uint32_t qk_vf2_layout_result_map_virtual_qubit(const QkVF2LayoutResult *layout, uint32_t qubit)

Obtener el qubit físico para un qubit virtual dado

Seguridad

El comportamiento es indefinido si no layout es un puntero válido y distinto de nulo a un QkVF2LayoutResult que contenga un resultado, o si el qubit está fuera del rango del circuito inicial.

Parámetros

  • diseño : un puntero al diseño
  • qubit : el qubit virtual para obtener el qubit físico de

Devuelve

El qubit físico asignado al qubit virtual especificado

qk_vf2_layout_result_free

void qk_vf2_layout_result_free(QkVF2LayoutResult *layout)

Liberar un QkVF2LayoutResult objeto

Ejemplo
QkCircuit *qc = qk_circuit_new(1, 0);
Seguridad

El comportamiento es indefinido si no layout es un puntero válido y distinto de nulo a un QkVF2Layout.

Parámetros

  • layout : un puntero al diseño que se va a liberar
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.