编译及运行应用(昇腾910 AI处理器)
- 模型转换。
- 以运行用户登录开发环境。
- 参考《CANN 开发辅助工具指南》中的“ATC工具使用指南”章节,准备环境,包括获取工具、设置环境变量。
- 将矩阵乘算子的算子描述信息(*.json文件)编译成适配昇腾AI处理器的离线模型(*.om文件),运行矩阵乘算子时使用。
切换到gemm样例目录,执行如下命令:
atc --singleop=run/out/test_data/config/gemm.json --soc_version=${soc_version} --output=run/out/op_models
- --soc_version:昇腾AI处理器的版本,请根据实际情况替换。
可从ATC安装路径的“atc/data/platform_config”目录下查看昇腾AI处理器的版本,对应“*.ini”文件的名字(不带.ini后缀)即为soc_version。
- --output:生成的om文件必须放在“run/out/op_models”目录下。
关于各参数的详细解释,请参见《CANN 开发辅助工具指南》中的“ATC工具使用指南”章节。
- --soc_version:昇腾AI处理器的版本,请根据实际情况替换。
- 以运行用户登录开发环境,并切换到gemm样例所在的目录。
- 编译代码。
- 设置环境变量,编译脚本src/CMakeLists.txt通过环境变量所设置的头文件、库文件的路径来编译代码。
如下为设置环境变量的示例,请将$HOME/Ascend/ascend-toolkit/latest替换为FwkACLlib安装包的实际安装路径。
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest export NPU_HOST_LIB=$HOME/Ascend/ascend-toolkit/latest/fwkacllib/lib64/stub
设置环境变量后,还需修改src/CMakeLists.txt文件中的如下配置段,将“acllib”修改为“fwkacllib”。
# Header path include_directories( ${INC_PATH}/acllib/include/ ../inc/ )
使用“$HOME/Ascend/ascend-toolkit/latest/fwkacllib/lib64/stub”目录下的*.so库,是为了编译基于AscendCL接口的代码逻辑时,不依赖其它组件(例如Driver)的任何*.so库。
编译通过后,在Host上运行应用时,通过配置环境变量,应用会链接到Host上“$HOME/Ascend/nnae/latest/fwkacllib/lib64”目录下的*.so库,运行时会自动链接到依赖其它组件的*.so库。
- 在样例目录下,创建目录用于存放编译文件,例如,本文中,创建的目录为“build/intermediates/host”。
mkdir -p build/intermediates/host
- 切换到“build/intermediates/host”目录,执行cmake生成编译文件。
“../../../src”表示CMakeLists.txt文件所在的目录,请根据实际目录层级修改。
基于运行环境的操作系统架构,配置的环境变量不同:
- 当开发环境与运行环境操作系统架构相同时,执行如下命令编译。
cd build/intermediates/host cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE
- 当开发环境与运行环境操作系统架构不同时,执行如下命令交叉编译。例如,当开发环境为X86架构,运行环境为AArch64架构时,执行以下命令进行交叉编译。
cd build/intermediates/host cmake ../../../src -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SKIP_RPATH=TRUE
- 当开发环境与运行环境操作系统架构相同时,执行如下命令编译。
- 执行make命令,生成的可执行文件execute_gemm_op在“样例目录/run/out”目录下。
make
- 设置环境变量,编译脚本src/CMakeLists.txt通过环境变量所设置的头文件、库文件的路径来编译代码。
- 准备测试数据。
- 以运行用户登录开发环境。
- 切换到“gemm样例目录/run/out/test_data/data”目录下,执行generate_data.py脚本,在“run/out/test_data/data”目录下生成矩阵A的数据文件matrix_a.bin、矩阵B的数据文件matrix_b.bin、矩阵C的数据文件matrix_c.bin。
python3.7.5 generate_data.py
“run/out/test_data/data”目录下生成的output.bin文件中的数据是generate_data.py脚本中直接通过公式计算出来的矩阵乘结果,不作为该样例的输入数据。
- 运行应用。
- 以运行用户将开发环境的gemm样例目录及目录下的文件上传到运行环境(Host),例如“$HOME/acl_execute_gemm”。
- 以运行用户登录运行环境(Host)。
- 设置环境变量。如下为设置环境变量的示例,请根据实际安装情况替换路径。
export LD_LIBRARY_PATH=$HOME/Ascend/nnae/latest/fwkacllib/lib64
- 切换到可执行文件execute_gemm_op所在的目录,例如“acl_execute_gemm/run/out”,给该目录下的execute_gemm_op文件加执行权限。
chmod +x execute_gemm_op
- 切换到可执行文件execute_gemm_op所在的目录,例如“acl_execute_gemm/run/out”,运行可执行文件。
./execute_gemm_op
执行成功后,会直接在终端窗口显示矩阵A的数据、矩阵B的数据以及矩阵乘的结果,同时在“result_files”目录下,生成存放矩阵乘结果的matrix_c.bin文件。