写了两个脚本来获得通过nsys profile出来的cuda程序执行时间。

1. runnsys.sh

runnsys.sh working_dir program args

第一个参数working_dir是设置后面你的程序在哪里跑。比如有些程序是编译在build/,但是实际input和work的目录在另外的目录下。这个参数设置为实际程序运行的目录即可。同时,reports也将生成在这个目录。

后面是正常运行cuda程序时的命令和参数。

以sradv1为例,正常执行srad为/home/test/rodinia/sradv1/srad 1 0.5 502 458。那么通过该脚本使用则为

runnsys.sh ./ /home/test/rodinia/sradv1/srad 1 0.5 502 458 

在当前目录,会生成一个reports文件夹,里面包含的nsys的reports(qdrep和sqlite格式)。reports文件名的格式为 report1_srad.qdrep, report1_srad.sqlite,同时还会生成report1_srad_gpumemsizesum.csvreport1_srad_gpumemtimesum.csv, report1_srad_cudaapisum.csv , report1_srad_gpukernsum.csv,分别代表了gpu memory traffice, gpu memory copy time, cuda api execute time,gpu kernel execute time。脚本会默认执行十次传入的参数,所以会有report1-report10。

2. 提取kernel执行时间,memory copy traffic 和cuda api运行时间

selectnsys.py -i report_path [-e special_middle_name] [-o save_to]

-i传入reports地址,最后一定要是/reports结尾。

-e用于一些特殊文件名的时刻。脚本默认是qdrepreport文件的前一个部分作为读取的pattern,比如report1_srad.qdrep是srad。但如果与真正的reports文件的中间名字不同,比如report1_srad_v1.qdrep,则会以v1为pattern去读取reports,但这样会导致读取失败。此时,可以用 -e srad_v1来手动指定report中间名的全称。

以srad为例,selectnsys.py -i /home/test/rodinia/sradv1/reports/ -o sradv1-original。执行完成后,将在当前目录下生成sradv1-original_kernel_time.csv,sradv1-original_memsize.csv,sradv1-original_cudaapi.csv,分别是对应类型的十次记录的均值。


文章版权归 FindHao 所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明作者 FindHao 和本文原始地址:
https://findhao.net/academic/2573.html

Comments