以前做的一个上位机程序出了点问题,简单地说,其实就是程序在执行某段算法代码的时候耗时比较长,然后在此基础上又新增了代码,导致本来耗时比较长的代码,耗时又增加了大约一倍!于是,我建议客户直接升级电脑的CPU,以升级硬件的方式来提升代码的执行速度。结果,我的这个建议被另外一个程序员给否决了!

打开网易新闻 查看更多图片

旧代码运行效率不高

这个上位机程序其实是机器视觉上位机程序,耗时比较长的是视觉算法,但这是有原因的,那是因为现场的打光环境比较差,必须通过算法来弥补打光环境的问题,如果您对视觉算法没有概念,那么可以直接理解为程序里面需要加很多特殊判断来兼容这种比较差的检测环境。

因为机器视觉上位机是在流水线上做检测的,视觉算法是要检测输送带上的产品,这个视觉算法在此之前本身耗时就比较长,但是不影响检测效率,简单地说就是不会漏检。

但是,因为又在原来的代码基础上增加了检测项,导致检测时间又被拉长,现在的检测效率肯定是会漏检的。也就是说,假设有三个产品排队经过摄像头,那么可能在检测完第一个产品时,第二个产品已经错过了最佳检测位置了,所以只能跳过第二个产品检测第三个产品,这就是我们所说的漏检!

建议升级CPU

我之所以建议升级CPU,是因为这个CPU的型号是比较老的型号了,在当时的检测场景下,这块CPU的性能是够的,但它的算力甚至都没有我2020年买的笔记本电脑的低功耗CPU算力好,这块CPU的算力和我这个笔记本电脑的算力差了4倍多!

我觉得只要换一个CPU,也花不了几个钱,即使功耗上升了,一些配件加起来顶天了也就2000来块,就能解决事情,算力却能提升不知道多少倍。

另外一个程序员建议优化算法

因为我已经不在这个公司了,所以以前的研发总监就派了公司的另外一个专门做算法的程序员看了下我写的算法代码,然后跟客户说可以通过重写算法来提升代码的执行速度。

然后我就懵了,因为他这话一说出来,客户肯定是哪个省钱就用哪个方法啦!

果不其然,客户就让我和这个程序员一起研究一下算法有没有可能经过重写,优化速度。

我仔细看了下算法,感觉可优化的地方不多,即使可以优化,也很难让算法的效率提升一倍,达到让上位机不漏检的地步。

代码特殊判断过多?

我的视觉算法虽然不如这个程序员,但是该有的概念我还是懂得,因为当初写这个项目的时候,这个程序员还没来我们公司,不了解里面的情况。这个程序员开始琢磨我写的一些特殊判断,并且找了几个耗时比较长的特殊判断,就开始找茬!

这个上位机程序其实我已经写了很久了,很多特殊判断当初写的意图差不多都忘了,我只能根据注释一边理解代码一边跟他解释为什么这么写。

但特殊判断之所以叫特殊判断,那是因为只有在特殊情况下才会出现,视觉算法的尴尬点就是,即使是特殊情况,可能并不是只有特殊情况才会执行这段代码,而是我们需要主动去发现这种情况,然后再特殊处理,所以即使是特殊判断,该耗的时间还是会耗的。

然后这个程序员就直接以现有的情况运行了视觉算法,发现大多数特殊情况都没有出现,然后就问我可以不可以把这些特殊判断给删掉,如此一来省下来这部分时间就不会影响检测效率了。

我说不能删,然后我俩就开始争辩,我一再向他表明,加这些特殊判断的原因,是因为当初写这个项目时实际跑了很长时间的生产线,才总结并写出来的,当下没出现,不代表后面的生产不会出现,总之,保持现在的代码不改,只提升硬件能力,是最稳妥的办法。如果选择修改算法,那么无异于大动干戈。

优化代码风险大

而且,我建议提升硬件能力,最大的原因还是如果需要改算法,一来需要重新进行编码,还需要在实际生产环境中跑一段时间验证算法是否可行,如果不行的话还得改,如果影响客户生产了,可能还需要派人去客户那解决问题,一旦派人过去了,那就不像换一个CPU只需要去一天那么简单了!一旦客户生产受到影响迟迟得不到解决,那么出差人员的差旅、加班、客诉产生的费用可能就是一个CPU价格的数倍甚至是几十上百倍了!

虽然,当下换一个CPU可能的确就像他所说的那样,但其中的风险只有我和当初经历过这个项目的人才知道!

关键是,即使我们优化了算法,客户也不会另外给开发费用!但是建议升级CPU,客户这边是需要提供升级费用的!

可是,人家是专门写算法的,况且我已经不在这个公司工作了,也不想和他过多争论,于是最终客户选择了他的方案。

结语

这个专门写视觉算法的程序员实际工作年限我不知道,没了解,但是我敢肯定他工作肯定不久,否则他不会选择一个最差的方案,尽管他可能认为他能把我写的这部分算法通过他能够修改或重写的更好,但是,这里面的风险其实是很大的!

就像程序员总说的那句话:“代码能跑,就尽量别动!”,意思就是不管以前的代码写得多差,只要他跑的看似是对的,那就别动,更何况是大动干戈!

视觉算法尤其如此,很多视觉算法都是需要结合大量的产品样本来进行不断完善的,即使就像我写的一样,里面充斥着大量的特殊判断,但每一个特使判断都不是凭空出现的。

现在这个程序员的选择,我几乎已经能猜到结果了!最后,听说这个程序员去客户现场改了十几天算法,最后也改口了!