关键点
1 量子计算从根本上不同于其他计算手段,需要开发特定的编程语言和编译技术;
2 今天的量子编程语言可满足不同受众,包括初学者和经验丰富的从业人员;
3 编程语言和软件工具,通过启用验证、资源估算、程序分析和可视化量子应用程序,促进量子应用程序的开发、优化和发展。它们对于理解和分析大规模应用、用于近期硬件的算法以及找到合适的电路编译方法至关重要;
4 对于软件工具的近期设备和应用的需求,与可扩展、具备容错能力的量子计算的要求,大不相同;
5 量子编程语言和编译器领域仍处于起步阶段,目前的研究工作主要集中在低层次的电路优化上,专注于纯量子部分,而不是整个程序结构上的优化;
6 量子计算模拟经典计算的进展,需要跨学科的协作,以充分利用所学知识。
前言小叙
量子编程语言,对于将思想转换为可由量子计算机执行的指令来说,至关重要。
它不仅与大规模量子计算机的编程息息相关,而且在出现能够执行量子算法的硬件之前,它也可以促进量子算法的开发。
量子编程语言可用于控制现有的物理设备、估算未来设备上量子算法的执行成本、进行量子计算的教学,或者验证量子算法及其应用。
图1|量子编程(来源:Fossbytes)
不管是新手、经验丰富的从业者,研究人员或开发人员,都在使用量子编程语言,以实现突破性进展,或将已知概念与现实问题相结合。
目标和受众的多样性,反映在现有量子编程语言的设计和生态系统中,具体取决于语言运算符优先考虑因素。
应运而生
随着强大的、企业级量子计算硬件的不断发展,以及新的量子算法的开发,量子计算面临着艰巨的使命。
为了激发量子计算的潜力,需要对量子设备进行编程和控制,以执行算法来解决实际问题。
要使编程的效率更高,开发人员之间的衔接更少,需要将任务自动化。而提供自动化和执行所需的信息,需要开发适当的编程语言和编译程序。
在量子应用程序中,贯穿着经典计算和量子计算。而量子子程序固有的异步特性,会使两者之间的协调工作变得非常困难。
为了解决现实世界中的问题,要将不同的量子子程序和算法,组合到一个可以“端到端”解决问题的应用程序中。
图2|端到端(来源:BTS Fleet)
从开发一套量子算法和子程序,到实现应用程序的构建,这之间的过渡取决于,是否有合适的编程语言和框架,而语言的结构决定了我们如何“思考”和“推理”已实现的算法。
因此,编程语言的选择会影响我们思考问题的方式,理想的情况是以一种有效执行的方式来促进表达程序的产生,这在量子编程中尤为重要。
因为即使是最大的设备,也会在逻辑量子比特数和相干时间方面,受到严重限制,对经典反馈的时间尺度,也有很高的要求。
与此同时,一些概念性的算法技术,例如振幅放大或相位反冲,是受编程语言的支持的。因此程序员可以根据这些技术来进行思考,而不单单依靠基本的量子运算。
反之,这可以大大扩展量子计算的应用范围。因此,量子编程语言的设计,不仅要借鉴我们在设计经典语言方面的丰富经验,而且还要解决量子领域的独特挑战。
图3|量子编程语言(来源:Nature)
量子编程
量子计算仍处于起步阶段。与执行运算所需的逻辑比特数相比,现在量子硬件中的量子比特数较少。而且目前所处的噪声水平,也可能会得出不正确或者不精确的计算结果。
与广泛的计算和编程相比,量子计算只有一小部分算法是相对容易理解的,而其实际应用则更少。
今天的环境高度类似于1950年代经典计算的时期,每个系统都是不同的,功能和资源都非常有限。
与自动优化用户代码相比,为特定的问题量身定做一个优化解决方案,可以产生更好的结果。
前者要求语言和编译器对如何将代码转换为硬件指令具有高度的控制权。相反,专门为特定硬件目标编写的代码可重用性较低。
图4|Q#(来源:Fossbytes)
考虑到当前的一致性时间限制了程序的大小,启用代码重用在初期可能没有那么重要。
因此,在1950年代中期引入高级语言之前,当前早期的语言通常与经典计算中的机器和汇编代码处于同一水平。
未来,我们希望量子系统的尺寸和功能会不断增长。系统将包含数百万个物理量子比特,并将使用纠错和相关技术来呈现数千个逻辑量子比特,这些逻辑量子比特完全无误差,可以进行非常庞大的计算。
随着硬件的增长,社区和算法语料库也将随之增长。为了在未来的大规模量子计算中发挥作用,量子编程语言需要像1950年代至今的经典编程语言一样不断发展。
前景展望
量子计算有望带来无限可能,但是,首先需要克服几个主要的技术挑战,要想实现必要的突破,需要跨学科、跨机构的共同努力。
除了充分利用当前经典计算的资源来促进这些发展外,量子计算社区可以通过洞察计算发展轨迹,来了解必经之路和弯路。
计算机的发展进程在早期是无法预测的,而在接下来的几十年中,为了努力模拟和加速量子计算的发展,研究人员拥有巨大的优势。他们可以利用先前的经验,推断发展过程中的关键成功因素。
量子计算的目的是完成其他计算手段无法完成的任务,要做到这一点,不仅需要量子硬件和应用有一定的规模,而且对领域本身的规模也有一定的要求。
它还需要来自不同背景、不同观点和不同专业领域的人,对不同元素做出贡献。因此,需要工作人员在硬件、固件、控制软件、编译器和语言方面上紧密协作。
图5|编程(来源:网络)
要使量子计算成功,需要的不仅仅是建立一个执行量子程序的堆栈。量子计算社区还需要工具和框架,使个人能够有效地贡献、交流和分享他们的知识。
编程语言的目的是通过表达一个想法或概念,使读者能够直观地区分、识别关键组成部分,以及它们是如何组合在一起的。
量子编程语言不仅可以清楚地表达、执行量子算法,而且还可以探索、开发支持量子算法的应用程序和硬件。
合适的工具可以使用量子角色塑造、验证和确认协议,来帮助分析并减轻量子程序中的噪声,并为量子设备开发自动校准和调谐协议。
备战未来
我们已经看到量子编程语言是如何通过启用量子算法和程序的验证、模拟和可视化,在应用程序开发中发挥关键作用的。
它们周围的生态系统和社区,促进了根据量子独特的性质和潜力,量身定制的编译技术的发展,各种教学材料向新一代研究人员介绍了量子计算的基础知识。
量子编程语言和编译器领域仍处于起步阶段,目前的研究工作主要集中在低层次的电路优化上,专注于纯量子部分,而不是整个程序结构上的优化。
这与传统的编译器不同,传统编译器的许多优化都涉及到更高层次的控制流构造,比如各种类型的循环。
图6|编译器(来源:斯坦福大学)
在量子计算中,目前通常情况是,对于一个特定的问题,自定义的算法要比通用算法的表现力更好。
这种情况同样存在于经典高性能计算中,导致了数十年的编译器优化研究工程,以及语言设计工作,以便给编译器提供更多的信息。
尽管一些量子语言已经采用了经典的语言模式,但是还需要理解如何表达通用算法的量子特性,以便它们能够得到优化。
如今,针对每个问题实例的专门解决方案,通常是手工编码的。更高级的编译技术和自动优化,将允许通过构建抽象层,来为整个问题类别编写通用解决方案。
量子应用研究领域一直在发展,目前尚不清楚哪些应用最终会造福于社会。只有洞察力提升了,我们才可以更明显地看出,哪些优化是最具影响力的。
参考链接:
[1]https://www.nature.com/articles/s42254-020-00245-7
声明:此文出于传递高质量信息之目的,若来源标注错误或侵权,请作者持权属证明与我们联系,我们将及时更正、删除,所有图片的版权归属所引用组织机构,此处仅引用,原创文章转载需授权。