编译 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 操作都做完后才会返回。
参考:
文章来源:https://blog.csdn.net/eloudy/article/details/135383479
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!