是否可以使用 Q# 来控制我自己的量子计算机?

Is it possible to use Q# to control my own quantum computer?

简而言之:如果我可以访问一台真正的量子计算机,是否可以使用 Q# 来控制它?

在你将其否决为必杀技之前,因为 "there's no quantum computer available yet":我是一名物理学家,我们的团队能够在现实世界的量子比特上做真正的门。我也有一些编程背景(主要是 C++)。

所以为了这个问题,让我们假设某人可以访问能够对多个量子位执行特定量子操作的真实世界设备。显然,量子比特的数量可能是有限的,可能的操作也是如此。假设某人足够精通 Q#,必要时还可以精通 C#。是否有可能 "redirect" 从内置模拟器到某些真实世界设备的计算?还是必须基本上重写整个 Q# 库?有什么方法可以定义我自己的 QuantumSimulator 吗?我该如何开始呢?

我在对象浏览器中浏览了一下。

您用来调用 Q# operations 的 C# 存根如下所示:

using (var sim = new QuantumSimulator())
{
  var res = MyOperation.Run(sim, arg1, arg2).Result;
}

看来 运行时间环境正在作为参数传递给操作。所以我查看了 QuantumSimulator class,然后查看了它的父项 SimulatorBase,其中包含有用的评论和定义。

//
// Summary:
//     A Base class for Simulators. It provides the infrastructure that makes it easy
//     for a Simulator to become an OperationFactory (so the execution of an Operation
//     can be tied to this simulator) and to manage the allocation of Qubits (via the
//     QubitManager).
public abstract class SimulatorBase : AbstractFactory<AbstractOperation>, IOperationFactory

我将其解释为任何实现 AbstractFactory<AbstractOperation> 的东西都可以作为参数传递给操作 - 从而将语言结构绑定到特定的 运行 环境。在实现真正的量子计算机时,可以使用 QuantumSimulator 作为示例 - 看起来它主要只是实现来自 Microsoft.Quantum.Primitive 命名空间的原始操作的具体版本。 (所有原始操作似乎都是抽象的 classes)。

我认为您可能必须具体实现每个原语才能适当地控制您机器上的量子位,但随后您可能能够使用 Q# 语言几乎开箱即用。

这对我来说是相当推测性的,但它可能是一个很好的起点。

编辑: Prelude 中需要修改的四个名称空间是 Microsoft.Quantum.Extensions.Bitwise

Microsoft.Quantum.Extensions.Convert

Microsoft.Quantum.Extensions.Math

Microsoft.Quantum.Extensions.RangeFunctions

Microsoft.Quantum.Primitive

根据 Microsoft QDK,Microsoft 采取的方法基于 协处理器方案 。所以我们可以放心地假设它与 GPU 或 FPGA 的工作方式非常相似:

  • 主程序运行在熟悉的.NET框架下的主处理器上;
  • 特定于协处理器的 子例程 被转换为特定于体系结构的指令,就像 it is done for GPU 一样,包装成任意 函数 ,然后上传到实体设备;
  • 然后像正常函数一样调用。

Q# 标准库consists of two essential parts: The prelude(特定于机器的操作和函数)和佳能(与设备无关的逻辑和包装器)。
因此,您的运行时将需要实现 Prelude 的类型和功能。

简单来说,是的。 Microsoft 开发 Q# 的确切目的是,当人们可以访问现实生活中的 Qubits 和 Quantum 计算机时,他们可以简单地开始使用 Q#,因为他们已经有在虚拟环境中使用它进行编码的经验。 至于如何做到这一点,我不知道,我建议最好的办法是给微软发邮件,他们会很乐意帮助你。

根据微软的说法:“然后可调用对象本身 运行 在目标机器上。这样的目标机器可以是实际的量子硬件,也可以是作为 QDK 的一部分可用的多个模拟器。”尽管该量子硬件必须具有一组使用 Q# 编写所需的内部函数和操作。