编译 nccl-tests 项目

2024-01-08 17:04:51

1,编译

下载源代码

git clone --recursive https://github.com/NVIDIA/nccl-tests.git


?

编译源代码

cd nccl-tests/
make -j

2,运行
?

cd ./build/
./all_reduce_perf --help
./all_reduce_perf -b 8 -e 256M -f 2 -g 4

效果图:

3,注意

在这些testcase中,需要注意这两个函数:

这两函数配合出现,起到了一个类似大括号的作用{ ... }

两者之间调用的 nccl API 函数组成要给 group,表示这是一组关系紧密的函数操作。

ncclGroupStart() 调用后,接下来的nccl API 调用都会是非阻塞于GPU 操作的方式立即返回;

ncclGroupEnd() 返回时,仅仅表示已经将nccl API所引发的 cuda gpu 等相关的操作已经提交排队进入了对应的 cuda stream里了,但并不能保证gpu内部已经执行完毕,用cuda 编程的角度看,也就是相关的 cuda kernel 已经全部 被 launch 起来了,但不一定开始执行了,更不一定执行完毕了;

所以,通常再ncclGroupEnd()后面还会调用一个

cudaStreamSynchronize(...);

这是一个阻塞于gpu操作的cuda API,只有等到这个cuda stream中的之前提交的 gpu 操作都做完后才会返回。

参考:

Group Calls — NCCL 2.19.3 documentation

文章来源:https://blog.csdn.net/eloudy/article/details/135383479
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。