问题背景
如果你是matlab用户,你一般都会使用向量化运算进行编程。原因也许很简单,因为matlab针对向量化运算在底层做了深度优化,尤其是针对矩阵乘法调用了MKL之类的高度优化的第三库来加速。所以我们在推演算法的阶段,尽量的以向量化,矩阵化,张量化的数学语言来描述算法,不仅仅是描述问题变得简单,更重要的是实现起来也比较容易。事实上还有另外一个原因,和代码本身是否经过深度优化无关。
问题分析
我们知道,程序代码运行的时间不仅仅和算法的计算复杂度有关,还和内存读写有莫大的关系。我们把它们表示为两部分和,如果你的软件系统有次的内存读写,每次读写内存的平均时间为;还有的在执行计算,每一次实施计算的平均时间为,则有:
表示平均每读/写一次数据可以实施计算的次数,显然 这个值越大,该项任务的执行效率就越高。
常见向量化运算的q值
我们直接给出一个表格吧:
这里假设向量或矩阵的维度为,我们发现只有矩阵乘法的值和有关,其它两种运算都是一个常数,其中标量乘法的运算效率是最低的。
结论
算法的实施采用矩阵语言描述不仅能使算法本身言简意赅,在真正实施计算的时候也是效率最高的,和是否使用了最优化的代码本身没有任何关系。