以HcclComminitRootInfo初始化方式为例,样例代码目录结构如下所示:
1 2 3 4 5 6 | CommInitRootInfo ├── bin │ └── CommInitTest ├── Makefile └── src └── main.cc |
配置样例编译时依赖的环境变量:
1 2 3 | source /usr/local/Ascend/ascend-toolkit/set_env.sh export INSTALL_DIR=/usr/local/Ascend/ascend-toolkit/latest export LD_LIBRARY_PATH=${INSTALL_DIR}:$LD_LIBRARY_PATH |
“INSTALL_DIR”是CANN软件安装后文件存储路径,其中“/usr/local/Ascend”为root用户的默认安装路径,如果使用普通用户安装,或指定路径安装,请自行替换。
Makefile文件示例如下,请根据实际情况替换源文件及其所在路径。
#
#loading path
#--------------------------------------------------------------------------------------------------------------------------------------------------
CXXFLAGS := -std=c++11\
-Werror\
-fstack-protector-strong\
-fPIE -pie\
-O2\
-s\
-Wl,-z,relro\
-Wl,-z,now\
-Wl,-z,noexecstack\
-Wl,--copy-dt-needed-entries
#path of the source file
Common_DIR = ./src
#source file
Common_SRC = $(wildcard ${Common_DIR}/*.cc)
HCCL_INC_DIR = ${ASCEND_DIR}/include
HCCL_LIB_DIR = ${ASCEND_DIR}/lib64
ACL_INC_DIR = ${ASCEND_DIR}/include
ACL_LIB_DIR = ${ASCEND_DIR}/lib64
LIST = CommInitTest
#
#library flags
#--------------------------------------------------------------------------------------------------------------------------------------------------
LIBS = -L$(HCCL_LIB_DIR) -lhccl\
-L$(ACL_LIB_DIR) -lascendcl
INCLUDEDIRS = -I$(HCCL_INC_DIR)\
-I$(ACL_INC_DIR)\
-I$(Common_DIR)
#
#make
#--------------------------------------------------------------------------------------------------------------------------------------------------
all:
@mkdir -p bin
g++ $(CXXFLAGS) $(Common_SRC) $(INCLUDEDIRS) -o CommInitTest $(LIBS)
@printf "\nCommInitTest compile completed\n"
mv $(LIST) ./bin
.PHONY: clean
clean:
rm -rf ./bin/*Test
执行如下命令编译样例:
1 | make ASCEND_DIR=/usr/local/Ascend/ascend-toolkit/latest |
编译成功后,会在执行编译命令的bin/目录下生成CommInitTest可执行文件。
编译完成后,通过以下指令启动:
./bin/CommInitTest <devid> <rankid> <commid> <commNum> <rankSize>
执行命令示例如下:
1 2 3 4 5 6 | ./bin/CommInitTest 0 0 0 4 2 & // 共4个通信域,每个通信域中2个rank,root节点的Device ID分别为0,1,2,3;获取root节点的rootInfo信息,并在这些root节点上初始化通信域,每个root节点在所在通信域的rankid为0。 sleep 10 ./bin/CommInitTest 4 1 0 4 2 & // 在Device ID为4的设备上初始化通信域,rankid为1,所在通信域的ID为0。 ./bin/CommInitTest 5 1 1 4 2 & // 在Device ID为5的设备上初始化通信域,rankid为1,所在通信域的ID为1。 ./bin/CommInitTest 6 1 2 4 2 & // 在Device ID为6的设备上初始化通信域,rankid为1,所在通信域的ID为2。 ./bin/CommInitTest 7 1 3 4 2 & // 在Device ID为7的设备上初始化通信域,rankid为1,所在通信域的ID为3。 |