news 2026/10/2 8:07:36

Quake 方言

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Quake 方言

Quake 方言

总体介绍

量子电路模型是应用最广泛的量子计算模型。它为表述量子算法提供了便利工具,也为量子计算机的物理构建提供了架构。

量子电路将计算表示为一个应用于量子数据的量子算子序列。在我们的场景中,量子数据是一组量子比特。物理上,一个量子比特是仅有两个可区分状态的对象,即它是一个二态量子力学系统,如自旋-1/2粒子。

概念上,量子算子是可能修改量子比特子集状态的效应。最常见的情况是,这种效应是幺正演化——此时,我们称该算子是幺正的。算子作用的目标量子比特数量是其固有属性。

量子指令是将量子算子应用于特定量子比特子集的具体体现。量子比特的数量必须等于(或大于)算子固有的目标量子比特数量。如果更大,额外的量子比特被视为控制比特。

动机

Quake 值模型背后的主要动机是,为了优化目的直接暴露量子与经典数据的依赖关系,即表示量子计算中的数据流。与 Quake 的内存模型(使用内存语义,量子算子作为对量子比特引用的副作用)不同,值模型使用值语义,即量子算子消费并产生值。然而,这些值并非真正的 SSA 值,因为操作仍然对值本身有副作用且值不能被复制。

我们来看一个例子以澄清两种模型之间的区别。以下是某个玩具量子计算的 Quake 实现:

mlir

