本文主要是介绍是科研人就要快!加速你的算法!,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在科研中,大多数论文其实还是看精度和效果的,对于速度其实没有那么高的追求,很多人用速度评价自己算法的复杂度很低,但实际上这是不准确的,当然在精度占优的情况下,能够提高速度,给自己的实验结果增彩。
关于算法程序的加速,在动手前先要按照如下流程进行思考,以决定从哪里入手加速。
- 算法优化,指降低算法计算复杂度,设计新算法快速求解,比如Hungarian匹配算法。或牺牲一些内存,预计算一些重复计算的过程,减少程序层面的复杂度。
- 语言更换,指将自己算法迁移到更加底层的算法,越是低级的算法,执行速度越快。常见地,将Matlab、Python等解释性代码移植到C++平台,往往有5-20倍的加速效果。
- 算法并行,指将自己算法的独立计算部分,分成几块,利用CPU指令集、多核或GPU的特性实现加速。多核并行和CUDA并行最为常见。
- 汇编加速,将自己的一片代码指定为自己设计的汇编语言。多种C++编译器实际上也是将语言转换为汇编代码,对汇编进行加速在嵌入式中常见。(该方法对平台有需求,并不常见)
- 硬件加速,利用特殊硬件处理特殊算法,降低CPU架构的复杂度。常见的就是FPGA。
- 光学加速,利用参数制作特定的光散射模型,输入目标光源直接得到输出结果。(离谱的加速方式,目前停留在概念)
强烈注意:
所有的优化,都是在自己算法流程不变的前提下进行优化,因为优化后的程序,高度面向过程,如果算法某个流程要换以达到更高精度,则改动工作量较大。
下面我对每种加速方法进行详细的说明(本文只列举加速方法,并给出几种参考示例,并不会详细讲解如何使用,仅介绍思想)。
这篇关于是科研人就要快!加速你的算法!的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!