HPC常用编译选项和性能分析及调试方法

常用编译选项

ICC编译器

环境准备

1
2
3
source /opt/intel/bin/compilervars.sh intel64
source /opt/intel/bin/iccvars.sh intel64
source /opt/intel/vtune_profiler/env/vars.sh

ICC编译链接: OpenMP + OpenMPI

1
mpicxx -std=c++11 -g -fopenmp -O3 -xhost -qopt-report=5 -qopt-report-phase=vec -cxx=icc

PGI + NVCC编译器

环境准备

~/.modulerc添加以下代码给Environment Modules导入文件夹/opt/pgi/modulefiles

1
module use /opt/pgi/modulefiles

启动Environment Modules

1
source /etc/profile.d/modules.sh

然后启动PGI环境

1
2
3
module load pgi-nollvm
module load pgi/19.10
module load openmpi

添加NVIDIA工具链路径

1
export PATH=/usr/local/cuda-11.1/bin:$PATH

PGI编译:OpenACC + OpenMP + OpenMPI

1
mpicxx -std=c++11 -I/usr/local/cuda-11.1/include -g -O3 -mp=numa -acc -Minfo=accel -ta=tesla:cc60 -fast

NVCC编译: CUDA + OpenMPI

1
nvcc -lineinfo -g -O3 -std=c++11 -gencode arch=compute_60,code=sm_60 -ccbin=mpicxx

PGI链接

1
mpicxx -std=c++11 -I/usr/local/cuda-11.1/include -g -O3 -mp=numa -acc -Minfo=accel -ta=tesla:cc60 -fast -lnvToolsExt -lcudart -L/usr/local/cuda-11.1/lib64

性能分析方法

Intel Vtune性能分析

环境准备

ICC环境准备

GUI启动分析

1
vtune-gui &

CLI启动分析

1
/opt/intel/vtune_profiler_2020.1.0.607630/bin64/vtune -collect hpc-performance -finalization-mode=full -app-working-dir /home/tonny -- /home/tonny/myscript

myscript是一个包含了启动环境变量,用mpirun启动目标程序的脚本

NVIDIA Profiler性能分析

环境准备

添加NVIDIA工具链路径

1
export PATH=/usr/local/cuda-11.1/bin:$PATH

推荐使用Java 8,NVVP不兼容高版本Java

CLI启动分析

1
mpirun -np 4 nvprof --cpu-profiling on --cpu-profiling-mode top-down --annotate-mpi openmpi  -o output.%h.%p.%q{OMPI_COMM_WORLD_RANK}.nvvp ./myprogram

调试方法

多进程多窗口GDB调试

1
2
mpirun -np 4 xterm gdb ./myprogram
mpirun -np 4 xterm cuda-gdb ./myprogram

多进程单窗口GDB调试

1
2
mpirun -np 1 gdb ./myprogram : -np 3 ./myprogram
mpirun -np 1 cuda-gdb ./myprogram : -np 3 ./myprogram

PGI GUI调试

1
pgdbg ./myprogram

调试技巧

CUDA-GDB查看显存上数组

1
print ((@global double*)arr)[0]@100