func.func foo(%veq : !quake.veq<2>) { // 从向量中提取每个量子比特的样板代码 %c0 = arith.constant 0 : index %c1 = arith.constant 1 : index %q0 = quake.extract_ref %veq[%c0] : (!quake.veq<2>, index) -> !quake.ref %q1 = quake.extract_ref %veq[%c1] : (!quake.veq<2>, index) -> !quake.ref // 我们向这些提取的量子比特应用一些算子 // ... 一系列使用 %q0 和 %q1 的算子 ... quake.h %q0 : (!quake.ref) -> () // 我们决定测量该向量 %result = quake.mz %veq : (!quake.veq<2>) -> cc.stdvec<i1> // 然后向 %q0 应用另一个 Hadamard quake.h %q0 : (!quake.ref) -> () // ... }

现在假设我们想通过移除相邻的伴随算子对来优化此代码,例如,如果在同一个量子比特上连续出现一对 Hadamard 操作——图示如下:

┌───┐ ┌───┐ ┌───┐ ─┤ H ├─┤ H ├─ = ───┤ I ├─── = ───────────── └───┘ └───┘ └───┘

其中 I 是恒等算子。注意,对 Quake 的这种优化的简单实现会优化掉应用于 %q0 的两个quake.h算子。这样的实现忽略了测量正被应用于包含 %q0 的向量 %veq 这一事实。

当然,为 Quake 正确实现这种优化是可能的。但这样的实现会很容易出错且需要复杂的分析。因此,Quake 具有重载的门。

在值模型中,算子消费值并返回新值:

mlir

%q0_1 = quake.op %q0_0 : (!quake.wire) -> !quake.wire

我们可以将内存表示与值表示之间的差异可视化为:

内存表示 值表示 ┌──┐ ┌──┐ ┌──┐ ┌──┐ %q0_1 ┌──┐ ┌──┐ %q0 ─┤ ├─┤ ├─···─┤ ├─ %q0 对比 %q0_0 ─┤ ├───────┤ ├─···─┤ ├─ %q0_Z └──┘ └──┘ └──┘ └──┘ └──┘ └──┘

如果我们再次查看实现,会注意到简单优化的问题在于 Hadamard 算子通过相同的值 %q0 隐式连接。在值形式中,所有门都通过不同的值显式连接,这消除了通过隐式副作用进行进一步分析的需要。以下是值形式的实现。

mlir

func.func @foo(%array : !quake.qvec<2>) { // 提取每个量子比特的样板代码 %c0 = arith.constant 0 : index %c1 = arith.constant 1 : index %r0 = quake.extract_ref %array[%c0] : (!quake.qvec<2>, index) -> !quake.qref %r1 = quake.extract_ref %array[%c1] : (!quake.qvec<2>, index) -> !quake.qref // 解包量子引用以暴露连线 %q0 = quake.unwrap %r0 : (!quake.qref) -> !quake.wire %q1 = quake.unwrap %r1 : (!quake.qref) -> !quake.wire // 应用各种算子 %q0_M = quake.h %q0_L : (!quake.wire) -> !quake.wire // 将连线重新包装到其原始源 quake.wrap %q0_M to %r0 : !quake.wire, !quake.qref quake.wrap %q1_X to %r1 : !quake.wire, !quake.qref // 测量整个量子引用向量 %result = quake.mz %array : (!quake.qvec<2>) -> !cc.stdvec<i1> // 再次解包量子比特 0 的连线 %q0_P = quake.unwrap %r0 : (!quake.qref) -> !quake.wire ... %q0_Z = quake.h %q0_Y : (!quake.wire) -> !quake.wire // 将连线重新包装回原始引用 quake.wrap %q0_Z to %r0 : !quake.wire, !quake.qref return }

在这段代码中,我们可以更直接地看出这两个 Hadamard 算子不能相互抵消。一种推理方式如下:在值形式中,我们需要遵循值链来了解量子比特算子被应用于何处,在本例中:

内存表示 值表示 %q0 [%q0_0, %q0_1 ... %q0_L, %q0_M; %q0_P ... %q0_Y, %q0_Z]

我们知道一个 Hadamard 应用于 %q0_L 并生成 %q0_M,另一个应用于 %q0_Y 并生成 %q0_Z。因此,它们之间没有连接——这意味着它们不能相互抵消。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 20:46:22

测试诚信原则:数字时代质量防线的基石与践行路径

测试诚信的时代呼唤 在数字化浪潮席卷全球的2025年&#xff0c;软件已深入社会各个角落&#xff0c;从医疗设备到金融系统&#xff0c;从智能家居到自动驾驶&#xff0c;其质量直接关乎人类安全与效率。作为软件质量的“守门人”&#xff0c;测试从业者的责任空前重大。然而&a…

作者头像 李华
网站建设 2026/10/2 5:34:55

实测 GPT-5.2 与 Gemini-3:我用 AI 重构了 3000 行核心代码,结果令人沉默

别再手写前端了&#xff1a;Banana Pro (Gemini-3-Image) 视觉模型实战评测&#xff0c;草图秒变代码作为一名写了十年代码的老程序员我一直坚信一个观点代码质量是衡量工程师水平的唯一标准直到昨天我花了两天两夜优化了一个复杂的并发算法模块沾沾自喜地准备提交结果我手欠试…

作者头像 李华
网站建设 2026/10/2 3:11:17

代码之恋(第十五篇:分布式心跳与网络延迟)

南国的早晨&#xff0c;李磊站在新租的公寓窗前&#xff0c;看着陌生的城市。来小渔村一周&#xff0c;升职带来的兴奋已褪去&#xff0c;剩下的是对江城的思念。他打开电脑&#xff0c;屏幕上显示着与艾丽的视频通话窗口——这是他们每晚的“同步时间”。// Collaboration_v3.…

作者头像 李华
网站建设 2026/10/2 1:04:05

Vue单页应用(SPA)开发全解析:从原理到最佳实践

文章目录一、SPA架构核心原理1.1 什么是SPA&#xff1f;1.2 Vue实现SPA的三大支柱二、路由系统深度实现2.1 路由配置实战2.2 编程式导航三、数据管理进阶方案3.1 Pinia状态管理3.2 异步数据流处理四、性能优化实战4.1 路由懒加载4.2 状态持久化五、常见问题解决方案5.1 路由跳转…

作者头像 李华
网站建设 2026/10/2 3:11:17

2026四川大学计算机考研复试机试真题

2026四川大学计算机考研复试机试真题 2026四川大学计算机考研复试上机真题 历年四川大学计算机考研复试上机真题 历年四川大学计算机考研复试机试真题 更多学校题目开源地址&#xff1a;https://gitcode.com/verticallimit1/noobdream N 诺 DreamJudge 题库&#xff1a;输…

作者头像 李华
网站建设 2026/10/1 21:02:08

用Comsol探索水力压裂:井眼应力场与多分支缝应力分布的奥秘

应用comsol分析水力压裂对井眼附近应力场的影响应用comsol分析多分支缝压裂应力分布 在各种应力作用下&#xff0c;井眼围岩会发生应力集中现象&#xff0c;也会发生一定规律下的压缩和拉伸。 具体分析了岩石弹性模量、地应力和井眼液柱压力对应力场的影响。 具体算例如下。 正…

作者头像 李华