编译与运行样例
环境准备
aclnn算子接口的编译依赖开发套软件包Ascend-cann-toolkit与算子二进制软件包Ascend-cann-kernels,请确保已安装。
编译前准备
本章以开发和运行环境合设场景为例,即带AI处理器的机器既作为开发环境又作为运行环境。该场景下,代码开发和代码运行在同一台机器上。这里以Add算子为例,其他算子的调用逻辑、流程、编译脚本与Add算子大致一样,请根据实际情况自行修改算子API调用脚本(*.cpp)和编译脚本(CMakeLists)。
示例代码
已知Add算子实现了张量加法运算,计算公式为:y=x1+αx2。您可以从aclnnAdd&aclnnInplaceAdd中“调用示例”获取示例代码,并将代码文件命名为“test_add.cpp”。
CMakeLists文件
Camke文件示例如下,请根据实际情况修改:
# CMake lowest version requirement cmake_minimum_required(VERSION 3.14) # 设置工程名 project(ACLNN_EXAMPLE) # Compile options add_compile_options(-std=c++11) # 设置编译选项 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "./bin") set(CMAKE_CXX_FLAGS_DEBUG "-fPIC -O0 -g -Wall") set(CMAKE_CXX_FLAGS_RELEASE "-fPIC -O2 -Wall") # 设置可执行文件名(如opapi_test),并指定待运行算子文件*.cpp所在目录 add_executable(opapi_test test_add.cpp) # 设置ASCEND_PATH(CANN软件包目录,请根据实际路径修改)和INCLUDE_BASE_DIR(头文件目录) if(NOT "$ENV{ASCEND_CUSTOM_PATH}" STREQUAL "") set(ASCEND_PATH $ENV{ASCEND_CUSTOM_PATH}) else() set(ASCEND_PATH "/usr/local/Ascend/ascend-toolkit/latest") endif() set(INCLUDE_BASE_DIR "${ASCEND_PATH}/include") include_directories( ${INCLUDE_BASE_DIR} ${INCLUDE_BASE_DIR}/aclnn ) # 设置链接的库文件路径 # arch表示操作系统结构,os表示操作系统 target_link_libraries(opapi_test PRIVATE ${ASCEND_PATH}/${arch-os}/devlib/libascendcl.so ${ASCEND_PATH}/${arch-os}/devlib/libnnopbase.so ${ASCEND_PATH}/lib64/libopapi.so) # 可执行文件在CMakeLists文件所在目录的bin目录下 install(TARGETS opapi_test DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
编译与运行
提前准备好算子的调用代码(*.cpp)和编译脚本(CMakeLists.txt)。
配置环境变量。
安装CANN软件后,使用CANN运行用户(如HwHiAiUser)登录环境,执行如下命令设置环境变量。其中${install_path}为CANN软件安装后文件存储路径,请根据实际情况替换该路径。
source ${install_path}/set_env.sh
编译并运行。
进入CMakeLists.txt所在目录,执行如下命令,新建build目录存放生成的编译文件。
mkdir -p build
进入build目录,执行cmake命令编译,再执行make命令生成可执行文件。
cd build cmake ../ -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE make
编译成功后,会在build目录的bin文件夹下生成opapi_test可执行文件。
进入bin目录,运行可执行文件opapi_test。
cd bin ./opapi_test
以Add算子的运行结果为例,运行后的结果示例如下:
result[0] is: 1.200000 result[1] is: 2.200000 result[2] is: 3.200000 result[3] is: 5.400000 result[4] is: 6.400000 result[5] is: 7.400000 result[6] is: 9.600000 result[7] is: 10.600000