Cuda Nvidia Visual profiler错误:无法创建分析文件

Cuda Nvidia Visual profiler错误:无法创建分析文件,cuda,profiling,openacc,pgi,nvprof,Cuda,Profiling,Openacc,Pgi,Nvprof,我是nvprof的新用户,在尝试使用nvprof评测代码时出错。我在代码中添加了一些OpenACC指令。我使用的cuda工具包是Cuda8.0。我的代码是用fortran90+OpenMPI编写的。我使用16个内核进行并行计算。以下是我用来提交代码的脚本: #!/bin/bash -l # #SBATCH --nodes=1 #SBATCH --ntasks=16 #SBATCH --ntasks-per-node=24 #SBATCH --ntasks-per-core=2 #SBATCH -

我是nvprof的新用户,在尝试使用nvprof评测代码时出错。我在代码中添加了一些OpenACC指令。我使用的cuda工具包是Cuda8.0。我的代码是用fortran90+OpenMPI编写的。我使用16个内核进行并行计算。以下是我用来提交代码的脚本:

#!/bin/bash -l
#
#SBATCH --nodes=1
#SBATCH --ntasks=16
#SBATCH --ntasks-per-node=24
#SBATCH --ntasks-per-core=2
#SBATCH --cpus-per-task=1
#SBATCH --constraint=gpu
#SBATCH --time=24:00:00
#SBATCH --account=s807

export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
export CRAY_CUDA_MPS=1
export TMPDIR=/scratch/snx3000/guow/Incompact3d_GPU/test1
export PGI_ACC_TIME=1

set -ex

# set some parameters
OUT=log.txt
#WMIN=1400
NP=16


# tasks: $SLURM_NTASKS 
# tasks-per-node: $SLURM_NTASKS_PER_NODE 
# cpus-per-task: $SLURM_CPUS_PER_TASK
srun nvprof -o nvprof.out ./incompact3d $WMIN >> $OUT
作业在运行几秒钟后终止,我收到以下错误消息:

+ OUT=log.txt
+ NP=16
+ srun nvprof -o nvprof.out ./incompact3d
==20144== NVPROF is profiling process 20144, command: ./incompact3d
==20148== NVPROF is profiling process 20148, command: ./incompact3d
==20140== NVPROF is profiling process 20140, command: ./incompact3d
==20133== NVPROF is profiling process 20133, command: ./incompact3d
==20134== NVPROF is profiling process 20134, command: ./incompact3d
==20150== NVPROF is profiling process 20150, command: ./incompact3d
==20146== NVPROF is profiling process 20146, command: ./incompact3d
==20128== NVPROF is profiling process 20128, command: ./incompact3d
==20154== NVPROF is profiling process 20154, command: ./incompact3d
==20156== NVPROF is profiling process 20156, command: ./incompact3d
==20152== NVPROF is profiling process 20152, command: ./incompact3d
==20136== NVPROF is profiling process 20136, command: ./incompact3d
==20130== NVPROF is profiling process 20130, command: ./incompact3d
==20158== NVPROF is profiling process 20158, command: ./incompact3d
==20138== NVPROF is profiling process 20138, command: ./incompact3d
==20142== NVPROF is profiling process 20142, command: ./incompact3d
==20146== Error: Cannot create profiling file: /scratch/snx3000/guow/Incompact3d_GPU/test2_OpenAcc/nvprof.out
==20142== Error: Cannot create profiling file: /scratch/snx3000/guow/Incompact3d_GPU/test2_OpenAcc/nvprof.out
==20138== Error: Cannot create profiling file: /scratch/snx3000/guow/Incompact3d_GPU/test2_OpenAcc/nvprof.out
==20133== Error: Cannot create profiling file: /scratch/snx3000/guow/Incompact3d_GPU/test2_OpenAcc/nvprof.out
==20134== Error: Cannot create profiling file: /scratch/snx3000/guow/Incompact3d_GPU/test2_OpenAcc/nvprof.out
==20136== Error: Cannot create profiling file: /scratch/snx3000/guow/Incompact3d_GPU/test2_OpenAcc/nvprof.out
==20156== Error: Cannot create profiling file: /scratch/snx3000/guow/Incompact3d_GPU/test2_OpenAcc/nvprof.out
srun: First task exited 30s ago
srun: tasks 0,4,6-7,9-13: running
srun: tasks 1-3,5,8,14-15: exited
srun: Terminating job step 3892463.0
slurmstepd: error: *** STEP 3892463.0 ON nid04439 CANCELLED AT 2017-10-12T15:04:00 ***
srun: Job step aborted: Waiting up to 32 seconds for job step to finish.
srun: error: nid04439: tasks 0,4,6-7,9-13: Killed
srun: Terminating job step 3892463.0

当我使用命令“nvvp nvprof.out”检查它时,会生成一个nvprof.out文件,但不会显示任何内容。你以前遇到过这种情况吗?如有任何建议,将不胜感激

尝试使用以下命令:

srun nvprof -o nvprof.%p.out ./incompact3d $WMIN >> $OUT

