浅谈C\C++代码优化中的一些小技巧
编写C\C++程序快两年,对于代码优化有很深的感触。个人认为,代码优化是一门很深的学问,而作为码农,我们总是在实践中不断更新自己对它的认识和理解。对于这个很大很深的问题,我只是根据自己的所学所见以及所悟来谈谈代码优化中的效率问题,希望对初学者有一些帮助,如有不对的地方还望指正。
一、定义
所谓代码优化是指在不改变程序运行结果的前提下,使最终生成的目标代码的运行时间更短,时空效率得到优化。这里,我结合自己的图像处理方面的一些经历谈谈如何如何减少运行时间、提高运行效率。个人认为主要包括硬件加速和软件加速两个方面。
二、硬件加速
顾名思义,硬件加速指的是充分利用计算机现有的的硬件资源编写代码,进而提高代码的运行效率。据我所知,常见的适合计算机的硬件加速方法有:GPU,OpenMP以及SSE。
GPU
GPU(Graphic Processing Unit)是图像处理器,它是显卡的大脑,早期主要用于电脑的2D\3D图形计算。随着科技的发展,GPU开始在并行计算等方面得到广泛的应用,其优势在于它包含很多小的独立处理单元,这些处理单元可以并行运算。这一特点决定了GPU相对于CPU而言在并行数据的处理上具有更大的优势,如图像处理中的计算梯度、反转灰度等运算。
关于GPU编程,首先需要硬件上的支持,即计算机需要有独立显卡,其次需要软件上的支持,即编程环境以及相应的GPU接口,如VS2008和NVIDIA的CUDA。CUDA是NVIDIA推出的一个GPU运算平台,我们可以理解API。一般而言,如果我们的电脑有独立显卡,在安装显卡驱动、CUDA开发包以及编程环境(如VS2008)之后,我们便可以在相应的工程项目中嵌入.cu格式的文件用于GPU编程。有关GPU编程的详细过程这里就不详细叙述了,感兴趣的同学可以参考CUDA提供的用户手册以及《GPU高性能编程CUDA实战》一书,前者比较详细,后者比较易懂。