Řešení potíží s integrovanými hybridními řešeními
Poznámka
Tento obsah se vztahuje pouze na sadu Classic QDK.
Vývoj a spouštění integrovaných hybridních algoritmů na nejnovějším podporovaném hardwaru je nová a rychle se vyvíjející oblast. Tento článek popisuje nástroje a metody, které jsou aktuálně k dispozici, spolu se známými problémy, a aktualizuje se, protože jsou podporovány nové funkce.
Omezení a omezení funkcí
Následující tabulka uvádí aktuálně známá omezení a omezení integrované sady hybridních funkcí. Povědomí o těchto omezeních vám může pomoct předcházet chybám při zkoumání integrovaných hybridních programů. Tato tabulka se aktualizuje, jakmile se funkce rozšíří.
Položka | Poznámky |
---|---|
Podporované knihovny | Od této verze nepodporují integrované hybridní programy všechny knihovny v QDK. |
Upozornění kompilátoru | Ve výchozím nastavení targetse chyby kompilátoru specifické pro -převedou na upozornění. Před spuštěním na kvantovém hardwaru nezapomeňte ověřit kód na simulátoru, emulátoru nebo validátoru poskytnutém targetposkytovatelem hardwaru. |
Složené datové typy | Integrované hybridní programy v současné době nepodporují použití složených datových typů, jako jsou typy struktur, řazené kolekce členů a sekvenční typy, včetně polí. Toto omezení také brání použití takových datových struktur pro volatelné hodnoty. Integrované programy navíc nemůžou používat podprogramy jako hodnoty první třídy a použití typů funkcí je omezeno na globálně deklarované funkce LLVM , které mohou být volány jako součást provádění programu. |
Nevázané smyčky nebo rekurze | Nevázané smyčky a přímé nebo nepřímé rekurze funkcí jsou pro tuto verzi mimo rozsah. |
Dynamické přidělování qubitů a přístup | Funkce modulu runtime pro přidělování a vydávání qubitů nejsou k dispozici a chybějící podpora místních proměnných a složených datových typů brání aliasování qubitů. |
Částečné aplikace | Použití částečné aplikace k definování volatelné viditelné v oboru názvů není podporováno. |
Pole | Pokud je to možné, používejte oblasti místo polí. V případě malých smyček, kde se výkon netýká, může uživatel raději použít rozsahy (souvislou paměť), aby se vyhnul přechodu mimo přidělenou paměť. |
Podpora celého čísla | Aktuální podpora hardwaru Quantinuum pro celá čísla je omezena na 32bitové hodnoty bez znaménka, i když Q# jsou celá čísla považována za 64bitové podepsané v kódu. Toto omezení může mít vliv na některé bitové operace a porovnání. Pro integrované hybridní programy se doporučuje používat kladné celočíselné hodnoty. |
Vrácení konstantních hodnot | Programy, které vracejí konstantní Result hodnoty (tj. Zero nebo One ) nejsou podporovány. |
Omezení klasického registru | Každý podporovaný target má počet klasických registrů specifických pro hardware a kompilace může selhat, pokud podkladový program používá více klasických registrů, než je k dispozici. K těmto selháním obvykle dochází u struktur smyčky. |
Chybové zprávy a řešení potíží
- Neúplná kompilace
- Překročení maximálního povoleného počtu klasických registrů
- Upozornění QS5023
- Upozornění QS5024
- Upozornění QS5025
- Upozornění QS5026
- Upozornění QS5027
- Upozornění QS5028
- Transformace specifická pro cíl selhala
Neúplná kompilace
- Kód chyby: honeywell – 1000
- Chybová zpráva: 1000: Chyba kompilace: Vnitřní chyba: Neúplná kompilace
- Typ: Chyba úlohy
- Zdroj: Cílový kompilátor
K této chybě může dojít při odeslání programu, který implementuje některý z následujících scénářů:
Nepodporované celočíselné porovnání.
operation IntegerComparisons() : Bool[] { use register = Qubit[2]; mutable i = 0; if (MResetZ(register[0]) == Zero) { set i += 1; } mutable j = 0; if (MResetZ(register[1]) == One) { set j += 1; } let logicalResults = [ // Supported: equality comparisons with non-negative constants. i == 0, // Supported: equality comparisons between integer variables. i == j, // Not supported: equality comparisons with negative constants. i == -1, // Not supported: non-equality integer comparisons. i < 0, i <= i, i > 0, i >= j ]; return logicalResults; }
Nepodporované smyčky, které závisí na výsledcích měření qubitu.
operation UnboundedLoops() : Result { use q = Qubit(); H(q); use t = Qubit(); repeat { X(t); H(q); } until MResetZ(q) == One; return MResetZ(t); }
Překročení maximálního povoleného počtu klasických registrů
- Kód chyby: honeywell – 1000
- Chybová zpráva: 1000: Chyba kompilace: Překročení maximálního povoleného počtu klasických registrů
- Typ: Chyba úlohy
- Zdroj: Cílový kompilátor
K této chybě může dojít při odeslání programu, který vyžaduje velký počet klasických registrů. Mezi vzory, které můžou tento problém způsobit, patří smyčky , které obsahují velký počet iterací, hluboce vnořené příkazy if nebo velký počet měření qubitů.
operation ClassicalRegisterUsage() : Result {
use q = Qubit();
use t = Qubit();
mutable count = 0;
for _ in 1 .. 100 {
H(q);
if (MResetZ(q) == One) {
X(t);
}
if (MResetZ(t) == One) {
set count += 1;
}
}
return MResetZ(t);
}
Upozornění QS5023
- Kód chyby: Upozornění QS5023
- Chybová zpráva: Nástroj target{0} nepodporuje porovnávání výsledků měření.
- Typ: Upozornění
- Zdroj: Cílový kompilátor
Upozornění QS5024
- Kód chyby: Upozornění QS5024
- Chybová zpráva: Tady nelze porovnat výsledky měření. Pouze target{0} podporuje porovnání výsledků měření jako součást podmínky příkazu if- nebo elif-v operaci.
- Typ: Upozornění
- Zdroj: Cílový kompilátor
Upozornění QS5025
- Kód chyby: Upozornění QS5025
- Chybová zpráva: Zde nelze použít návratový příkaz. Nástroj target{0} nepodporuje návratové příkazy v podmíněných blocích, které závisí na výsledku měření.
- Typ: Upozornění
- Zdroj: Cílový kompilátor
Upozornění naznačuje, že byste měli mít příkaz return v posledním bloku.
Upozornění QS5026
- Kód chyby: Upozornění QS5026
- Chybová zpráva: Proměnnou "{0}" nelze zde znovu přiřadit. V podmíněných blocích, které závisí na výsledku target{1} měření, podporuje pouze opětovné přiřazení proměnných, které byly deklarovány v rámci bloku.
- Typ: Upozornění
- Zdroj: Cílový kompilátor
Toto upozornění indikuje, že váš program je potřeba upravit tak, aby běžel na hardwaru target . Definujte operaci pouze pro tělo smyčky, která připraví stav a měří ho, a spusťte ji jako úlohu.
Upozornění QS5027
- Kód chyby: Upozornění QS5027
- Chybová zpráva: Volatelné {0} vyžaduje funkce modulu runtime, které nejsou podporovány nástrojem target{1}.
- Typ: Upozornění
- Zdroj: Cílový kompilátor
Toto upozornění indikuje, že váš program používá volatelné objekty, které se pokoušejí provádět klasické výpočty, které nejsou podporovány na hardwaru target . Někteří poskytovatelé hardwaru například nepodporují klasické výpočty s datovými Boolean
typy nebo Int
.
Upozornění QS5028
- Kód chyby: Upozornění QS5028
- Chybová zpráva: Tento konstruktor vyžaduje klasickou funkci modulu runtime, kterou targetnepodporuje .
- Typ: Upozornění
- Zdroj: Cílový kompilátor
Toto upozornění indikuje, že Q# program používá pokročilé klasické funkce, které musí být optimalizovány během zpracování QIR . Pokud k této optimalizaci nemůže dojít, spuštění programu může selhat v pozdějším kroku kompilace.
Transformace specifická pro cíl se nezdařila.
- Kód chyby: QATTransformationFailed
- Chybová zpráva: Zpráva bude specifická pro program
- Typ: Chyba úlohy
- Zdroj: Služba Azure Quantum
K této chybě může dojít, protože službě Azure Quantum se nepodařilo transformovat program Quantum Intermediate Representation (QIR) natolik, aby bylo možné program spustit v zadaném targetobjektu . Chybová zpráva obsahuje podrobnosti o QIR, které představují program, a co způsobilo selhání ověření. Neposkytuje však podrobnosti o tom, jak chyba souvisí se zdrojovým kódem.
Scénáře, které můžou způsobit výskyt této chyby, jsou velmi široké. Následující seznam neobsahuje všechny, ale uvádí některé z nejběžnějších:
Přístup k prvkům pole, které jsou mimo rozsah pole.
operation IndexOutOfRange() : Result { use register = Qubit[1]; H(register[1]); return MResetZ(register[1]); }
Použití aritmetických operací, které nejsou podporovány targetnástrojem .
operation UnsupportedArithmetic() : Result { use q = Qubit(); mutable theta = 0.0; for _ in 1 .. 10 { Rx(theta, q); set theta += (0.25 * PI()); } return MResetZ(q); }
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro