序&开博动机

想着开通博客已经有几年了,大概从大学快要毕业的时候吧。但是一次次举棋未定,最终铩羽而归,直到今天才正式算开通。

为什么总是开通未成功呢?开始的原因大概是因为不知道选择哪个平台,是CSDN呢,还是新浪呢,还是网易呢。强迫症总归伤不起。于是就把这个事情延期了。强迫症加上拖延症,真的是病。后来的原因呢,想着自己开一个网站,当作博客的平台。心思是大了点,于是也就不了了之了。

今天终于想着开通了,又是什么原因呢?这也就是我开博的动机所在了。接下来徐徐讲来。

我最近两个多月都在忙一个任务。其实是一个不算复杂的任务,只是把一个使用QT编写的基于遗传算法的程序用CUDA进行改造,加快速度。但是由于没人催,任务进行得极其缓慢。前半个月主要忙着配置环境,由于CUDA7.5需要64位环境的支持,而QT一般只有32位的。因此我需要根据网上资料自己编译64位QT。具体的方法可以参考我的另一篇文章。

接下来就开始使用CUDA进行改造。我曾经使用过一段时间的CUDA,但是也过了两年了,忘得差不多了。经过一段时间的回顾,我开始动手改造程序,为了简单起见,我按着原来程序的架构进行改造。这个时候我的第一个毛病犯了:我拿到初始的CPU版本的程序后,并没有仔细思考与分析程序,而是随意看了看就开始动手改造,这里给我自己挖了一个大坑X。这个坑X也是今天促使我立即开博的最大因素。

这个坑是什么呢?我并没有仔细分析整个原始的程序,只是粗略的看了一下结构,便匆忙地分析出计算量最大的模块A。于是接下来的改造都是针对A的。最近几天改造并调试完成后,结果还不错,比之前的版本有着很大效率的提升。但是出现了一个不能算大但是也必须解决的问题b:程序中有个地方用到了互斥锁,这个地方明明操作很简单,但是却耗费了很大的时间,而且特点是,迭代次数越多,每次耗费的时间越长。(这里就是第二个坑Y了!)因此我对这一个互斥锁进行分析,并查阅了很多资料。但是最终竟然发现,耗费时间长这个问题并不是因为互斥锁的缘故,而是由于绘制模块的原因!——初始程序作者(坑!)把清除缓存函数中的一段代码注释了,因此每次绘制完成后,缓存并未清除,导致下一次绘制时间增加。我为什么没有去仔细阅读代码呢?这是我需要改进的。同时也是自己经验不够吧,每次迭代耗费时间不断增加,不就意味着数据的规模在不断增长吗?

解决问题b之后,突然发现,当我完善了清除缓存的代码后,CPU版本的程序快得飞起——直接从数十分钟的数量级提升到数秒钟,甚至超越了GPU的速度!(这就是我之前说的大坑X。)那我修改了两个月有什么意义呢?原来程序之前的瓶颈在于绘制部分,以及没有清除缓存这个BUG。——(结论下的太早了,经过调整参数,GPU版本的效率还是要高上不少的。11.3 改)

最终的结果是,CPU和GPU的速度是差不多的,GPU的大部分时间用于内存的交换了。当然,随着数据规模的不断增大,GPU计算的优势会进一步凸显。

总之,根据这个事情,我需要改善的地方是:

1、遇到一个问题,不要一上手就干,而是先思考怎么干,并阅读代码,了解代码结构与内容;

2、不要钻牛角尖,学会退一步看问题,能够进退自如;

3、接到任务时,不能想当然,必须要搞清楚任务的具体需求与条件,要尽量问清楚(这次没发生这个问题,但是这也是我需要注意的)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值