Azure Quantum 中的目標設定檔類型
本文討論 Azure Quantum 中量子運算提供者中可用的不同類型的 target 配置檔類型。 目前,由於現場的早期開發階段,量子裝置對於在它們上執行的程式有一些限制和需求。
量子處理單位 (QPU) :不同的配置檔及其限制
量子處理單位 (QPU) 是一種實體或模擬處理器,其中包含一些可操作以計算量子演算法的互連量子位。 其為量子運算器或量子模擬器的核心元件。
量子裝置仍然是一種新興的技術,而且並非所有裝置都能夠執行所有 Q# 程式碼。 因此,在開發不同 targets的程式時,您必須記住一些限制。 目前,Azure Quantum 和 QDK 會針對 QPU 管理三個不同的設定檔:
- Full:此配置檔可以在模擬器記憶體限制內執行任何 Q# 程式,或實體量子計算機的量子位數目。
- No Control Flow:此設定檔可以執行任何不需要使用量子位測量結果的 Q# 程式來控制程式流程。 在這類 QPU 的 Q# 程式中 target,類型的
Result
值不支援相等比較。 - Basic Measurement Feedback:此配置檔具有使用量子位測量結果來控制程式流程的能力有限。 在針對這類 QPU 所設定的 Q# 程式中 target,您可以比較類型
Result
值做為作業中語句中if
條件的一部分,允許中間線路測量。 對應的條件式區塊可能不會包含return
或set
陳述式。
建立和執行配置檔的應用程式Fulltargets
Full profile 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 執行這項作業將會失敗,因為它會評估兩個結果之間的比較 (desired != M(q)
) ,以使用語句控制計算流程 if
。 這適用於任何類型的 條件式分支,例如 elif
和 else
語句。
注意
目前,您無法提交在 中測量 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
供應商: Rigetti
- Rigetti 模擬器 (
rigetti.sim.*
) - Rigetti QPU ()
rigetti.qpu.*
- Rigetti 模擬器 (
建立和執行配置檔的應用程式Basic Measurement Feedbacktargets
Basic Measurement Feedback profile targets 可以執行各種不同的 Q# 應用程式,而且條件約束,您只能比較類型 Result
值做為作業中語句內 if
條件的一部分。 此配置檔類型假設配置檔有所改善 No Control Flow ,但仍受限於一些限制。
Basic Measurement Feedback 配置文件 targets 允許以測量為基礎的條件式作業和 中間線路測量,這表示量子位可以在量子程式最終語句以外的時間點選擇性地測量,而且測量的輸出可用於其他作業。 中間線路測量可在量子程式的任何時間點進行多個測量。 測量量子位的量子位資訊會折疊為傳統狀態, (零或一個) ,但非測量的量子位會保留其量子狀態。
在 Q# 中測量量子位時,會傳回類型的 Result
值。 如果您想要在條件語句中使用這個結果,您必須直接在條件語句中進行比較。 對應的條件式區塊可能不會包含 return
或 set
陳述式。
例如,在 中 Basic Measurement Feedbacktarget允許下列 Q# 程式代碼:
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); }
}
只要SetQubitState
您未在語句中包含任何 return
或 set
語句,即可No Control Flow在 Basic Measurement Feedbacktargetif
中使用 中的作業。 這適用於任何類型的 條件式分支,例如 elif
和 else
語句。 例如,下列作業 不能 用於 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 QPUs (
quantinuum.qpu.h1-1
、quantinuum.qpu.h2-1
)
- Quantinuum Emulators (
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應