下载、编译、安装和使用

下载QPanda-2

您可以通过以下途径获取QPanda2:

GitHub

  1. 如果您已经在系统中安装了git, 您可以通过git来获取QPanda2:
  • 选择一个保存QPanda2的文件夹,然后在文件夹内单击 鼠标右键 -Git Bash Here
_images/GitBashHere1.jpg
  • 在弹出的窗口中输入以下命令,再按下 Enter 键,然后静待下载完成即可:
git clone https://github.com/OriginQ/QPanda-2.git
_images/GitBashHere3.jpg

2.当然了,对于一些未安装git的小伙伴来说,也可以直接通过浏览器去下载QPanda-2, 具体的操作步骤如下:

_images/QPanda_github.jpg
  • 点击 Code 看到如下界面:
_images/Code_Clone.jpg
  • 然后点击 Download ZIP, 就会完成QPanda2的下载。
_images/Download.jpg

Gitee

  1. GitHub ,如果在您的系统上已经安装了git,您只需要将输入变成以下命令即可:
git clone https://gitee.com/OriginQ/QPanda-2.git
_images/gitee.jpg
  1. 直接通过浏览器下载QPanda-2, 具体的操作步骤与 GitHub 类似。

在浏览器中输入 https://gitee.com/OriginQ/QPanda-2?_from=gitee_search ,打开后,依次单击 克隆/下载 - 下载ZIP 即可开始下载QPanda2。

_images/gitee1.jpg

编译和安装

在编译QPanda2之前,可以先了解一下QPanda2的可配置项:

  1. FIND_CUDA : 查询系统中是否有cuda库,如果有就会将其编译进去, 在做量子计算时可以选择GPU作为计算后端
  2. USE_CHEMIQ : 化学模拟库
  3. USE_PYQPANDA : 编译出供python使用的pyqpanda库

默认情况下,上述的配置项都是关闭的,如果有需要,可以在编译时选择打开

注解

如需使用本源量子云服务,请在安装QPanda之前下载安装 curl库

Windows

在Windows平台下,QPanda-2推荐使用Visual Studio编译、安装。

Visual Studio

编译

这里以Visual Studio 2017为例,使用Visual Studio 2017 编译QPanda-2,只需要安装Visual Studio 2017, 并需要在组件中安装CMake组件。安装完成之后,用Visual Studio 2017打开QPanda-2文件夹。

首先,要选择x64-Release的模式下编译,按下面的提示选择:

_images/CMakeRelease.png

然后, 选择更改cmake设置,查看有没有需要修改的配置项,如下:

_images/CMakeSetting.png

进入cmake设置后可以看到,在默认情况下,FIND_CUDAUSE_CHEMIQUSE_PYQPANDA 都是关闭的,如果有需要可以将对应的选项中的 OFF 修改为 ON

_images/CMakeOptional.png

然后,点击 CMAKE选项中的 全部生成

_images/BuildAll.png

可以看到:

_images/CMakeCompiling.png

等待一会,就会完成编译。

安装

在QPanda-2编译完成后,用户可以安装QPanda-2,Visual Studio 2017的安装方式很简单,只需要在cmake菜单中选择安装即可。

_images/CMakeInstall.png
安装

在QPanda-2编译完成后,用户可以安装QPanda-2,安装命令如下:

mingw32-make install
_images/powershell3.jpg

Linux 和 MacOS

环境要求

  • gcc/clang/(其它C++编译器):支持C++14标准以及OpenMP
  • CMake 3.0 以上
  • pkg-config工具(Linux,必须。Ubuntu下使用 sudo apt-get install pkg-config 安装,CentOS下需要下载源码编译)
  • UUID库(Linux,必须。Ubuntu下使用 sudo apt-get install uuid-dev 安装,CentOS下使用yum install libuuid-devel安装)
  • Python 3.5 以上 (pyQPanda,可选)
  • CURL (量子云连接功能,可选)
  • MPI (在集群上运行量子虚拟机,可选)
  • CUDA 9 以上 (在GPU上运行量子虚拟机,可选)

编译

  1. 进入QPanda-2根目录
  2. 输入以下命令:
