Quantum开发套件全状态模拟器
量子开发套件提供了一个完整的量子模拟器,类似于微软研究院的LIQUi|>
。 这个模拟器可以用来执行和调试你的计算机上用Q#编写的量子算法。
这个量子模拟器通过QuantumSimulator
类暴露出来。 要使用模拟器,只需创建该类的一个实例并将其传递给您想要执行的量子操作的Run
方法以及其余参数:
using (var sim = new QuantumSimulator())
{
var res = myOperation.Run(sim).Result;
///...
}
IDisposable的
QuantumSimulator
类实现了IDisposable
因此,一旦模拟器的实例不再使用,应该调用Dispose
方法。 这样做的最好方法是将模拟器封装在using
语句中,如上例所示。
种子
QuantumSimulator
使用随机数生成器来模拟量子随机性。 出于测试目的,确定性结果有时很有用。 这可以通过使用randomNumberGeneratorSeed
参数为QuantunSimulator
的构造函数中的随机数生成器提供种子来实现:
using (var sim = new QuantumSimulator(randomNumberGeneratorSeed: 42))
{
var res = myOperationTest.Run(sim).Result;
///...
}
主题
QuantumSimulator
使用OpenMP来并行化所需的线性代数。 默认情况下,OpenMP使用所有可用的硬件线程,这意味着具有少量量子位的程序通常会运行缓慢,因为所需的协调将会使实际工作变得更加困难。 这可以通过将环境变量OMP_NUM_THREADS
设置为一个小数来解决。 作为一个非常粗略的经验法则,1个线程适用于大约4个量子位,然后每个量子位的额外线程是好的,尽管这非常依赖于您的算法。