OpenQASM
Лицензия | Лицензия Апач 2.0 |
---|---|
Расширения имен файлов | .qasm |
Веб-сайт | openqasm |
Открытый квантовый язык ассемблера ( OpenQASM ; произносится как открытый казм) [1] ) — язык программирования, предназначенный для описания квантовых схем и алгоритмов для выполнения на квантовых компьютерах. Он спроектирован как промежуточное представление , которое может использоваться компиляторами более высокого уровня для взаимодействия с квантовым оборудованием и позволяет описывать широкий спектр квантовых операций, а также классическое управление потоком с прямой связью на основе результатов измерений.
Язык включает в себя механизм описания явного времени выполнения инструкций и позволяет прикреплять к вентилям низкоуровневые определения для таких задач, как калибровка. [1] OpenQASM не предназначен для классических вычислений общего назначения, а аппаратные реализации языка могут не поддерживать весь спектр манипуляций с данными, описанных в спецификации. Ожидается, что компиляторы OpenQASM будут поддерживать широкий спектр классических операций с константами времени компиляции, но поддержка этих операций со значениями времени выполнения может различаться в зависимости от реализации. [2]
Язык был впервые описан в статье, опубликованной в июле 2017 года. [1] а реализация эталонного исходного кода была выпущена как часть IBM Quantum Information Software Kit ( Qiskit ) для использования с их IBM Quantum Experience облачной платформой квантовых вычислений . [3] Этот язык имеет схожие качества с традиционными языками описания аппаратного обеспечения, такими как Verilog .
OpenQASM определяет свою версию в начале исходного файла как число, как в объявлении:
OPENQASM 3;
Уровень исходных опубликованных реализаций OpenQASM — OpenQASM 2.0. Версия 3.0 спецификации является актуальной и ее можно посмотреть в репозитории OpenQASM на GitHub .
Примеры [ править ]
Ниже приведен пример исходного кода OpenQASM из официальной библиотеки. Программа складывает два четырехбитных числа. [4]
/*
* quantum ripple-carry adder
* Cuccaro et al, quant-ph/0410184
*/
OPENQASM 3;
include "stdgates.inc";
gate majority a, b, c {
cx c, b;
cx c, a;
ccx a, b, c;
}
gate unmaj a, b, c {
ccx a, b, c;
cx c, a;
cx a, b;
}
qubit[1] cin;
qubit[4] a;
qubit[4] b;
qubit[1] cout;
bit[5] ans;
uint[4] a_in = 1; // a = 0001
uint[4] b_in = 15; // b = 1111
// initialize qubits
reset cin;
reset a;
reset b;
reset cout;
// set input states
for i in [0: 3] {
if(bool(a_in[i])) x a[i];
if(bool(b_in[i])) x b[i];
}
// add a to b, storing result in b
majority cin[0], b[0], a[0];
for i in [0: 2] { majority a[i], b[i + 1], a[i + 1]; }
cx a[3], cout[0];
for i in [2: -1: 0] { unmaj a[i],b[i+1],a[i+1]; }
unmaj cin[0], b[0], a[0];
measure b[0:3] -> ans[0:3];
measure cout[0] -> ans[4];
Ссылки [ править ]
- ^ Jump up to: Перейти обратно: а б с Кросс, Эндрю В.; епископ Лев С.; Смолин, Джон А.; Гамбетта, Джей М. (2017). «Открытый квантовый язык ассемблера». arXiv : 1707.03429 [ квант-ph ].
- ^ «Живая спецификация OpenQASM» . Проверено 26 декабря 2022 г.
- ^ qiskit-openqasm: спецификация OpenQASM , International Business Machines, 4 июля 2017 г. , дата обращения 6 июля 2017 г.
- ^ «openqasm/adder.qasm на мастере · openqasm/openqasm · GitHub» . Гитхаб . 29 января 2022 г.
Внешние ссылки [ править ]