写了两个脚本来获得通过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.csv
,report1_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
用于一些特殊文件名的时刻。脚本默认是qdrep
report文件的前一个部分作为读取的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
,分别是对应类型的十次记录的均值。
Comments