“%p”将被每个MPI列组的进程ID填充,以便每个列组将其配置文件输出到不同的文件。否则,所有列组都试图使用相同的文件,这可能会导致问题。

请尝试使用以下命令:

srun nvprof -o nvprof.%p.out ./incompact3d $WMIN >> $OUT

“%p”将被每个MPI列组的进程ID填充,以便每个列组将其配置文件输出到不同的文件。否则,所有列组都试图使用相同的文件,这可能会导致问题。

Hi Mat,谢谢您的回复。当我添加%p时,它会起作用。它可以生成16个输出文件。但是,当我将这16个输出文件导入nvprof时,GPU详细信息、CPU详细信息标签中没有显示任何内容。我只能看到OpenACC的时间线行。在分析标签中,当我单击“检查GPU使用情况”时,结果显示“没有GPU设备”。但是代码是在CPU和GPU上运行的。您能告诉我如何显示GPU、CPU详细信息和其他时间轴信息吗?如果您的代码在GPU上运行,那么应该有GPU信息。但是,如果节点没有安装“libcupti.so”,这可以解释为什么信息会丢失。CUPTI是与设备接口的探查器库。另一种可能是您没有为正在使用的设备生成OpenACC代码。您传递给编译器的“-ta”选项是什么?你在用什么设备?对于CPU评测,您需要将“-CPU profiling on”选项添加到nvprof,或者使用默认情况下启用CPU评测的pgprof。感谢您的回复!我使用的-ta选项是-ta=tesla:cuda8.0。我正在Cray XC50上运行模拟。计算节点是Intel®Xeon®E5-2690 v3@2.60GHz(12核,64GB RAM)和NVIDIA®Tesla®P100 16GB。我添加了“-cpu profilling on”选项,并使用单个内核进行计算。现在我可以看到CPU配置文件了。“-ta=tesla:cuda8.0”将包括P100作为默认目标设备之一,因此您在这方面做得很好。您是否可以添加“-Minfo=accel”并查看编译器反馈消息,以查看编译器是否正在生成设备内核?此外,请尝试设置环境变量“PGI_ACC_TIME=1”,然后在没有nvprof的情况下运行。这将产生一个简单的GPU配置文件。如果您只看到从主机测量的“运行时间”,而没有通过libcupti测量的“设备时间”,那么我们就知道这是libcupti问题。您好。我添加了-Minfo=accel,我可以看到来自编译器的反馈,上面写着“加速器内核生成”。当我将PGI_ACC_TIME设置为1时,我可以看到“经过的时间”,但在声明“内核启动xxxx次”之后,我看不到“设备时间”。但设备时间显示在语句“data copyin transfers:xxxxxx”和“data copyout transfers:xxxxxx”之后。也许正如你所说,这是一个libcupti问题。嗨,Mat,谢谢你的回复。当我添加%p时,它会起作用。它可以生成16个输出文件。但是,当我将这16个输出文件导入nvprof时,GPU详细信息、CPU详细信息标签中没有显示任何内容。我只能看到OpenACC的时间线行。在分析标签中,当我单击“检查GPU使用情况”时,结果显示“没有GPU设备”。但是代码是在CPU和GPU上运行的。您能告诉我如何显示GPU、CPU详细信息和其他时间轴信息吗?如果您的代码在GPU上运行,那么应该有GPU信息。但是,如果节点没有安装“libcupti.so”,这可以解释为什么信息会丢失。CUPTI是与设备接口的探查器库。另一种可能是您没有为正在使用的设备生成OpenACC代码。您传递给编译器的“-ta”选项是什么?你在用什么设备?对于CPU评测,您需要将“-CPU profiling on”选项添加到nvprof,或者使用默认情况下启用CPU评测的pgprof。感谢您的回复!我使用的-ta选项是-ta=tesla:cuda8.0。我正在Cray XC50上运行模拟。计算节点是Intel®Xeon®E5-2690 v3@2.60GHz(12核,64GB RAM)和NVIDIA®Tesla®P100 16GB。我添加了“-cpu profilling on”选项,并使用单个内核进行计算。现在我可以看到CPU配置文件了。“-ta=tesla:cuda8.0”将包括P100作为默认目标设备之一,因此您在这方面做得很好。您是否可以添加“-Minfo=accel”并查看编译器反馈消息,以查看编译器是否正在生成设备内核?此外,请尝试设置环境变量“PGI_ACC_TIME=1”,然后在没有nvprof的情况下运行。这将产生一个简单的GPU配置文件。如果您只看到从主机测量的“运行时间”,而没有通过libcupti测量的“设备时间”,那么我们就知道这是libcupti问题。您好。我添加了-Minfo=accel,我可以看到来自编译器的反馈,上面写着“加速器内核生成”。当我将PGI_ACC_TIME设置为1时,我可以看到“经过的时间”,但在声明“内核启动xxxx次”之后,我看不到“设备时间”。但设备时间显示在语句“data copyin transfers:xxxxxx”和“data copyout transfers:xxxxxx”之后。也许正如你所说,这是一个利库提问题。