mkdir -p build
cd build
cmake -DFIND_CUDA=OFF -DUSE_CHEMIQ=OFF -DUSE_PYQPANDA=OFF ..
make
_images/compile11.png _images/compile12.png

如果有需求,用户通过命令修改QPanda-2的安装路径,配置方法如下所示:

mkdir -p build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DFIND_CUDA=OFF -DUSE_CHEMIQ=OFF -DUSE_PYQPANDA=OFF ..
make

也可以根据需求将可配置项设置为 ON

_images/compile21.png _images/compile22.png

安装

在Linux和MacOS下安装命令QPanda-2,命令是一样的,安装命令如下:

sudo make install
_images/install.png

注解

如果想使用pyqpanda也可以通过 pip install pyqpanda 命令直接下载我们发布的库,可以避免由于系统中的环境配置有问题导致pyqpanda编译出错的问题。

本文档中QPanda2安装目录:

  • Windows下为:C:\QPanda2\
  • Linux下为:/usr/local
  • MacOS下为:/usr/local

使用

我们接下来通过一个示例介绍QPanda-2的使用,下面的例子可以在量子计算机中构建量子纠缠态(|00>+|11>),对其进行测量,重复制备1000次。 预期的结果是约有50%的概率使测量结果分别在00或11上。

#include "QPanda.h"
USING_QPANDA

int main()
{
    // 初始化量子虚拟机
    init(QMachineType::CPU);

    // 申请量子比特以及经典寄存器
    auto q = qAllocMany(2);
    auto c = cAllocMany(2);

    // 构建量子程序
    QProg prog;
    prog << H(q[0])
        << CNOT(q[0],q[1])
        << MeasureAll(q, c);

    // 量子程序运行1000次,并返回测量结果
    auto results = runWithConfiguration(prog, c, 1000);

    // 打印量子态在量子程序多次运行结果中出现的次数
    for (auto &val: results)
    {
        std::cout << val.first << ", " << val.second << std::endl;
    }

    // 释放量子虚拟机
    finalize();

    return 0;
}

计算结果如下所示:

00 : 493
11 : 507

在linux下自己创建文件运行需要把QPandaConfig.json拷贝到运行程序路径下 示例程序的编译方式与编译QPanda库的方式基本类似。我们在QPanda-2的github库中添加了 Template 文件夹,用于展示各个平台的使用案例。

下面将简单介绍一下QPanda2在Windows、linux、MacOS下的使用教程:

Windows

Visual Studio

visual studio 2017 下链接QPanda库需要配置QPanda的头文件地址和QPanda库的地址,下面以GateTypeValidator项目为例:

  1. 选择中GateTypeValidator项目,右键选中属性。
_images/Properties.png
  1. 在设置visual studio 2017项目属性时,一定要注意配置管理器中的Release和Debug、及x64要与项目所选的相同(QPanda2不支持x86平台)。
_images/ConfigurationManager.png
  1. 设置附加包含目录,选中C/C++ -> 所有选项 -> 附加包含目录,设置两个路径:${QPanda的安装路径}/include/qpanda2;${QPanda的安装路径}/include/qpanda2/ThirdParty
_images/IncludePath.png

如果使用的QPanda2库是包含GPU计算部分的时候还需要添加cuda头文件的安装路径,设置的路径为:${QPanda的安装路径}/include/qpanda2;${QPanda的安装路径}/include/qpanda2/ThirdParty;${CUDA库的路径}/include

_images/CudaIncludePath.png
  1. 设置运行库, 选中C/C++ -> 所有选项 -> 运行库,设置为MT
_images/MT.png
  1. 设置库目录 ,选中链接器 -> 常规 -> 附加库目录,只需要设置lib路径卫:${QPanda的安装路径}/lib
_images/LibPath.png

如果使用的QPanda2库是包含GPU计算部分的时候还需要添加cuda库的安装路径,设置的路径为:${QPanda的安装路径}/lib;${CUDA库的路径}/lib/x64

_images/CudaLibPath.png
  1. 设置附加依赖项,选中链接器 -> 输入 -> 附加依赖项,设置以下依赖库:antlr4.lib;Components.lib;QAlg.lib;QPanda2.lib
