3. 基于Quingo的首个量子程序提交¶
如果需要在云平台量子计算机上使用其他量子语言提交实验,思路如下:首先利用所选编程语言,在用户本地调用语言编译器,将线路编译/输出为QCIS语言,然后按照QCIS语言进行实验提交。
(云平台JupyterLab环境已经预制好多种语言环境并且都无需安装,如有其他需求,可以联系客服。)
3.1 编写Quingo量子程序¶
根据Quingo语法规则,编写Quingo的量子程序。
我们近期会与Quingo合作做一些调整适配,以便支持二维拓扑结构和比特编码等更新。(2023.7.14)
现阶段其直接编译结果的比特编号拓扑表达有问题,编译结果无法在现有二维比特芯片上运行。
In [1]:
Copied!
#该部分代码借鉴于Quingo的示例代码。
Quingo_code='''
import std_qcis
operation CNOT(q1: qubit, q2: qubit) : unit {
Y2M(q2);
CZ(q1, q2);
Y2P(q2);
}
operation bell_state() : unit {
using(q0: qubit, q1: qubit) {
H(q0);
CNOT(q0, q1);
measure(q0);
measure(q1);
}
}
'''
f = open("./kernel.qu",'w')
f.write(Quingo_code)
f.close()
#该部分代码借鉴于Quingo的示例代码。
Quingo_code='''
import std_qcis
operation CNOT(q1: qubit, q2: qubit) : unit {
Y2M(q2);
CZ(q1, q2);
Y2P(q2);
}
operation bell_state() : unit {
using(q0: qubit, q1: qubit) {
H(q0);
CNOT(q0, q1);
measure(q0);
measure(q1);
}
}
'''
f = open("./kernel.qu",'w')
f.write(Quingo_code)
f.close()
3.2 编译程序,输出QCIS线路¶
运行host.py对Quingo程序进行编译。
Quingo源程序默认保存在与host.py同目录下的kernel.qu程序。
如果不是JupyterLab环境,可以使用以下命令进行编译:
python host.py
In [2]:
Copied!
from quingo import quingo_interface as qi
qi.set_compiler('mlir')
#设置Quingo编译器
if qi.connect_backend('pyqcisim_quantumsim') is False:
exit(-1)
#连接编译器后端
qi.call_quingo("kernel.qu", "bell_state")
#调用编译服务,编译成功,输出True,结果在当前目录下的build目录内,"线路名.qcis"文件。
#编译不成功,请根据实际报错信息进行程序调整。
#以下为仿真器结果显示
#res = qi.read_result()
#print(res)
#读取并显示仿真器结果
from quingo import quingo_interface as qi
qi.set_compiler('mlir')
#设置Quingo编译器
if qi.connect_backend('pyqcisim_quantumsim') is False:
exit(-1)
#连接编译器后端
qi.call_quingo("kernel.qu", "bell_state")
#调用编译服务,编译成功,输出True,结果在当前目录下的build目录内,"线路名.qcis"文件。
#编译不成功,请根据实际报错信息进行程序调整。
#以下为仿真器结果显示
#res = qi.read_result()
#print(res)
#读取并显示仿真器结果
connecting pyqcisim_quantumsim... num_qubits: 2
Out[2]:
True
编译成功后,QCIS指令集被输出在源程序所在目录下的build目录,名字为:线路名.qcis
读取Quingo编译输出的QCIS文件
In [3]:
Copied!
f = open("./build/bell_state.qcis",'r')
quingo_qcis=f.read()#确保读取长度超过文件总长度。
f.close()
print(quingo_qcis)
f = open("./build/bell_state.qcis",'r')
quingo_qcis=f.read()#确保读取长度超过文件总长度。
f.close()
print(quingo_qcis)
H Q1 Y2M Q2 CZ Q1 Q2 Y2P Q2 M Q1 M Q2
3.3 将程序提交到量子计算云平台(同QCIS流程)¶
将编译出的QCIS线路提交到量子计算云平台。
In [4]:
Copied!
from ezQgd import *
account = Account(login_key='2p1adksE+s6ib6uJa5/P/G3sc2O9kejgGBjgIukfGmY=', machine_name='gd_qc1')
#设置用户SDK密钥,选择量子计算机,并创建实例,运行成功后,提示登录成功。
query_id_quingo = account.submit_job(circuit=quingo_qcis, version="Bell_state_quingo")
from ezQgd import *
account = Account(login_key='2p1adksE+s6ib6uJa5/P/G3sc2O9kejgGBjgIukfGmY=', machine_name='gd_qc1')
#设置用户SDK密钥,选择量子计算机,并创建实例,运行成功后,提示登录成功。
query_id_quingo = account.submit_job(circuit=quingo_qcis, version="Bell_state_quingo")
运行实验失败:请检查qcis指令,该指令存在错误-在QCIS指令中Y2M Q2输入错误,该量子计算机中不可用的比特为:Q65,Q2,Q35,Q5,Q17,Q59,
等待代码在量子计算机上完成,并读取实验结果,处理保存实验结果。
In [5]:
Copied!
if query_id_quingo:
result=account.query_experiment(query_id_quingo, max_wait_time=360000)
#最大等待时间单位为秒,不传递时默认为30秒。因量子程序的执行会有排队的情况,而量子计算机本身有自动校准的时间,如果想跑全自动的程序,等待时间最好大于两者。
print(result)
#后继数据应用实现。
else :
print('查询id为空,实验提交或运行不成功,需要重新提交实验')
if query_id_quingo:
result=account.query_experiment(query_id_quingo, max_wait_time=360000)
#最大等待时间单位为秒,不传递时默认为30秒。因量子程序的执行会有排队的情况,而量子计算机本身有自动校准的时间,如果想跑全自动的程序,等待时间最好大于两者。
print(result)
#后继数据应用实现。
else :
print('查询id为空,实验提交或运行不成功,需要重新提交实验')
查询id为空,实验提交或运行不成功,需要重新提交实验