
1.3 混合计算
前文提到,量子计算机非常擅长处理一些特定的问题,但并非所有问题。因此,利用一种新形式的混合计算可能可以取得最好的结果,即用量子系统解决一部分问题,用经典计算机解决其余部分。
事实上这并不是一个全新的方法,大多数现代计算机系统已经采用了中央处理器(Central Processing Unit,CPU)与图形处理单元(Graphics Processing Unit,GPU)并用的类似模式。GPU适于执行某些任务(例如图形或深度学习应用程序所需的矢量运算),但并非所有任务。许多现代UI框架,包括JavaFX在内,都利用了CPU和GPU的可用性,并将部分工作委托给CPU,而将另一些部分工作委托给GPU,从而优化需要执行的任务,如图1.5所示。

图1.5 CPU与GPU分担工作
对不同任务使用不同协处理器的思路可以扩展到量子计算中。在理想情况下,软件应用程序可以将一些任务委托给CPU,一些委托给GPU,剩下的委托给量子处理单元(Quantum Processing Unit,QPU),如图1.6所示。

图1.6 CPU、GPU与QPU分担工作
当工具用于其适合的工作时,就能取得最好的结果。对此,软件应用程序应该使用GPU进行矢量计算,将QPU用于在经典系统上速度较慢但在量子系统上速度较快的算法,而将CPU用于所有GPU或QPU不占优势的事情。
如果每个终端应用程序都需要判断哪个部分应当委托给哪个处理器,那么软件开发人员的工作会非常困难。我们希望框架和库能够提供一些帮助,并将这个问题从终端开发者那里抽象出来。
如果使用JavaFX API在Java中创建用户界面,就不必担心哪些部分在GPU上执行、哪些部分在CPU上执行的问题,JavaFX API的内部已经实现了此功能。JavaFX框架可以检测有关GPU的信息并将工作委托给它。虽然开发人员仍然可以直接访问CPU或GPU,但这通常是Java等高级语言所不允许的。
图1.6对QPU进行了非常简化的表示。GPU很容易适用于现代的服务器、桌面系统以及移动和嵌入式设备,但量子处理器则相对更困难,因为它要求在受控、无噪声的环境中操纵量子效应(例如硬件的温度需保持在接近绝对零度的低温)。至少一开始,大多数真正的量子计算资源有可能要通过特定的云服务器,而非嵌在芯片上的协处理器才能获得。同理,因为库可以将复杂任务拆分,并将一些任务委托给通过云服务访问的量子系统,从而使终端软件应用程序获益,如图1.7所示。

图1.7 依赖云服务的量子计算