_images/LoadLibs.png

包含GPU计算方式还需要添加下面两个库: GPUQGates.lib;cudart.lib

_images/CudaLoadLibs.png
  1. 设置符合模式,选中C/C++- > 语言 -> 符合模式,设置为否
_images/LanguageModel.png

注解

按照上述操作完成后,如若报错:LNK2001,可尝试以下操作:

选中C/C++- > 所有选项 -> 预处理器定义,删除 _DEBUG;

_images/errorhandling.jpg

CMake

可以使用CMake的方式调用QPanda2库编译生成可执行文件。由于VS的版本比较多,不同的版本使用CMake会有一些差距,这里就以Virsual Studio 2017为例

  1. 首先打开VS,选中 文件->打开->CMake
_images/vs_cmake.png
  1. 然后选择QPanda-example文件夹中的示例下的CMakeLists.txt点击,就会打开一个示例
_images/CMakelist.png
  1. 再选择CMakeSetting.json文件,修改-DQPANDA_INSTALL_DIR={QPanda2安装目录}
_images/cmake_setting.png
  1. 修改后,ctrl+s,选择CMAKE->全部生成
_images/cmake_build_all.png
  1. 点击图中的下拉小箭头,选择可执行程序
_images/cmake_exec.png

上面介绍了使用cmake打开我们构建好的工程,有兴趣的也可以深入的学习使用cmake构建项目。

vs下的CMakelists配置:

cmake_minimum_required(VERSION 3.1)
project(testQPanda)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${QPANDA_INSTALL_DIR}/lib/cmake")

