SetCompileConfig
函数功能
设置FunctionPp的json配置文件名字和路径,该配置文件用于将FunctionPp和UDF进行映射。
返回设置好的FunctionPp。
函数原型
FunctionPp &SetCompileConfig(const char_t *json_file_path)
参数说明
参数名 |
输入/输出 |
描述 |
---|---|---|
json_file_path |
输入 |
FunctionPp的json配置文件路径和名字。 FunctionPp的json配置文件用于UDF的描述和编译。 示例如下,参数解释请参考表1。 {"func_list":[{"func_name":"Add", "inputs_index":[1,0], "outputs_index":[0]}],"input_num":2,"output_num":1,"target_bin":"libadd.so","workspace":"./","cmakelist_path":"CMakeLists.txt","compiler", "./cpu_compile.json","running_resources_info":[{"type":"cpu","num":2},{"type":"memory","num":100}],"heavy_load":false} |
配置项 |
可选/必选 |
描述 |
---|---|---|
workspace |
必选 |
值为字符串,UDF的工作空间路径。 |
target_bin |
必选 |
值为字符串,UDF工程编译出来的so名字,为防止被非法篡改,该字符串需要以lib***.so来命名,合法的字符包含大小写字母、数字、下划线和中划线。 |
input_num |
必选 |
值为数字,表示UDF的输入个数,即FunctionPp的输入个数。 |
output_num |
必选 |
值为数字,表示UDF的输出个数。即FunctionPp的输出个数。 |
func_list |
必选 |
值为list,list的元素为单个function的描述,当前只支持一个function。 |
func_list.func_name |
必选 |
值为字符串,函数名称,要和UDF里定义的function名称一致。多function场景下,func_name不允许重复。 |
func_list.inputs_index |
可选 |
值为list,list元素为数字,表示该function取FunctionPp的哪些输入,单function情况下当前无效;多function情况下该字段必选。且多个处理函数input index不共享,不能重复。 |
func_list.outputs_index |
可选 |
值为list,list元素为数字,表示该function对应FunctionPp的哪些输出,单function情况下当前无效。多function情况下output index可共享。 |
cmakelist_path |
可选 |
值为字符串,源码编译的CMakeLists文件相对于workspace的路径,如果未指定,则取workspace下面的默认CMakeLists文件。 CMakeLists文件的详细信息请参考CMakeLists文件。 |
compiler |
可选 |
值为字符串,异构环境下编译源码的交叉编译工具路径配置文件,如果未指定,则取资源类型默认的编译工具。 compiler的json配置文件内容示例和各字段含义请参考•compiler的json配置文件。 |
running_resources_info |
可选 |
值为list,运行当前so需要的资源信息,list的元素为单个资源信息的描述。 |
running_resources_info.type |
可选 |
当配置了running_resources_info时,该字段必选。 值为字符串,运行当前so需要的资源信息的类型,可选类型是"cpu"和"memory"。当资源类型是"memory"时,单位是M。 |
running_resources_info.num |
可选 |
当配置了running_resources_info时,该字段必选。 值为数字,运行当前so需要的资源信息的数量。 |
heavy_load |
可选 |
表示节点对算力的诉求。
默认值为false。 当该参数取值为"true"时,在Atlas A2训练系列产品/Atlas 800I A2推理产品场景下会影响UDF的部署位置。 |
- compiler的json配置文件内容示例如下,各字段解释如所示。
{"compiler":[{"resource_type":"X86","toolchain":"/usr/bin/g++"},{"resource_type":"Aarch","toolchain":"/usr/bin/g++"},{"resource_type":"Ascend","toolchain":"/usr/local/Ascend/hcc"}]}
表2 compiler的json配置文件 配置项
可选/必选
描述
compiler
必选
值为list,list的元素为单个资源类型的编译工具的描述。
compiler.resource_type
必选
值为字符串,设备支持的资源类型。
compiler.toolchain
必选
值为字符串,该资源类型对应的编译工具路径。
- CMakeLists文件
DataFlow UDF编译模块解析异构环境的resource.json资源配置和cpu_compiler配置,根据resource.json资源配置类型匹配选择cpu_compiler中指定的交叉编译工具,如果用户未指定cpu_compiler.json配置文件或者cpu_compiler.json未配置该类型的编译工具,则取环境上默认的编译工具进行编译。不同资源类型的编译工具名称和路径如下。${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。例如,若安装的Ascend-cann-toolkit软件包,则安装后文件存储路径为:$HOME/Ascend/ascend-toolkit/latest。
- X86和Aarch场景下:g++
- Ascend场景下:${INSTALL_DIR}/toolkit/toolchain/hcc/bin/aarch64-target-linux-gnu-g++
用户的源代码工程要遵从如下规则:- 用户提供的源码工程目录下要包括所有执行代码和依赖库源码。
- 用户要配置好FuntionPp执行代码和依赖库的编译脚本。
- 编译脚本要使用RELEASE_DIR变量作为最终输出目录,如果有依赖的so文件,用户需要把依赖的so文件拷贝到该路径下。
- 编译脚本要使用RESOURCE_TYPE变量判断资源类型,如果当前UDF不支持某一个资源类型,需要将对应的注释放开。
- CMakeLists sample如下:
cmake_minimum_required(VERSION 3.5) PROJECT(UDF) if ("x${RESOURCE_TYPE}" STREQUAL "xAscend") message(STATUS "ascend compiler enter") # if unsupport current resource type, please uncomment the next line. # message(FATAL_ERROR "Unsupport compile Ascend target!") elseif("x${RESOURCE_TYPE}" STREQUAL "xAarch") message(STATUS "aarch64 compiler enter") # if unsupport current resource type, please uncomment the next line. # message(FATAL_ERROR "Unsupport compile Aarch64 target!") else() message(STATUS "x86 compiler enter") # if unsupport current resource type, please uncomment the next line. # message(FATAL_ERROR "Unsupport compile X86 target!") endif() if(DEFINED ENV{ASCEND_INSTALL_PATH}) set(ASCEND_INSTALL_PATH $ENV{ASCEND_INSTALL_PATH}) message(STATUS "Read ASCEND_INSTALL_PATH from ENV: ${ASCEND_INSTALL_PATH}") else() set(ASCEND_INSTALL_PATH /usr/local/Ascend) message(STATUS "Default ASCEND_INSTALL_PATH=${ASCEND_INSTALL_PATH}, you can export ASCEND_INSTALL_PATH to set this environment") endif() # set dynamic library output path set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${RELEASE_DIR}) # set static library output path set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${RELEASE_DIR}) message(STATUS "CMAKE_LIBRARY_OUTPUT_DIRECTORY= ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") set(INC_DIR "${ASCEND_INSTALL_PATH}/latest/x86_64-linux/include/flow_func") file(GLOB SRC_LIST "*.cpp") # Specify cross compiler add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) # set c++ compiler set(CMAKE_CXX_COMPILER ${TOOLCHAIN}) # =========================UDF so compile============================ # check if SRC_LIST is exist if("x${SRC_LIST}" STREQUAL "x") message(UDF "=========no source file=============") add_custom_target(${UDF_TARGET_LIB} COMMAND echo "no source to make lib${UDF_TARGET_LIB}.so") return(0) endif() add_library(${UDF_TARGET_LIB} SHARED ${SRC_LIST} ) target_include_directories(${UDF_TARGET_LIB} PRIVATE ${INC_DIR} ) target_compile_options(${UDF_TARGET_LIB} PRIVATE -O2 -std=c++11 -ftrapv -fstack-protector-all -fPIC ) if ("x${RESOURCE_TYPE}" STREQUAL "xAscend") target_link_libraries(${UDF_TARGET_LIB} PRIVATE -Wl,--whole-archive ${ASCEND_INSTALL_PATH}/latest/x86_64-linux/lib64/stub/aarch64/libflow_func.so -Wl,--no-whole-archive ) # If there have any dependent so, please release the following comments and copy dependent so to ${PROJECT_BINARY_DIR}/${RELEASE_DIR} # [[execute_process( COMMAND cp ${ASCEND_INSTALL_PATH}/latest/x86_64-linux/lib64/stub/aarch64/libflow_func.so ${PROJECT_BINARY_DIR}/${RELEASE_DIR} )]] elseif("x${RESOURCE_TYPE}" STREQUAL "xAarch") target_link_libraries(${UDF_TARGET_LIB} PRIVATE -Wl,--whole-archive ${ASCEND_INSTALL_PATH}/latest/x86_64-linux/lib64/stub/aarch64/libflow_func.so -Wl,--no-whole-archive ) # If there have any dependent so, please release the following comments and copy dependent so to ${PROJECT_BINARY_DIR}/${RELEASE_DIR} # [[execute_process( COMMAND cp ${ASCEND_INSTALL_PATH}/latest/x86_64-linux/lib64/stub/aarch64/libflow_func.so ${PROJECT_BINARY_DIR}/${RELEASE_DIR} )]] else() target_link_libraries(${UDF_TARGET_LIB} PRIVATE -Wl,--whole-archive ${ASCEND_INSTALL_PATH}/latest/x86_64-linux/lib64/stub/x86_64/libflow_func.so -Wl,--no-whole-archive ) # If there have any dependent so, please release the following comments and copy dependent so to ${PROJECT_BINARY_DIR}/${RELEASE_DIR} # [[execute_process( COMMAND cp ${ASCEND_INSTALL_PATH}/latest/x86_64-linux/lib64/stub/x86_64/libflow_func.so ${PROJECT_BINARY_DIR}/${RELEASE_DIR} )]] endif()
返回值
返回设置好的FunctionPp。
异常处理
无。
约束说明
无。