Azure Quantum での QIR target プロファイルの種類
この記事では、Azure Quantum の量子コンピューティング プロバイダーで使用できるさまざまな種類の QIR target プロファイルについて説明します。 QIR target プロファイルの種類は、Q# プログラムで target できる量子デバイスの機能を定義するために使用されます。
Target プロファイルとその制限事項
量子デバイスはまだ新しいテクノロジであり、そのすべてがすべての Q# プログラムを実行できるわけではありません。 そのため、さまざまな targets用のプログラムを開発するときは、いくつかの制限に留意する必要があります。 現在、Azure Quantum と QDK では、次の 3 つの異なる target プロファイルが管理されています。
- Unrestricted: このプロファイルは、シミュレーターのメモリの制限内、または物理量子コンピューターの量子ビット数の範囲内で任意の QIR プログラムを実行できます。
- QIR base: このプロファイルでは、量子ビット測定の結果を使用してプログラム フローを制御する必要のない Q# プログラムを実行できます。 この種の QPU をターゲットとする Q# プログラム内では、型
Result
の値で等価比較はサポートされません。 - QIR Adaptive RI: このプロファイルには、量子ビット測定の結果を使用してプログラム フローを制御する機能が限られています。 この種の QPU を対象とする Q# プログラム内では、操作内のステートメント内の条件の一部として
Result
型の値if
比較し、中間回路の測定を可能にすることができます。
Unrestrictedtarget プロファイルのアプリケーションを作成して実行する
Unrestrictedtarget プロファイルは任意のプログラムを実行できます。つまり、機能制限なしで Q# プログラムを記述できます。 Azure Quantum では、このプロファイルに target は提供されません。 ただし、QDK によって提供 Unrestricted シミュレーターで Q# プログラムを実行できます。
Unrestrictedtarget プロファイルの構成
Visual Studio Code:
- View -> コマンド パレットを選択し「Q#: Azure Quantum QIR target プロファイルを設定します」 と入力します。 Enter キーを押します。
- [ Unrestricted を選択します。
Python では、qsharp.init
メソッドを使用してtarget プロファイルを設定できます。
qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted)
QIR Basetarget プロファイルのアプリケーションを作成して実行する
QIR Basetarget プロファイルは、量子ビット測定の結果を使用してプログラム フローを制御できないという制約を持つ、さまざまな Q# アプリケーションを実行できます。 具体的には、 Result
型の値は等価比較をサポートしていません。
たとえば、この操作QIR Basetargetで実行することはできません。
operation FlipQubitOnZero() : Unit {
use q = Qubit();
if M(q) == Zero {
X(q);
}
}
QIR Basetargetに対してこの操作を実行しようとすると、if
ステートメントで計算フローを制御するために、測定結果 (M(q) == Zero
) を使用して比較が行われるため、操作は失敗します。 elif
ステートメントやelse
ステートメントなど、conditional branching の種類にも同じ方法が適用されます。
QIR Basetarget プロファイルの構成
Visual Studio Code:
- View -> コマンド パレットを選択し「Q#: Azure Quantum QIR target プロファイルを設定します」 と入力します。 Enter キーを押します。
- [QIR ベース 選択。
Python では、qsharp.init
メソッドを使用してtarget プロファイルを設定できます。
qsharp.init(target_profile=qsharp.TargetProfile.Base)
targets をサポートするようになりました
現時点では、次の QIR Basetargets は Azure Quantum で使用できます。
プロバイダー: IonQ
- IonQ シミュレーター (
ionq.simulator
) - IonQ QPU (
ionq.qpu.*
)
- IonQ シミュレーター (
プロバイダー: Rigetti
- Rigetti シミュレーター (
rigetti.sim.*
) - Rigetti QPU (
rigetti.qpu.*
)
- Rigetti シミュレーター (
QIR Adaptive RI プロファイルのアプリケーションを作成して実行するtargets
QIR Adaptive RI プロファイル targets では、さまざまな Q# アプリケーションを実行できますが、いくつかの制約があります。 このプロファイルの種類は、 QIR Base プロファイルに対する改善を想定していますが、いくつかの制限が引き続き適用されます。
QIR Adaptive RI プロファイル targets 測定ベースの条件付き操作と mid-circuit測定が可能です量子ビットは量子プログラムの最終ステートメント以外のポイントで選択的に測定でき、測定の出力は他の操作で使用できます。 中間回路測定により、量子プログラム全体の任意の時点で複数の測定が可能になります。 測定された量子ビットの量子情報は古典的な状態 (ゼロまたは 1) に折りたたまれますが、非測定量子ビットは量子状態のままです。
Q# では、量子ビットを測定するときに、 Result
型の値が返されます。 この結果を条件ステートメントで使用する場合は、条件ステートメントで直接比較する必要があります。 対応する条件ブロックに、return
または set
ステートメントを含めることはできません。
たとえば、次の Q# コードは、 QIR Adaptive RItargetで許可されます。
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); }
}
QIR Adaptive RItarget プロファイルの構成
Visual Studio Code:
- View -> コマンド パレットを選択し「Q#: Azure Quantum QIR target プロファイルを設定します」 と入力します。 Enter キーを押します。
- [QIR Adaptive RI] を選択します。
Python では、qsharp.init
メソッドを使用してtarget プロファイルを設定できます。
qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI)
targets をサポートするようになりました
現時点では、次の QIR Adaptive RItargets は Azure Quantum で使用できます。
- Provider: Quantinuum
- Quantinuum Emulators (
quantinuum.sim.h1-1e
、quantinuum.sim.h2-1e
) - Quantinuum QPU (
quantinuum.qpu.h1-1
,quantinuum.qpu.h2-1
)
- Quantinuum Emulators (