昇腾社区首页
中文
注册

编译运行

介绍目录结构

以HcclComminitRootInfo初始化方式为例,样例代码目录结构如下所示:

1
2
3
4
5
6
CommInitRootInfoConfig
├── bin
   └── CommInitTest
├── Makefile
└── src
    └── main.cc
  • Makefile文件内容可参见配置Makefile文件
  • main.cc的样例代码可参见样例代码
  • bin目录下的CommInitTest为编译后生成的可执行文件。

配置环境变量

配置样例编译时依赖的环境变量:

1
source /usr/local/Ascend/ascend-toolkit/set_env.sh

“/usr/local/Ascend”为CANN软件root用户的默认安装路径,如果使用普通用户安装,或指定路径安装,请自行替换。

配置Makefile文件

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>

  • devid:Device ID。
    • 当devid取值为0时,此命令实现的功能为设置Device ID为0~<commNum-1>的设备为root节点,获取这些节点的rootInfo信息,并在这些节点上初始化通信域。
    • 当devid取值为非0时,此命令实现的功能是根据传入的rootInfo信息,在当前devid指定的设备上初始化通信域。
  • rankid:为“devid”指定的设备设置的rank ID。
  • commID:当前通信域的ID,若devid取值为“0”,此字段无意义。
  • commNum:当前AI Server上的通信域总个数。
  • rankSize:每个通信域中的rank个数,此样例仅支持每个通信域中rank数相同的场景。

执行命令示例如下:

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。
命令执行完成后,结果示例如下所示:
...
Rank 4 AllReduce operation completed successfully.
Rank 0 AllReduce operation completed successfully.
Rank 6 AllReduce operation completed successfully.
Rank 2 AllReduce operation completed successfully.
Rank 5 AllReduce operation completed successfully.
Rank 1 AllReduce operation completed successfully.
Rank 7 AllReduce operation completed successfully.
Rank 3 AllReduce operation completed successfully.
...