【超算/先进计算学习】日报7

今日已完成任务列表


4-4、DarkNet 程序性能优化

遇到的问题和解决方案


任务完成详细笔记


首先拷贝 darknet 到自己的文件夹下,解压并进入文件夹之后,修改 Makefile 文件 (加上-pg选项)
执行 make 指令进行编译

注意:每次对源码进行修改之后都要重新 make,加上 -pg 选项只是为了之后方便了解程序运行的详情,方便优化,但这本身会产生一定的开销,最终版需要去掉。

在 make 指令执行完之后使用如下指令进行执行:

yhrun -p thcp1 -N 1 -n 1 ./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/kite.jpg

对生成的 gmon.out 文件进行转换 (二进制转为普通文本文件)

gprof darknet gmon.out>output.txt

可以将 output.txt 文件下载到本机或者使用 cat output.txt 直接查看等:
在这里插入图片描述

可以发现 gemm_nn 函数的执行耗时占了 94.75%,这也是之后需要重点优化的对象

没有采用任何优化的情况下程序执行结果如下:
在这里插入图片描述
进入到 darknet-master 的 src 文件夹下,执行如下指令查看函数 gemm_nn 在哪些文件出现:

grep -r gemm_nn

进入到 gemm.c 文件,并找到 gemm_nn 函数:
在这里插入图片描述
对此处的三重循环进行优化:循环交换、循环不变量外提、循环展开
在这里插入图片描述

当然了,肯定还是有很多其他的优化手段的,本人能力有限呀~发动小脑筋吧 (≧∇≦)ノ

进行上述优化后重新编译执行:
在这里插入图片描述

这里是加 -pg 选项下运行的结果,实际上要是比这个耗时更少的

之后重复上述步骤,再次得到 output.txt 查看各个函数的执行情况:
在这里插入图片描述

可以发现除了 gemm_nn 函数,im2col_cpu 处于执行消耗的第二名,之后考虑对其进行优化

同样的方法,找到该函数所在的文件:
在这里插入图片描述
同样是三重循环,这里我主要使用了循环不变量外提的方法:
在这里插入图片描述
进行上述优化后重新编译执行:
在这里插入图片描述

这个是 去掉 -pg 选项的执行情况,个人认为提升不是很大就没有再继续了,想要优化到极致的可以反复上述过程,不断寻找耗时长的函数对其使用尽可能多的优化手段!

对自己的表现是否满意


通过对 darknet 项目进行优化,了解了传统程序优化的基本流程,并对之前所学的内容有了很好的检验,个人认为学习阶段最终结果并不重要,重要的是掌握项目优化的思路和所用的工具。看到所学内容能为程序运行带来如此大的性能提升,还是很满意的 (✿◡‿◡)

简述下次计划


复盘整个学习过程并总结。

其他反馈


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼树C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值