Azure Quantum のターゲット プロファイルの種類
この記事では、Azure Quantum の target 量子コンピューティング プロバイダーで使用できるさまざまな種類のプロファイルについて説明します。 現時点では、この分野の初期開発段階であるため、量子デバイスには、実行されるプログラムに対していくつかの制限事項と要件があります。
量子処理装置 (QPU): さまざまなプロファイルとその制限事項
量子処理ユニット (QPU) は、物理的またはシミュレートされたプロセッサであり、相互接続された多数の量子ビットを含み、それらを操作して量子アルゴリズムを計算できます。 これは、量子コンピューターまたは量子シミュレーターの中心的なコンポーネントです。
量子デバイスはまだ新しいテクノロジであり、そのすべてがすべての Q# プログラムを実行できるわけではありません。 そのため、異なる targets用のプログラムを開発する場合は、いくつかの制限を念頭に置く必要があります。 現在、Azure Quantum と QDK は、QPU 用に 3 つの異なるプロファイルを管理しています。
- Full: このプロファイルは、シミュレーターのメモリの制限内、または物理量子コンピューターの量子ビット数の範囲内で任意の Q# プログラムを実行できます。
- No Control Flow: このプロファイルでは、量子ビット測定の結果を使用してプログラム フローを制御する必要のない Q# プログラムを実行できます。 この種の QPU 用に作成された Q# プログラム target内では、型
Result
の値は等価比較をサポートしていません。 - Basic Measurement Feedback: このプロファイルには、量子ビット測定の結果を使用してプログラム フローを制御する機能が限られています。 この種の QPU 用に作成された Q# プログラムtarget内では、演算のステートメント内
if
の条件の一部として 型Result
の値を比較し、中間回路の測定を可能にします。 対応する条件ブロックに、return
またはset
ステートメントを含めることはできません。
プロファイル用のアプリケーションを作成して実行するFulltargets
Full プロファイル targets では、任意の Q# プログラムを実行できます。つまり、機能制限なしでプログラムを記述できます。 Azure Quantum では、このプロファイルはまだ提供 target されていません。
プロファイル用のアプリケーションを作成して実行するNo Control Flowtargets
No Control Flow プロファイル targets では、量子ビット測定の結果を使用してプログラム フローを制御できないという制約を使用して、さまざまな Q# アプリケーションを実行できます。 より具体的には、Result
型の値が等価比較をサポートしません。
たとえば、 でこの操作をNo Control Flowtarget実行することはできません。
operation SetQubitState(desired : Result, q : Qubit) : Result {
if (desired != M(q)) {
X(q);
}
}
に対 No Control Flowtarget してこの操作を実行しようとすると、ステートメントを使用して計算フローを制御するために 2 つの結果 (desired != M(q)
) の比較が評価されるため、 if
失敗します。 これは、 ステートメントelse
や ステートメントなどelif
、任意の種類の条件付き分岐に適用されます。
注意
現時点では、結果を使用してプログラム フローを制御しない場合でも、 で測定された量子ビットに No Control Flowtargets対する操作を適用する量子プログラムを送信することはできません。 つまり、 No Control Flowtargets 中間回路の測定を許可しないでください。
たとえば、 で次のコードをNo Control Flowtarget実行することはできません。
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SampleMeasuredQubit(q : Qubit) : Result {
H(MeasureQubit(q));
return M(MeasureQubit(q));
}
現在、これらは No Control Flowtargets Azure Quantum で使用できます。
プロバイダー: IonQ
- IonQ シミュレーター (
ionq.simulator
) - IonQ QPU (
ionq.qpu
)
- IonQ シミュレーター (
プロバイダー: Rigetti
- Rigetti シミュレーター (
rigetti.sim.*
) - Rigetti QPU (
rigetti.qpu.*
)
- Rigetti シミュレーター (
プロファイル用のアプリケーションを作成して実行するBasic Measurement Feedbacktargets
Basic Measurement Feedbackprofile targets では、さまざまな Q# アプリケーションを実行できます。制約では、演算内のステートメント内if
の条件の一部として型のResult
値のみを比較できます。 このプロファイルの種類は、プロファイルに対 No Control Flow する改善を想定していますが、いくつかの制限が引き続き適用されます。
Basic Measurement Feedback プロファイル targets を使用すると、測定ベースの条件付き演算と 中間回路測定が可能になります。つまり、量子プログラムの最後のステートメント以外のポイントで量子ビットを選択的に測定でき、測定の出力を他の操作で使用できます。 中間回路測定は、量子プログラム全体の任意の時点で複数の測定を可能にします。 測定された量子ビットの量子情報は古典的な状態 (ゼロまたは 1) に折りたたまれますが、測定されていない量子ビットは量子状態を保持します。
Q# では、量子ビットを測定するときに、型 Result
の値が返されます。 この結果を条件ステートメントで使用する場合は、条件ステートメントで直接比較する必要があります。 対応する条件ブロックに、return
または set
ステートメントを含めることはできません。
たとえば、 で次の Q# コードを Basic Measurement Feedbacktarget使用できます。
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); )
}
ただし、ブール値の評価を移動した同じコードは許可 されません 。
operation BeOne(q : Qubit) : Bool {
return M(q) == One;
}
operation SetToZeroUsingBeOne(q : Qubit) : Unit {
if BeOne(q) { X(q); }
}
の No Control Flow 操作はSetQubitState
、 ステートメント内に または set
ステートメントを含return
めない限り、 if
でBasic Measurement Feedbacktarget使用できます。 これは、 ステートメントelse
や ステートメントなどelif
、任意の種類の条件付き分岐に適用されます。 たとえば、 で次の操作をBasic Measurement Feedbacktarget使用することはできません。
operation SetQubitState(desired : Result, q : Qubit) : Result {
if desired != M(q) {
X(q);
return M(q);
}
}
現在、これらは Basic Measurement Feedbacktargets Azure Quantum で使用できます。
- プロバイダー: Quantinuum
- Quantinuum Emulators (
quantinuum.sim.h1-1e
,quantinuum.sim.h2-1e
) - Quantinuum QPU (
quantinuum.qpu.h1-1
,quantinuum.qpu.h2-1
)
- Quantinuum Emulators (
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示