在windows平台上,官方给的projectQ安装C++的Simulator库的办法有两个,要么是安装msvc(体积大且没多线程加速,因为msvc只支持OpenMP2.0),要么是装mingw编译器,后者可以支持正常的OpenMP,编译出来的C++库是是支持多线程的。显然装mingw更好,不过projectQ没说清楚具体怎么玩,只好自己查命令去编译C++库。下面是具体的过程(每台机器上提前装的库都有差别,不保证一定没问题):
1. 提前要装的软件
-
说明:mingw-w64是最新版的mingw编译器(还有个旧版的叫mingw32,只有32位版的,早就停止更新了),安装的时候可以选装32位的还是64位的,由于要用64位的Python,肯定装64位的(如果必须要用32位的Python,那就装32位的mingw,但是坑很多,最后会说)
装完之后,把安装目录下的bin文件夹比如
C:\MinGW\mingw64\bin
加到Path环境变量中。
然后把下载的vcruntime140.dll
放到mingw安装目录下的lib文件夹中,比如C:\MinGW\mingw64\lib
。可能需要代理才能装这个编译器,这有离线版的。
2. 开装projectQ!
右键管理员身份打开Anaconda Prompt(环境变量都加好了的话直接cmd也行)
-
输入命令:
pip install --global-option build_ext --global-option --compiler=mingw32 projectq
一般来说,一通各种包安装之后会开始编译C++库,然后会直接出个Error,说缺lmsvcr140 :
问题的原因是微软把这个库给移除了,导致编译程序找不着这个东西。这个时候之前下载的dll就要派上用场了,直接修改Anaconda安装目录下的
C:\Application\Anaconda3\Lib\distutils\cygwinccompiler.py
把87行改成这样(可能需要带管理员权限的编辑器) -
再跑一遍pip命令应该就能装好C++版的Simulator库了
3. 并行效果
-
在导入projectQ的库之前加上以下几行代码以启用多线程:
import os os.environ["OMP_NUM_THREADS"] = '8' os.environ["OMP_PROC_BIND"] = "spread"
线程数设置就看各自的电脑了。Linux貌似是用projectQ官方给的
export
命令,没用过就不多说了。 -
运行官方示例shor算法,记得把
high_level_gates
里面的BasicMathGate
置为False
,强制模拟器去分解模幂运算对应的酉门,然后就可以开始愉快的数框框了!实际上它不是一开始就用上多核并行,而是代码跑到途中才开始,所以可能要等一会儿才能看到CPU占用率上去。官方说的是可以用当代笔记本电脑在3分钟内分解
4028033
这么大的数,其中的前提是把high_level_gates
里面的BasicMathGate
置为True
,即不分解那个最耗时的模幂运算酉门,有点作弊的感觉,我实际这么跑了一下,发现程序根本就没用多核去跑,还是单线程运行,结果大概跑了10分钟才分解完,没搞清楚为什么会这样,群里哪位大佬知道的话劳烦告知。 其实开了并行感觉shor算法并没有变快多少,实实在在去分解个529(貌似只用了十几个qubit)这种数都慢得要死,有点失望QAQ。
4. 注意事项
我的Anaconda是最新版64位的(2019.03),不知道低版本的会不会有问题。而且我之前电脑上就有全套Visual Studio 2017,不知道这个会不会对安装结果有影响(理论上有mingw了就不需要msvc)。
32位的安装方法和以上步骤差不多(先把所有东西都换成32位的),但是更麻烦,32位的Anaconda的根目录下的
include
文件夹下的pyconfig.py
里面如果有#define hypot _hypot
这一行的话,要先注释掉再装projectQ,否则会报错。补一句,就算32位的装好了,实际跑比特数比较多的projectQ程序的时候也会有很大概率出MemoryError
,所以不建议装32位的。貌似Linux或Mac上装带并行的projectQ没这么多幺蛾子。
5. 最后
一开始我是装的32位的projectQ,看到一堆报错信息一脸懵逼,折腾了好久才把这些安装问题给解决,希望能对大家有所帮助。可能大家按这个安装教程弄到最后还是会出新的Bug,到时候欢迎大家跟帖交流!
没有第87行或许更好,可能直接就没这个错误了
... 查看全部