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