首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多GPU剖析(几个CPU,MPI/CUDA混合)

多GPU剖析(几个CPU,MPI/CUDA混合)
EN

Stack Overflow用户
提问于 2012-08-20 20:50:12
回答 4查看 3.4K关注 0票数 5

我在论坛上看了一眼,我不认为这个问题已经被问到了。

我目前正在使用MPI/CUDA混合代码,这是由其他人在他的PhD期间编写的。每个CPU都有自己的GPU。我的任务是通过运行(已经在工作的)代码来收集数据,并实现额外的东西。将此代码转换为单个CPU /多GPU当前还不是一个选项(稍后可能.)。

我想利用性能分析工具来分析整个事情。

现在的想法是让每个CPU为自己的GPU启动nvvp并收集数据,而另一个分析工具将负责一般的CPU/MPI部分(我计划像往常一样使用TAU )。

问题是,启动nvvp的接口8次(如果使用8 CPU/GPU运行)是非常恼人的。我希望避免遍历这个接口,并获得一个命令行,该命令行直接将数据写入文件中,以便稍后提供给nvvc的接口并进行分析。

我想得到一个命令行,它将由每个CPU执行,并为每个CPU生成一个文件,提供关于他们自己的GPU的数据。8(GPU/CPU)=8个文件。然后,我计划用nvcc逐个输入和分析这些文件,并手工比较这些数据。

知道吗?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-21 14:48:59

看看nvprofCUDA 5.0工具包的一部分(目前可以作为发布候选版本)。有一些限制-它只能收集有限数量的计数器在一个给定的通行证,它不能收集度量(因此,现在,您将不得不脚本多次启动,如果您想要超过几个事件)。您可以从nvvp内置帮助中获得更多信息,包括一个MPI启动脚本示例(在这里复制,但我建议您查看nvvp帮助以获得最新版本,如果您有比5.0rc更新的版本)。

代码语言:javascript
运行
复制
#!/bin/sh
#
# Script to launch nvprof on an MPI process.  This script will
# create unique output file names based on the rank of the 
# process.  Examples:
#   mpirun -np 4 nvprof-script a.out 
#   mpirun -np 4 nvprof-script -o outfile a.out
#   mpirun -np 4 nvprof-script test/a.out -g -j
# In the case you want to pass a -o or -h flag to the a.out, you
# can do this.
#   mpirun -np 4 nvprof-script -c a.out -h -o
# You can also pass in arguments to nvprof
#   mpirun -np 4 nvprof-script --print-api-trace a.out
#

usage () {
 echo "nvprof-script [nvprof options] [-h] [-o outfile] a.out [a.out options]";
 echo "or"
 echo "nvprof-script [nvprof options] [-h] [-o outfile] -c a.out [a.out options]";
}

nvprof_args=""
while [ $# -gt 0 ];
do
    case "$1" in
        (-o) shift; outfile="$1";;
        (-c) shift; break;;
        (-h) usage; exit 1;;
        (*) nvprof_args="$nvprof_args $1";;
    esac
    shift
done

# If user did not provide output filename then create one
if [ -z $outfile ] ; then
    outfile=`basename $1`.nvprof-out
fi

# Find the rank of the process from the MPI rank environment variable
# to ensure unique output filenames.  The script handles Open MPI
# and MVAPICH.  If your implementation is different, you will need to
# make a change here.

# Open MPI
if [ ! -z ${OMPI_COMM_WORLD_RANK} ] ; then
    rank=${OMPI_COMM_WORLD_RANK}
fi
# MVAPICH
if [ ! -z ${MV2_COMM_WORLD_RANK} ] ; then
    rank=${MV2_COMM_WORLD_RANK}
fi

# Set the nvprof command and arguments.
NVPROF="nvprof --output-profile $outfile.$rank $nvprof_args" 
exec $NVPROF $*

# If you want to limit which ranks get profiled, do something like
# this. You have to use the -c switch to get the right behavior.
# mpirun -np 2 nvprof-script --print-api-trace -c a.out -q  
# if [ $rank -le 0 ]; then
#     exec $NVPROF $*
# else
#     exec $*
# fi
票数 6
EN

Stack Overflow用户

发布于 2013-04-22 16:22:41

另一个选项是,由于您已经在使用TAU来分析应用程序的CPU端,您也可以使用TAU来收集GPU性能数据。τ支持多GPU执行以及MPI,查看http://www.nic.uoregon.edu/tau-wiki/Guide:TAUGPU获得如何开始使用TAU的GPU分析能力的说明。τ在底层使用CUPTI (CUda Performance ),所以您可以使用TAU收集的数据将非常类似于使用nVidia的Visual所能收集的数据。

票数 3
EN

Stack Overflow用户

发布于 2017-10-02 20:49:36

自CUDA5.0以来,情况发生了变化,现在我们只需使用%h%p%q{ENV},就像提到的这里一样,而不是使用包装脚本:

代码语言:javascript
运行
复制
$ mpirun -np 2 -host c0-0,c0-1 nvprof -o output.%h.%p.%q{OMPI_COMM_WORLD_RANK} ./my_mpi_app
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12044928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档