VF2 objetos de paso del compilador
QkVF2LayoutConfiguration
typedef struct QkVF2LayoutConfiguration QkVF2LayoutConfigurationLa 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 QkVF2LayoutResultAl 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