Можно ли использовать Q# для управления моим квантовым компьютером?
Вкратце: если у меня есть доступ к настоящему квантовому компьютеру, есть ли возможность управлять им с помощью Q#?
Прежде чем вы сведете это в нирвану, потому что "квантового компьютера еще нет": я физик, и наша группа способна сделать реальные врата на кубитах реального мира. У меня также есть опыт программирования (в основном C++).
Итак, ради этого вопроса давайте представим, что у кого-то есть доступ к устройству реального мира, которое способно выполнять определенные квантовые операции над множеством кубитов. Очевидно, что число кубитов может быть ограничено, и поэтому могут быть возможные операции. Скажем также, что кто-то достаточно опытен с Q # и, если необходимо, с C#. Можно ли "перенаправить" вычисления со встроенного симулятора на какое-то реальное устройство? Или нужно в основном переписать всю библиотеку Q#? Есть ли способ определить мой собственный QuantumSimulator
и как бы я начал это делать?
4 ответа
Я немного покопался в браузере объектов.
Заглушки C#, которые вы используете для вызова Q# 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.Quantum.Extensions.Bitwise
Microsoft.Quantum.Extensions.Convert
Microsoft.Quantum.Extensions.Math
Согласно Microsoft QDK, подход Microsoft основан на схеме сопроцессора. Таким образом, мы можем с уверенностью предположить, что это очень похоже на работу GPU или FPGA:
- основная программа работает на главном процессоре в хорошо знакомой среде.NET;
- специфичные для сопроцессора подпрограммы преобразуются в специфические для архитектуры инструкции точно так же, как это делается для графического процессора, упаковываются в произвольные функции и затем загружаются на физическое устройство;
- и затем назвали, как будто они были нормальными функциями.
Стандартная библиотека Q# состоит из двух основных частей: Prelude (машинные операции и функции) и Canon (логика и обертки, не зависящие от устройства).
Таким образом, ваша среда выполнения должна реализовать типы и функции Prelude.
Проще говоря, да. Microsoft сделала Q# именно для того, чтобы, когда люди получили доступ к реальным компьютерам Qubits и Quantum, они могли просто начать использовать Q#, поскольку у них уже есть опыт программирования с ним в виртуальных средах. Что касается того, как вы можете это сделать, я понятия не имею, я предлагаю лучшее, что можно сделать, - это отправить по электронной почте самим Microsoft, они будут очень рады помочь вам.
Согласно Microsoft: «Сам вызываемый объект затем запускается на целевой машине. Такие целевые машины могут быть реальным квантовым оборудованием или несколькими симуляторами, доступными как часть QDK». Хотя это квантовое оборудование должно иметь набор внутренних функций и операций, которые необходимы для записи с помощью Q#.