國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
smcSL 有訂定安全權限結構,編譯器會在最保守的考量下盡量呼叫 smc protocol 確保資訊不會外洩。使用者在不了解 smcSL 運作下可能會依個人習慣 寫出效能低落的 expression(如式 5-1),而本研究會將這種算式重整,進而節省 smc 的花費量。
(Alice 個人財產–Bob 個人財產)+(Alice 不動產–Bob 不動產)>0?
式5-1 使用者習慣造成效能低落的算式
第三點延續第二點,使用者有時為了程式的可讀性,參數名稱不一定會 標示所屬 Party。而使用者會依參數名稱用簡單明瞭的邏輯去撰寫 expression,
也會盡量將繁複的計算用乘法公式整理成容易計算的形式。程式設計師為了方 便自己程式的管理,不會刻意去避免 smc 運算讓程式複雜化,是可讀性和程式 效率之間的 trade-off。但在 smc protocol 的計算消耗明顯大於 local 運算的狀 況下,使用者寫程式的好習慣反而變成了拖累 runtime 執行效率的主因。而 smcSL 的編譯器則在編譯過程中協助優化,雖然 compile 出來的 C++, ruby 目 的碼可讀性降低,但能在確保 smcSL 的程式本身可讀性的前提下避免了效率的 損失。
5-3 smcSL 針對效能改進的未來展望
原本的 smcSL 編譯器沒有優化程式的功能,從 expression 的改寫是個開端,
並且能參考其他語言已成熟的編譯器來擴增。而 smc 的節省對於 runtime 時的 效率至關重要,目前知道引入能更加優化的相關工作有以下三點:
1. Condition expression 等號兩邊的交換律。
2. 跨 Expression 之間的優化:
Dependency of left element in assignment
Expression in for loop
45
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
3. 給予不同運算(int, float)更細緻的權重,讓優化更為精確。
第一點在第三章語法樹的改寫中有提到,使用 comparator 左右方的交換律 來減少 smc 的消耗,效果能夠和加法及乘法的交換律一樣好。但要注意的是交 換過去的元素要轉成加減法還是乘除法的反元素,加減法可以依循 rule1 的群 聚效應讓 smc 的加減法降為 local 運算,而乘除法牽扯到整數浮點數等變化要 小心處理。
此研究目前僅針對單一 expression 去做優化,但許多成熟的語言會去移動 statement 的先後順序來提升效率。未來 smcSL 也可以參考這些語言的編譯器,
除了單一 expression 的優化外,對整體程式用交換順序或簡化程式的方式編譯。
如式 5-2 中有無意義的重複 assignment,編譯器可以把沒有 dependency 的 assignment 1 直接移除不產生程式碼。
s=a+b //assignment 1 s=a-b //assignment 2 s=s+a+b //assignment 3
式5-2 1 和 2 無 dependency 但 2 和 3 有 dependency
在 4-2 的 for 迴圈中,也牽扯到每次回圈之間的依存關係,編譯器可以選擇 展開後做優化。甚至能在確保 expression 不會被迴圈中其他 statement 使用到 之後,將每次迴圈的運算濃縮起來,並用 rule1 和 rule2 找出重寫的可能性。目 前的 smcSL 僅能對每一次迴圈的每個 expression 單獨的優化。
最後一點提到權重的處理,因為 smc protocol 使用上的需要,不同的函式 有著不同的效率。像是整數和浮點數的乘除,如圖 5-2 和 5-3 可以看出浮點數 與整數在使用scalar product 次數與運算時間上有著極大的差異。而若之後 smc
46
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
protocol 本身有提升效率的改版,也會導致編譯器優化的策略會有所不同。所 以未來smcSL 的研究可以考慮調整各個運算的權重,配合左右運算元的型態,
讓編譯器選擇更佳的優化策略。
圖5-2 浮點數乘法與除法所消耗的scalar product 次數以及運算時間(s)
圖5-3 整數乘法與除法所消耗的scalar product 次數以及運算時間(s)
47