将作为一名程序员,进一步确定的目标是成为一个架构师,那么能耗必须考虑。
写代码与能耗的关系不言自明,现在假设将网络视频监控的监控识别算法放在客户端,既不利于算法的保护,也不利于算法的优化,更不利于降低能耗。
谈到能耗,每一台服务器都是吃电器,如果我不是老板,就不考虑耗电的情况,但是如果作为这个公司的一员,也有义务从能耗的角度去写代码。
一个65W的CPU跑一年,需耗电568度电,一度电假定为1.2元,那么一个CPU就需要耗电681.6元,这个价钱可以再买个CPU了。
对于一个1500W的GPU跑一年,耗电13104W,一度电假定为1.2元,那么一个GPU就需要耗电15724.8元,这个价可以上京东买个目前最高端的GPU了,当然还没算上冷却耗电,电源效率这些问题。
降低能耗的方法:
一:优化算法
下面源自一段代码测试的数据:
我们可以看到,能耗与代码执行的时间肯定有直接关系。跑50秒一般比跑3秒要耗能,所以在写代码时,算法设计的好可以节能。
由于最近学习一篇论文,接触了intel的SSE指令集,所以就出来了学习这个的热情,其实对于程序设计,个人的看法是好的算法是关键,但是一个好的编程功底必不可少。
其实算法优化有很多工作可以做:多线程处理,分布式处理,数据优化等等。
二:减少数据迁移
在处理图像时,最头疼的就是数据太多,一个三维图像数据MATLAB读取的话会显示空间不足,一个二维的FFT变换去处理一张壁纸图片,可能就会卡死你的程序,在这些处理的过程中,其实就是把硬盘上的图片数据读到内存上,然后在读到缓存上处理,算法的不同,数据迁移的方式就不同。
假设一张图片从硬盘读到内存上耗能xW ,内存写到硬盘上耗能yW,那么就是一张图片的读写就是x+yW,写一帧视频到硬盘上耗能zW ,如果遇上一个菜鸟程序员,写个代码处理视频时将图片保存到硬盘里,而不是保存视频的话,那么保存10万帧视频的话,多耗能100000(x+y-z)W。
减少数据迁移方法:高效使用寄存器,高效使用共享内存,减少不必要的数据迁移操作。
三:硬件优化
在配置机器时,处理器性能至关重要,性能越好意味着能耗可能越少,耗电可能越少,一个处理器跑一年的电费至少相当于购买该处理器的价格。
制冷,温度过高,机器性能会下降,当然温度过低,性能也会下降,维持一个适应的温度,对于机器的运行也是很重要。
小结:
代码越少比不意味着能耗越少,代码执行效率高也并不意味着能耗低,重要的是我们需要了解计算机构造,编程语言的原理,熟练搭配,争取做一个低功耗的程序员,节能的程序员,低功耗的程序等于执行程序耗资少,也等于减少碳排放。