set(CMAKE_CXX_STANDARD 14)
if (MSVC)
    list(APPEND EXTRA_LDFLAGS
        -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
        -D_CRT_SECURE_NO_WARNINGS
        /bigobj)

    if (NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
        foreach (flag
            CMAKE_C_FLAGS
            CMAKE_C_FLAGS_DEBUG
            CMAKE_C_FLAGS_RELEASE
            CMAKE_C_FLAGS_MINSIZEREL
            CMAKE_C_FLAGS_RELWITHDEBINFO
            CMAKE_CXX_FLAGS
            CMAKE_CXX_FLAGS_DEBUG
            CMAKE_CXX_FLAGS_RELEASE
            CMAKE_CXX_FLAGS_MINSIZEREL
            CMAKE_CXX_FLAGS_RELWITHDEBINFO)

            if (${flag} MATCHES "/MDd")
                string(REGEX REPLACE "/MDd" "/MT" ${flag} "${${flag}}")
            endif()

            if (${flag} MATCHES "/MD")
                string(REGEX REPLACE "/MD" "/MT" ${flag} "${${flag}}")
            endif()

            if (${flag} MATCHES "/W3")
                string(REGEX REPLACE "/W3" "/W0" ${flag} "${${flag}}")
            endif()
        endforeach()
    endif()
endif()

set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

find_package(QPANDA REQUIRED)
include_directories(${QPANDA_INCLUDE_DIR})

add_executable(${PROJECT_NAME} GateTypeValidator.cpp)
target_link_libraries(${PROJECT_NAME} ${QPANDA_LIBRARIES})

Linux

gcc

在Linux环境下,用户也可以使用g++编译test.cpp,编译命令如下所示:

g++ test.cpp -std=c++14 -fopenmp -I{QPanda安装路径}/include/qpanda2/ -I{QPanda安装路径}/include/qpanda2/ThirdParty/ -L{QPanda安装路径}/lib/ -lComponents -lQAlg  -lQPanda2 -lantlr4 -o test
_images/gcc.png

如果宿主机上安装了libcurl,则编译命令如下所示:

g++ test.cpp -std=c++14 -fopenmp -I{QPanda安装路径}/include/qpanda2/ -I{QPanda安装路径}/include/qpanda2/ThirdParty/ -L{QPanda安装路径}/lib/ -lComponents -lQAlg  -lQPanda2 -lantlr4 -lcurl -o test
_images/gcc_libcurl.png

如果安装的是可以含有CUDA的库,则编译命令如下:

g++ test.cpp -std=c++14 -fopenmp  -I{QPanda安装路径}/include/qpanda2/ -I{QPanda安装路径}/include/qpanda2/ThirdParty/ -L{QPanda安装路径}/lib/ -lComponents -lQAlg  -lQPanda2 -lantlr4  -lGPUQGates -L{cuda安装目录}/lib/  -lcudart  -o test
_images/gcc_CUDA.jpg

注解

如遇以下错误:

_images/linux_cuda_error.png

可以使用如下方法解决(样例CUDA版本为11.2):

sudo ldconfig /usr/local/cuda-11.2/lib64

CMake

在Linux环境下,用户也可以使用CMake编译test.cpp,编译命令如下所示(以QPanda-example文件夹中的GateTypeValidator示例):

cd GateTypeValidator
mkdir -p build
cd build
cmake -DQPANDA_INSTALL_DIR=/usr/local/ ..   #本文档样例QPanda的路径是/usr/local/
make
_images/cmake.png

运行编译后文件:

_images/cmake2.png

Linux下的CMakelists配置:

#指定 cmake 的最小版本
cmake_minimum_required(VERSION 3.1)
#设置项目名称
project(testQPanda)
# 定义自己的 cmake 模块所在的路径
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${QPANDA_INSTALL_DIR}/lib/cmake")
#指定C++版本
set(CMAKE_CXX_STANDARD 14)

#设置 C++ 编译选项
add_definitions("-w -DGTEST_USE_OWN_TR1_TUPLE=1")
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3")
add_compile_options(-fpermissive)

#重新定义目标链接库文件的存放位置
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
#重新定义目标二进制可执行文件的存放位置
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
#引入外部依赖包
find_package(QPANDA REQUIRED)
include_directories(${QPANDA_INCLUDE_DIR})
# 生成可执行文件
add_executable(${PROJECT_NAME} test.cpp)
target_link_libraries(${PROJECT_NAME} ${QPANDA_LIBRARIES})

MacOS

Clang

在MacOS环境下,用户可以使用Clang编译test.cpp,编译命令如下所示:

clang++ test.cpp -std=c++14 -fopenmp -I{QPanda安装路径}/include/qpanda2/ -I{QPanda安装路径}/include/qpanda2/ThirdParty/ -L{QPanda安装路径}/lib/ -lQPanda2 -lComponents -lantlr4 -o test

含有CUDA的编译指令

clang++ test.cpp -std=c++14 -fopenmp -I{QPanda安装路径}/include/qpanda2/ -I{QPanda安装路径}/include/qpanda2/ThirdParty/ -L{QPanda安装路径}/lib/ -lQPanda2 -lComponents -lantlr4 -lGPUQGates -L{CUDA安装路径}/lib/  -lcudart -o test
_images/clang.jpg _images/clang_result.jpg

CMake

在MacOS环境下,用户也可以使用CMake编译test.cpp,编译命令如下所示:

cd test
mkdir -p build
cd build
cmake -DQPANDA_INSTALL_DIR=/usr/local/ ..
make

本文档样例QPanda的路径是/usr/local/

_images/mac_cmake.jpg

运行编译后文件:

_images/cmake_result.jpg

MacOS下的CMakelists配置:

#指定 cmake 的最小版本
cmake_minimum_required(VERSION 3.1)
#设置项目名称
project(testQPanda)
# 定义自己的 cmake 模块所在的路径
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${QPANDA_INSTALL_DIR}/lib/cmake")
#指定C++版本
set(CMAKE_CXX_STANDARD 14)

#设置 C++ 编译选项
add_definitions("-w -DGTEST_USE_OWN_TR1_TUPLE=1")
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3")
add_compile_options(-fpermissive)

#重新定义目标链接库文件的存放位置
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
#重新定义目标二进制可执行文件的存放位置
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
#引入外部依赖包
find_package(QPANDA REQUIRED)
include_directories(${QPANDA_INCLUDE_DIR})
# 生成可执行文件
add_executable(${PROJECT_NAME} test.cpp)
target_link_libraries(${PROJECT_NAME} ${QPANDA_LIBRARIES})

注解

其他样例请参照我们的示例项目 QPanda-Example