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



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

在你因为"还没有可用的量子计算机"而将其投到涅槃之前:我是一名物理学家,我们的团队能够在现实世界的量子比特上做真正的门。我也有一些编程背景(主要是C++)。

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

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

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

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

运行时环境似乎作为参数传递给操作。所以我查看了QuantumSimulator类,然后查看了它的父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命名空间实现原始操作的具体版本。(所有基元操作似乎都是抽象类)。

我认为你可能必须具体实现每个基元才能适当地控制计算机上的量子位,但这样你几乎可以开箱即用地使用 Q# 语言。

就我而言,这是非常投机的,但这可能是一个很好的起点。

编辑: Prelude 中需要修改的四个命名空间是 Microsoft.量子扩展.按位

Microsoft.量子.扩展.转换

Microsoft.量子扩展.数学

Microsoft.量子扩展.范围函数

Microsoft.量子.基元

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

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

Q# 标准库由两个基本部分组成:前奏(特定于计算机的操作和函数)和佳能(与设备无关的逻辑和包装器)。
因此,您的运行时将需要实现 Prelude 的类型和函数。

简单来说,是的。Microsoft制作 Q# 的确切目的是,当人们可以访问现实生活中的量子比特和量子计算机时,他们可以简单地开始使用 Q#,因为他们已经在虚拟环境中拥有编码的经验。 至于你怎么能做到这一点,我不知道,我建议最好的办法是给Microsoft自己发电子邮件,他们会很乐意帮助你。

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

相关内容

最新更新