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 で使用できます。

プロファイル用のアプリケーションを作成して実行する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 で使用できます。