【TensorFlow源码系列】【四】图优化算法:constant folding和CSE

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

相关文章
相关标签/搜索