最近因为项目需要,开始深入研究智能算法加速这个领域,本来也是做信号算法出身,遂做的稍微有点心得,跟大家分享一下,有不当之处还是希望跟大家沟通交流。
现阶段的算法加速,我个人理解其实就可以跟算法并行化划等号了,常用的就是GPU,DSP,FPGA,在这些已经设计好的平台上进行算法移植,配合硬件平台的特性,对其计算过程进行加速。
加速主要分三个层面吧:
1.算法并行化
排序算法中冒泡排序和选择排序算法的时间复杂度都是N平方,快速排序的算法时间复杂度是NlogN,类似于这样的方法实际上是算法并行化处理的核心思想,以空间来换时间,增大存储资源的开销,从而保证数据快速的处理,这就于GPU的特性得天独厚的契合起来,GPU就是多个轻量级线程并行处理从而得到好的结果,所以问题的关键就转化为了如何将所需要处理的算法把它变成一个可并行化的算法,其中最重要的两点应该是 算法在前后逻辑上是不相关联的 和能够分块分片,不相关联就意味着处理一块数据与处理另一块数据两者无关,同时也只有这样的算法才适合于并行计算,否则不适合。
2.数据并行化
数据并行化,简单来说就是数据分块,分成若干个可以同时处理的小方块,原则上,划分的数据越规则越好,比如16乘16,32乘32的数据块,当然这最好与硬件的特性匹配起来,如硬件的位宽
3.操作并行化
在这一步严格来说,就是算法处理的一些细节优化了,比如尽可能减少中间变量的产生,计算尽可能的一步到位,比如在保证计算结果不发生质变的情况下可以牺牲一部分精度,如double类型的计算改为float类型的计算等等
算法的优化核心还是在于理解整个的物理过程,如何将物理过程的实现进行简化,其实是在并行化计算之前应该首先思考和完成的任务,
大概就想到这么多,目前优化还在进行,后边想到再更吧,待续。。。。