Vollständiger Status Simulator für das Quantum Development KitQuantum Development Kit Full State Simulator

Das Quantum Development Kit bietet einen vollständigen Quantum-Simulator ähnlich dem Liq $ UI | \rangle $ von Microsoft Research.The Quantum Development Kit provides a full state quantum simulator similar to LIQ$Ui|\rangle$ from Microsoft Research. Dieser Simulator kann zum Ausführen und Debuggen von in Q # geschriebenen Quantenalgorithmen auf dem Computer verwendet werden.This simulator can be used to execute and debug quantum algorithms written in Q# on your computer.

Dieser Quantum-Simulator wird über die QuantumSimulator-Klasse verfügbar gemacht.This quantum simulator is exposed via the QuantumSimulator class. Um den Simulator zu verwenden, erstellen Sie einfach eine Instanz dieser Klasse, und übergeben Sie Sie an die Run-Methode des Quantum-Vorgangs, den Sie zusammen mit den restlichen Parametern ausführen möchten:To use the simulator, simply create an instance of this class and pass it to the Run method of the quantum operation you want to execute along with the rest of the parameters:

    using (var sim = new QuantumSimulator())
    {
        var res = myOperation.Run(sim).Result;
        ///...
    }

IDisposableIDisposable

Die QuantumSimulator-Klasse implementiert IDisposable. Daher sollte die Dispose-Methode aufgerufen werden, sobald die Instanz des Simulators nicht mehr verwendet wird.The QuantumSimulator class implements IDisposable, thus the Dispose method should be called once the instance of the simulator is not used anymore. Die beste Möglichkeit hierfür ist das Einschließen des Simulators innerhalb einer using-Anweisung, wie im obigen Beispiel gezeigt.The best way to do this is to wrap the simulator within a using statement, as in the example above.

SeedSeed

Der QuantumSimulator verwendet einen Zufallszahlengenerator, um die Quantum-Zufälligkeit zu simulieren.The QuantumSimulator uses a random number generator to simulate quantum randomness. Zu Testzwecken ist es manchmal sinnvoll, deterministische Ergebnisse zu haben.For testing purposes, it is sometimes useful to have deterministic results. Dies kann erreicht werden, indem ein Ausgangswert für den Zufallszahlengenerator im Konstruktor der QuantumSimulatorüber den Parameter "randomNumberGeneratorSeed" bereitgestellt wird:This can be accomplished by providing a seed for the random number generator in the QuantumSimulator's constructor via the randomNumberGeneratorSeed parameter:

    using (var sim = new QuantumSimulator(randomNumberGeneratorSeed: 42))
    {
        var res = myOperationTest.Run(sim).Result;
        ///...
    }

ThreadsThreads

Der QuantumSimulator verwendet OpenMP , um die erforderliche lineare Algebra zu parallelisieren.The QuantumSimulator uses OpenMP to parallelize the linear algebra required. OpenMP verwendet standardmäßig alle verfügbaren Hardwarethreads, weshalb Programme mit wenigen Qubits häufig langsam ausgeführt werden, stellt die Koordination die tatsächliche Arbeit in den Schatten.By default OpenMP uses all available hardware threads, which means that programs with small numbers of qubits will often run slowly because the coordination required will dwarf the actual work. Dies kann korrigiert werden, indem die Umgebungsvariable OMP_NUM_THREADS auf eine kleine Zahl festgelegt wird.This can be fixed by setting the environment variable OMP_NUM_THREADS to a small number. Als grobe Faustregel gilt, dass 1 Thread für etwa 4 Qubits genügt und dann für jeden weiteren Qubit ein weiterer Thread benötigt wird. Dies hängt jedoch stark von Ihrem Algorithmus ab.As a very rough rule of thumb, 1 thread is good for up to about 4 qubits, and then an additional thread per qubit is good, although this is highly dependent on your algorithm.