TensorFlow中使用的图优化算法有:constant folding 和CSE(common-subexpression elimination)算法
【算法一】constant foldingexpress
该算法,是将graph中常量的计算合并起来。例如: C = A+B,其中A和B都是constant,好比 A= 2,B =3,则在使用C时,直接使用C =5,而不是使用C =2+3;由于每使用一次C,若是都须要计算一次的话,则浪费了大量计算。性能
该算法的实如今 core/common_runtime/constant_folding.h 中的ConstantFold接口中。优化
借用 constant_folding_test.cc中的一个示例,能够说明constant folding想要作的事情。3d
其中a/b/c均是常量,则m1和m2也能够计算出是常量,则s1能够直接经过m1计算获得,而不用经过计算m1= a+b获得。这种常量算子合并算法,减小了没必要要的重复计算量,提高了计算性能。code
ConstantFold: // 1. 找出graph中的constant // 2. 将constant进行算子合并 // 3. 使用合并后的算子替换掉原始graph中被合并的算子
【算法二】CSE,公共子表达式合并blog
举个例子吧!接口
A = (B+C)*D + (B+C)*E;io
若是B+C已经计算过了,值记为W,即W = B+C,且计算A时,B和C均在上次计算后,至这次计算前均没有发生变化,则A = W*D +W*E,即减小两次B+C的计算。test
其实,原本也是这个道理,咱们计算时也会使用一个中间变量tmp来存储B+C的值,避免B+C计算两次。在B和C都是高维矩阵时,这种方案的节省计算带来的性能提高仍是比较明显的。
该算法的实如今 core/graph/optimizer_cse.h
接口为:OptimizeCSE