5

フォーラムをざっと見ましたが、この質問はまだ出されていないと思います。

私は現在、博士号取得中に他の誰かが作成した MPI/CUDA ハイブリッド コードを使用しています。各 CPU には独自の GPU があります。私の仕事は、(すでに動作している)コードを実行してデータを収集し、追加のものを実装することです。このコードを単一の CPU / マルチ GPU に変換することは、現時点ではオプションではありません (後で可能性があります)。

パフォーマンス プロファイリング ツールを使用して全体を分析したいと考えています。


現時点では、各 CPU が独自の GPU に対して nvvp を起動してデータを収集し、別のプロファイリング ツールが一般的な CPU/MPI 部分を処理するようにすることが考えられます (私はいつものように TAU を使用する予定です)。

問題は、nvvp のインターフェイスを 8 回同時に起動すること (8 つの CPU/GPU で実行している場合) が非常に煩わしいことです。インターフェイスを経由せずに、ファイルにデータを直接書き込むコマンド ラインを取得し、後で nvvc のインターフェイスにフィードして分析できるようにしたいと考えています。

各 CPU によって実行され、それぞれの GPU に関するデータを提供するファイルを生成するコマンド ラインを取得したいと思います。8 (GPU/CPU) = 8 ファイル。次に、これらのファイルを nvcc で 1 つずつフィードして分析し、データを手動で比較する予定です。

何か案が ?

ありがとう !

4

4 に答える 4

6

CUDA 5.0 ツールキットnvprofの一部である を見てください(現在、リリース候補として利用可能です)。いくつかの制限があります。特定のパスで限られた数のカウンターしか収集できず、メトリックを収集することはできません (そのため、今のところ、複数のイベントが必要な場合は、複数の起動をスクリプト化する必要があります)。MPI 起動スクリプトの例など、nvvp 組み込みヘルプから詳細情報を入手できます (ここにコピーされていますが、5.0 RC よりも新しいバージョンがある場合は、nvvp ヘルプで最新バージョンを確認することをお勧めします)。

#!/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
于 2012-08-21T14:48:59.330 に答える
3

もう 1 つのオプションは、既に TAU を使用してアプリケーションの CPU 側をプロファイリングしているため、TAU を使用して GPU パフォーマンス データを収集することもできます。TAU は MPI とともにマルチ GPU 実行をサポートします。TAU の GPU プロファイリング機能の使用を開始する方法については、 http: //www.nic.uoregon.edu/tau-wiki/Guide:TAUGPU を参照してください。TAU はその下で CUPTI (CUda Performance Tools Interface) を使用するため、TAU で収集できるデータは、nVidia の Visual Profiler で収集できるデータと非常に似ています。

于 2013-04-22T16:22:41.193 に答える